如何在MySQL中为CherryPy 3.2.2存储Web会话?

时间:2012-03-21 19:45:34

标签: mysql session cherrypy

我发现了很多旧版CherryPy的例子,但它们都引用了在cherrypy 3.2.2中找不到的导入模块。 Looking in the documentation,我发现了一个事实,即内置了storage_type功能(“ram”,“file”,“ postgresql ”之一)。

1 个答案:

答案 0 :(得分:3)

首先你可以看看

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

这个人如何编写自己的会话类并覆盖一些方法。他为redis做的不是MySQL。你会为MySQL编写方法。在cherpey / lib / sessions.py中,cherrypy中已经存在一个非常相似的类:

class PostgresqlSession(Session)

这与你想要的非常相似。我会说,采用“3kwa”的实现方法,而不是他的RedisSession类从“cherrpy / lib / sessions.py”复制PostgresqlSession类,并改为匹配正确的MySQL语法。

可能的路径可能是:

从上面的链接下载“cherrys.py”并重命名为“mysqlsession.py”。使用“cherrpy / lib / sessions.py”中的“PostgresqlSession(Session)”覆盖“RedisSessions(Session)”并重命名为“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

在你的app初始化中。在配置

tools.sessions.storage_type : 'mysql'

和参数(如主机,端口等)就像使用“PostgreSQL”类一样。

我一直都错了。但这就是我试图解决这个问题的方法。