Как хранить веб-сессии в MySQL для CherryPy 3.2.2? - PullRequest
0 голосов
/ 21 марта 2012

Я нашел много примеров для более старых версий CherryPy, но каждый из них ссылался на импортирующие модули, которых нет в cherrypy 3.2.2. Просматривая документацию , я обнаружил ссылку на то, что есть встроенная функциональность с storage_type (один из 'ram', 'file', ' postgresql ').

1 Ответ

3 голосов
/ 10 апреля 2012

Для начала вы можете взглянуть на

https://github.com/3kwa/cherrys

как этот парень пишет свой собственный сессионный класс и переписывает некоторые методы. Он делает это для Redis не MySQL. Вы бы написали методы для MySQL. Очень похожий класс уже существует в cherrypy в "cherrpy / lib / sessions.py":

class PostgresqlSession(Session)

что очень похоже на то, что вы хотите. Я бы сказал, возьмите подход к реализации из «3kwa», но вместо его класса RedisSession скопируйте класс PostgresqlSession из «cherrpy / lib / sessions.py» и измените его так, чтобы он соответствовал правильному синтаксису MySQL.

Возможный путь может быть:

Загрузите ссылку "cherrys.py" сверху и переименуйте в "mysqlsession.py". Переписать «RedisSessions (Session)» с помощью «PostgresqlSession (Session)» из «cherrpy / lib / sessions.py» и переименовать в «MySQLSession (Session)». Обязательно добавьте

locks = {}

def acquire_lock(self):
    """Acquire an exclusive lock on the currently-loaded session data."""
    self.locked = True
    self.locks.setdefault(self.id, threading.RLock()).acquire()

def release_lock(self):
    """Release the lock on the currently-loaded session data."""
    self.locks[self.id].release()
    self.locked = False

к вашему новому классу "MySQLSession" (как это делается в RedisSession (Session). Измените синтаксис PostgreSQL, чтобы он соответствовал синтаксису MySQL (что не должно быть сложно). Поместите куда-нибудь "mysqlsession.py" ниже директории вашего проекта и импортируйте в приложение с помощью

import mysqlsession

и используйте

cherrypy.lib.sessions.MySQLSession = mysqlsession.MySQLSession

в инициализации вашего приложения. В конфиге

tools.sessions.storage_type : 'mysql'

и параметры (например, хост, порт и т. Д.), Как если бы вы использовали класс "PostgreSQL".

Я могу ошибаться все время. Но так я бы попытался это решить.

...