将变量附加到 app 与 Flask 中的 current_app 相同吗?

tza*_*azo 6 python flask

与这个问题类似,我想在整个 Flask 应用程序(所有请求)之间共享一个变量。

我正在编译一个大数据文件(相当大的开销),并且希望尽可能少地进行编译 - 将结果存储在变量中,以便以后可以访问它。使用将flask.g不起作用,因为它在请求之间被擦除干净。

六年前,Armin Ronacher(Flask 的创建者)在Reddit 帖子中说道:

您可以将其附加到应用程序对象并通过 访问它 flask.current_app.whatever_variable

这是我的两个问题:

A) 这仍然是推荐的做法吗?

B) 这两种方法(附加到应用程序工厂current_appapp应用程序工厂内部)是否等效?

使用current_app

from flask import current_app
current_app.my_var = <<file>>
Run Code Online (Sandbox Code Playgroud)

使用应用程序工厂

def create_app(config_filename):
    app = Flask(__name__)
    app.config.from_pyfile(config_filename)
    app.my_var = <<file>>
    ...
    return app
Run Code Online (Sandbox Code Playgroud)

小智 0

通常在我的项目中,我创建一个 Globals.py 来在程序的每个部分中使用全局变量,如下所示:

from celery import Celery
from flask_babel import Babel
from flask_marshmallow import Marshmallow
from flask_socketio import SocketIO
from flask import json, Flask

app: Flask = None
marshmallow: Marshmallow = Marshmallow()
socket = SocketIO(async_mode="eventlet", json=json)
celery: Celery
babel = Babel()
current_user = None


def init_globals(currentApp):
    global marshmallow
    global app
    global socket
    global celery
    global babel
    app = currentApp
    marshmallow.init_app(app)
    babel.init_app(app)
    socket.init_app(app)

    celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
    celery.conf.update(app.config)
Run Code Online (Sandbox Code Playgroud)

并在 main.py 中执行此操作

import Globals
app = Flask(__name__)
Globals.init_globals(app)
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

1367 次

最近记录:

5 年,8 月 前