gpt4 book ai didi

python - 在应用程序工厂之外访问 Flask 配置

转载 作者:行者123 更新时间:2023-11-28 22:37:33 28 4
gpt4 key购买 nike

我目前正在使用带有蓝图的 Flask 应用程序工厂模式。我遇到的问题是如何访问应用程序工厂外部的 app.config 对象?

我不需要 Flask 应用程序的所有配置选项。我只需要6把 key 。所以我目前这样做的方法是在调用 create_app(应用程序工厂)时,我基本上创建了一个 global_config 字典对象,我只是将 global_config 字典设置为具有我需要的 6 个键。

然后,其他需要这些配置选项的模块,他们只需导入 global_config 字典。

我在想,一定有更好的方法来做到这一点吧?

那么,进入代码

我当前的 init.py 文件:

def set_global_config(app_config):
global_config['CUPS_SAFETY'] = app_config['CUPS_SAFETY']
global_config['CUPS_SERVERS'] = app_config['CUPS_SERVERS']
global_config['API_SAFE_MODE'] = app_config['API_SAFE_MODE']
global_config['XSS_SAFETY'] = app_config['XSS_SAFETY']
global_config['ALLOWED_HOSTS'] = app_config['ALLOWED_HOSTS']
global_config['SQLALCHEMY_DATABASE_URI'] = app_config['SQLALCHEMY_DATABASE_URI']


def create_app(config_file):
app = Flask(__name__, instance_relative_config=True)

try:
app.config.from_pyfile(config_file)
except IOError:
app.config.from_pyfile('default.py')
cel.conf.update(app.config)
set_global_config(app.config)
else:
cel.conf.update(app.config)
set_global_config(app.config)

CORS(app, resources=r'/*')
Compress(app)

# Initialize app with SQLAlchemy
db.init_app(app)
with app.app_context():
db.Model.metadata.reflect(db.engine)
db.create_all()

from authenication.auth import auth
from club.view import club
from tms.view import tms
from reports.view import reports
from conveyor.view import conveyor

# Register blueprints
app.register_blueprint(auth)
app.register_blueprint(club)
app.register_blueprint(tms)
app.register_blueprint(reports)
app.register_blueprint(conveyor)
return app

需要访问这些 global_config 选项的模块示例:

from package import global_config as config

club = Blueprint('club', __name__)

@club.route('/get_printers', methods=['GET', 'POST'])
def getListOfPrinters():
dict = {}

for eachPrinter in config['CUPS_SERVERS']:
dict[eachPrinter] = {
'code': eachPrinter,
'name': eachPrinter
}
outDict = {'printers': dict, 'success': True}
return jsonify(outDict)

必须有比在应用程序周围传递全局字典更好的方法吗?

最佳答案

这里不需要使用全局名称,这首先违背了使用应用程序工厂的目的。

在 View 中,例如在您的示例中,current_app绑定(bind)到处理当前应用程序/请求上下文的应用程序。

from flask import current_app

@bp.route('/')
def example():
servers = current_app.config['CUPS_SERVERS']
...

如果您在设置蓝图时需要访问应用程序,record装饰器标记使用蓝图注册状态调用的函数。

@bp.record
def setup(state):
servers = state.app.config['CUPS_SERVERS']
...

关于python - 在应用程序工厂之外访问 Flask 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36435103/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com