CherryPy Framework¶
Поддерживается фреймворк CherryPy, он работает, но я уверен, что есть место для улучшений. Реализация использует SQLAlchemy в качестве ORM и ожидает, что некоторые значения, доступные по cherrypy.request
, будут работать.
В настоящее время конфигурация ожидается на cherrypy.config
, но в идеале она должна быть конфигурацией приложения.
Ожидаемые значения составляют:
cherrypy.request.user
Текущий вошедший пользователь, загрузите его в ваше приложение на обработчике
before_handler
.cherrypy.request.db
Текущий сеанс базы данных, опять же, загрузите его в ваше приложение на
before_handler
.
Зависимости¶
Приложение CherryPy зависит от sqlalchemy, поддержка других ORM пока отсутствует.
Включение приложения¶
Приложение определено на 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)