提问者:小点点

烧瓶应用程序,全局变量在多个文件[重复]


我正在尝试与从另一个文件导入的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-如何在烧瓶中设置全局变量?,在烧瓶应用程序中保存全局状态

非常感谢您的帮助!


共1个答案

匿名用户

只需使用一个常规的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中)不会将您的值带到任何地方。