我 saw g
将从请求上下文移动到 Flask 0.10 中的应用程序上下文,这让我对 g
的预期用途感到困惑。
我的理解(对于 Flask 0.9)是:
g
存在于请求上下文中,即在请求开始时重新创建,并且在请求结束之前可用g
旨在用作“请求黑板”,我可以在其中放置与请求持续时间相关的内容(即,在请求的开头设置一个标志并处理它最后,可能来自before_request
/after_request
对)- 除了保持请求级状态之外,
g
可以而且应该用于资源管理,即保持数据库连接等。
哪些句子在 Flask 0.10 中不再正确?有人可以指出我讨论更改的原因的资源吗?我应该在 Flask 0.10 中使用什么作为“请求黑板”——我应该创建自己的应用程序/扩展特定线程本地代理并将其推送到上下文堆栈before_request
?如果我的应用程序存在很长时间(不像请求)并且资源永远不会被释放,那么在应用程序上下文中进行资源管理有什么意义?
最佳答案
Advanced Flask Patterns ,如 linked by Markus ,解释了 0.10 中对 g
的一些更改:
g
现在位于应用程序上下文中。- Every request pushes a new application context ,删除旧的,因此
g
仍可用于为每个请求设置标志,而无需更改代码。 - 应用程序上下文在
teardown_request
被调用后弹出。 (Armin 的演示文稿解释说这是因为创建数据库连接之类的任务是设置请求环境的任务,不应在before_request
和after_request
)
关于python - 什么时候应该使用 Flask.g?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15083967/