与这个问题类似,我想在整个 Flask 应用程序(所有请求)之间共享一个变量。
我正在编译一个大数据文件(相当大的开销),并且希望尽可能少地进行编译 - 将结果存储在变量中,以便以后可以访问它。使用将flask.g不起作用,因为它在请求之间被擦除干净。
六年前,Armin Ronacher(Flask 的创建者)在Reddit 帖子中说道:
您可以将其附加到应用程序对象并通过 访问它
flask.current_app.whatever_variable。
这是我的两个问题:
A) 这仍然是推荐的做法吗?
B) 这两种方法(附加到应用程序工厂current_app或app应用程序工厂内部)是否等效?
使用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 次 |
| 最近记录: |