Хранение¶
Различные фреймворки поддерживают различные ORM, Storage решает проблему различных интерфейсов, перемещая общий API в классы mixins. Эти миксины используются в приложениях при определении различных моделей, используемых python-social-auth
.
Nonce¶
This is a helper class for OpenID mechanism, it stores a one-use number, shouldn’t be used by the project since it’s for internal use only.
When implementing this model, it must inherit from NonceMixin, and override the needed methods:
@classmethod
def use(cls, server_url, timestamp, salt):
"""Create a Nonce instance"""
raise NotImplementedError('Implement in subclass')
@classmethod
def get(cls, server_url, salt):
"""Retrieve a Nonce instance"""
raise NotImplementedError('Implement in subclass')
@classmethod
def delete(cls, nonce):
"""Delete a Nonce instance"""
raise NotImplementedError('Implement in subclass')
Ассоциация¶
Another OpenID helper class, it stores basic data to keep the OpenID association. Like Nonce this is for internal use only.
При реализации этой модели, она должна наследоваться от AssociationMixin, и переопределять необходимые методы:
@classmethod
def store(cls, server_url, association):
"""Create an Association instance"""
raise NotImplementedError('Implement in subclass')
@classmethod
def get(cls, *args, **kwargs):
"""Get an Association instance"""
raise NotImplementedError('Implement in subclass')
@classmethod
def remove(cls, ids_to_delete):
"""Remove an Association instance"""
raise NotImplementedError('Implement in subclass')
Код проверки¶
Этот класс используется для отслеживания кодов проверки электронной почты после обычного механизма проверки электронной почты, заключающегося в отправке пользователю письма с уникальным кодом. Эта модель используется частичным конвейером social_core.pipeline.mail.mail_validation
. Ознакомьтесь с документацией по адресу Email validation в pipeline docs.
При реализации модели для вашего фреймворка необходимо переопределить только один метод:
@classmethod
def get_code(cls, code):
"""Return the Code instance with the given code value"""
raise NotImplementedError('Implement in subclass')
Интерфейс хранения¶
Существует вспомогательный класс, используемый стратегиями для скрытия имен реальных моделей под общим API, экземпляр этого класса используется стратегиями для доступа к модулям хранения.
При реализации этого класса он должен наследоваться от BaseStorage, добавить необходимые ссылки на модели и реализовать необходимый метод:
class StorageImplementation(BaseStorage):
user = UserModel
nonce = NonceModel
association = AssociationModel
code = CodeModel
@classmethod
def is_integrity_error(cls, exception):
"""Check if given exception flags an integrity error in the DB"""
raise NotImplementedError('Implement in subclass')
Миксины SQLAlchemy и Django¶
В настоящее время существуют частичные реализации миксинов для SQLAlchemy ORM и Django ORM с общим кодом, используемым позже в текущих реализованных приложениях.
Примечание
При использовании SQLAlchemy ORM и ZopeTransactionExtension
рекомендуется использовать для их обработки приложение transaction.
Примеры моделей¶
Проверьте текущие реализации для Django App, Flask App, Pyramid App и Webpy App для примеров реализации.
Социальный пользователь¶
Эта модель связывает данные социального аккаунта с пользователем в системе, она содержит имя провайдера и ID пользователя (
uid
), которые должны идентифицировать социальный аккаунт в удаленном провайдере, плюс некоторые дополнительные данные (extra_data
), которые представляют собой JSON закодированное поле с дополнительной информацией от провайдера (обычно аватары и подобное).При реализации этой модели она должна наследоваться от UserMixin и расширять необходимые методы:
Имя пользователя:
Модель пользователя:
Социальный пользователь:
Социальная разобщенность: