为什么CherryPy对象属性在请求之间保持不变?
问题内容:
我正在为CherryPy应用程序编写调试方法。有问题的代码基本上(完全)等效于此:
import cherrypy
class Page:
def index(self):
try:
self.body += 'okay'
except AttributeError:
self.body = 'okay'
return self.body
index.exposed = True
cherrypy.quickstart(Page(), config='root.conf')
我惊讶地发现,从请求到请求,self.body的输出不断增长。当我从一个客户端访问该页面,然后从另一个同时打开的客户端访问该页面,然后刷新这两个浏览器时,输出的字符串“
okay”越来越多。在调试方法中,我还记录了特定于用户的信息(即会话数据),并且这也显示在两个用户的输出中。
我假设这是因为python模块已加载到工作内存中,而不是针对每个请求都重新运行。
我的问题是:如何运作?如何在请求之间保留self.debug,但不保留cherrypy.session和cherrypy.response?
是否有任何方法可以设置仅用于当前请求的对象属性?我知道我可以为每个请求覆盖self.body,但这似乎是临时的。在CherryPy中是否有标准或内置的方法?
(第二个问题移到CherryPy缓存如何工作?)
问题答案:
synthesizerpatel的分析是正确的,但是如果您确实希望每个 请求
存储一些数据,则将其作为属性存储在上cherrypy.request
,而不是在会话中。在cherrypy.request
和.response
对象是新的每个请求,所以没有担心他们的任何属性都将跨请求保留。这是做到这一点的规范方法。只要确保您没有覆盖任何cherrypy的内部属性即可!cherrypy.request.body
,例如,已经预留给您,例如POSTed
JSON请求正文。
有关范围界定工作原理的所有详细信息,最好的源代码是。