据我所知,g变量是一个临时存储,从一个请求到另一个请求。例如,我认为它应该像这样工作。但我无法让它发挥作用。
from flask import Flask, g, redirect, url_for
app = Flask(__name__)
@app.route('/')
def hello_world():
g = "hello world"
return redirect(url_for('test'))
@app.route('/test')
def test():
return str(g)
if __name__ == "__main__":
app.run(debug=True)
答案 0 :(得分:5)
Flask g
在应用程序上下文中可用,并且在请求的生命周期内持续。
What is application context?
如Application Context Page所述,烧瓶应用程序在执行时处于许多状态。
Flask背后的设计思想之一是有两种不同的“状态”,其中代码被执行。应用程序设置状态,其中应用程序隐式位于模块级别。它在实例化Flask对象时启动,并在第一个请求进入时隐式结束。当应用程序处于此状态时,有一些假设是正确的:
- 程序员可以安全地修改应用程序对象。
- 到目前为止没有请求处理
- 你必须有一个对应用程序对象的引用才能修改它,没有魔法代理可以为你提供你当前正在创建或修改的应用程序对象的引用。
相反,在请求处理期间,存在一些其他规则:
- 当请求处于活动状态时,上下文本地对象(flask.request和其他)指向当前请求。
- 任何代码都可以随时获取这些对象。
还有第三种状态介于两者之间。有时,您正在以类似于在请求处理期间与应用程序交互的方式处理应用程序;只是没有活动的请求。例如,考虑一下,您正坐在交互式Python shell中并与应用程序或命令行应用程序进行交互。
因此,基本上在您运行应用程序时,它会在许多州退出。
示例:一个正在处理您的请求,一个正在查看要重新加载的文件。
如果您使用Celery,则必须在单独的应用程序上下文中运行它。那是g
的角色发挥作用的时候。
芹菜的一个非常常见的用途是异步发送邮件。
想象一下,你抓住了一个请求,经过处理后你需要发一封邮件。
您可以将用户信息存储在g
中以传递给芹菜。