我发现了很多旧版CherryPy的例子,但它们都引用了在cherrypy 3.2.2中找不到的导入模块。 Looking in the documentation,我发现了一个事实,即内置了storage_type
功能(“ram”,“file”,“ postgresql ”之一)。
答案 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”类一样。
我一直都错了。但这就是我试图解决这个问题的方法。