我正在尝试与从另一个文件导入的flask应用程序共享我在主函数中定义的变量。首先,我试图通过一个经典的全局
变量来解决这个问题,但这个变量并没有给我带来任何进展,直到我无意中发现了flask的概念。g和应用程序上下文。
所以我尝试了以下方法:我在同一个目录中有两个文件,一个main。py
:
# main.py
import app
from flask import g
if __name__ == "__main__":
with app.app.app_context():
g.value = "Hello World"
app.app.run(debug=True, threaded=True, host='localhost', port=5000)
还有一个应用程序。py
:
# app.py
from flask import Flask, g
app = Flask(__name__)
@app.route('/helloworld')
def send_response():
return g.value
然而,当我在http://localhost:5000/helloworld我明白了
AttributeError: '_AppCtxGlobals' object has no attribute 'value'
因此,在一个文件中设置值g.value
似乎没有反映在应用程序中。我是烧瓶的初学者,很可能我没有正确理解这个概念。类似的问题没有得到我可以用来解决这个问题的任何答案:烧瓶传递全局变量,python-如何在烧瓶中设置全局变量?,在烧瓶应用程序中保存全局状态
非常感谢您的帮助!
只需使用一个常规的Python模块级变量。
# app.py
g = "Example"
@app.route("/example")
def example_endpoint():
return g
# main.py
import app
app.g = "Hello"
引用您链接的同一页:
根据需要创建和销毁应用程序上下文。当Flask应用程序开始处理请求时,它会推送应用程序上下文和请求上下文。当请求结束时,它会弹出请求上下文,然后弹出应用程序上下文。通常,应用程序上下文的生存期与请求的生存期相同。
因此,您的设置flask。请求上下文之外的g
(在main.py
中)不会将您的值带到任何地方。