【发布时间】:2013-10-17 02:55:36
【问题描述】:
我正在尝试在我的flask 应用程序中保存一个缓存字典。
据我了解,Application Context,尤其是flask.g object 应该用于此。
设置:
import flask as f
app = f.Flask(__name__)
现在如果我这样做:
with app.app_context():
f.g.foo = "bar"
print f.g.foo
它打印bar。
继续以下内容:
with app.app_context():
print f.g.foo
AttributeError: '_AppCtxGlobals' object has no attribute 'foo'
我不明白,文档根本没有帮助。如果我正确阅读它们,状态应该被保留。
另一个想法我的想法是简单地使用模块范围的变量:
cache = {}
def some_function():
cache['foo'] = "bar"
但似乎这些在每次请求时都会重置。
如何正确地做到这一点?
编辑: Flask 10.1
【问题讨论】:
-
不,感谢您的链接,但这是一个如此简单的任务,我想保持低 atm 的依赖关系。
-
我想我最终选择了浏览器 cookie。但是,当然欢迎您在找到解决方案后发布解决方案。
-
会话可能是解决方案,但会话是按用户保留的,因此它有其局限性。其他选项是内存缓存。它是简单的 key->value 存储,易于配置并在所有线程和进程之间共享。然而,有时(就像我的情况一样)它有点太复杂了,所以我想只在全局范围内使用字典。风险是数据完整性(对我来说不是一个因素),但相同的字典将在某些进程之间共享。