• en
  • Language: ru
  • Documentation version: 0.1

CherryPy Framework

Поддерживается фреймворк CherryPy, он работает, но я уверен, что есть место для улучшений. Реализация использует SQLAlchemy в качестве ORM и ожидает, что некоторые значения, доступные по cherrypy.request, будут работать.

В настоящее время конфигурация ожидается на cherrypy.config, но в идеале она должна быть конфигурацией приложения.

Ожидаемые значения составляют:

cherrypy.request.user

Текущий вошедший пользователь, загрузите его в ваше приложение на обработчике before_handler.

cherrypy.request.db

Текущий сеанс базы данных, опять же, загрузите его в ваше приложение на before_handler.

Зависимости

Приложение CherryPy зависит от sqlalchemy, поддержка других ORM пока отсутствует.

Установка

От pypi:

$ pip install social-auth-app-cherrypy

Включение приложения

Приложение определено на social_cherrypy.views.CherryPyPSAViews, зарегистрируйте его предпочтительным для вашего проекта способом.

Остальные настройки, такие как включение бэкендов аутентификации и ключей бэкендов, смотрите в остальных документах.

Настройка моделей

Модели находятся в каталоге social_cherrypy.models. В настройках проекта необходимо определить ссылку на вашу модель User, это должен быть путь импорта, например:

cherrypy.config.update({
    'SOCIAL_AUTH_USER_MODEL': 'models.User'
})

Механизм входа в систему

По умолчанию приложение устанавливает значение сессии user_id, это простое решение и оно должно быть улучшено, если вы хотите предоставить свой собственный механизм входа, вы можете сделать это, определив настройку SOCIAL_AUTH_LOGIN_METHOD, это должен быть путь импорта к вызываемому файлу, как это:

SOCIAL_AUTH_USER_MODEL = 'app.login_user'

И пример этой функции:

def login_user(strategy, user):
    strategy.session_set('user_id', user.id)

Затем убедитесь, что пользователь загружен в ваше приложение по адресу cherrypy.request.user, например:

def load_user():
    user_id = cherrypy.session.get('user_id')
    if user_id:
        cherrypy.request.user = cherrypy.request.db.query(User).get(user_id)
    else:
        cherrypy.request.user = None


cherrypy.tools.authenticate = cherrypy.Tool('before_handler', load_user)