python - 在蓝图应用程序中访问 Flask 全局变量

标签 python python-3.x flask

我的源代码有这样的结构:

main.py:

from flask import Flask, g
app = Flask(__name__)
with app.app_context():
    g.my_db = PostgreSQL()
    app.register_blueprint(my_app, url_prefix="/my_app")

my_app.py:

from flask import Blueprint, g
my_app = Blueprint("my_app", __name__)
@my_app.route("/")
def index():
    return g.my_db.fetch_all()   <<< ERROR

但它显示此错误:

AttributeError: '_AppCtxGlobals' 对象没有属性 'my_db'

即使我尝试在应用上下文之外使用 g,它也会显示此错误:

RuntimeError:在应用程序上下文之外工作。

那么如何在Flask中设置和访问全局变量呢?

最佳答案

发生这种情况是因为上下文(with app.app_context())结束时数据丢失了 (doc) .

在上下文中,一切正常:

from flask import Flask, g
app = Flask(__name__)
with app.app_context():
    g.my_db = 'database ok'
    print(g.my_db)

# >>> this prints 'database ok'

但在外部,您无法访问该属性:

from flask import Flask, g
app = Flask(__name__)
with app.app_context():
    g.my_db = 'database ok'

print(g.my_db)

# >>> this throws RuntimeError: Working outside of application context

即使你创建了一个新的上下文:

from flask import Flask, g
app = Flask(__name__)
with app.app_context():
    g.my_db = 'database ok'

with app.app_context():
    print(g.my_db)

>>> this throws AttributeError: '_AppCtxGlobals' object has no attribute 'my_db'

您最好的做法是在上下文之前声明数据库对象,然后导入它。或者您可以直接在 my_app.py 中您需要的地方创建它?

关于python - 在蓝图应用程序中访问 Flask 全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50233118/

相关文章:

python - 如何在Python中访问嵌套函数的变量?

android - 如何在没有本地主机通信的情况下使用 REST API 在 android 客户端和 python-Flask 服务器之间进行连接?

flask - Flask:validate_on_submit始终为false,form.errors为空

Python 字符串替换不起作用

python - Jupyter Notebook 中未返回 Plotly 表

python - 有人能解释一下这个 Python 程序中 * 的用法吗?

python - flask migrate 似乎删除了我所有的数据库数据

python - 将 C 数组移植到 Python

python - 多个系列与另一个系列的条件乘法

python - os.walk() 中的特定文件扩展名