我有一个构建如下的应用程序:
app = Flask(__name__)
app.wsgi_app = DispatcherMiddleware(frontend.create_app(), {
'/api': api.create_app()
})
app.config['DATABASE'] = db
我想在frontend
和api
应用中访问同一个数据库,但是当我在注册到current_app.config['DATABASE']
的蓝图中运行api
之类的内容时,会引发{ {1}}。是否可以继承配置,以便测试等只需要修改顶级抽象?感谢。
答案 0 :(得分:3)
只需更改create_app
和frontend
上的api
方法即可获取配置字典并使用flask.Config
创建包含app.config
所有属性的配置(可从环境变量等加载):
from flask import Config
from werkzeug.wsgi import DispatcherMiddlware
config = Config()
config.from_envvar("YOUR_PROGRAM_CONFIG")
app = DispatcherMiddlware(frontend.create_app(config), {
'/api': api.create_app(config)
})
然后,您可以将提供的配置与您的每个应用配置合并:
def create_app(config):
app = Flask(__name__)
app.config.update(config)
# Potentially, load another config
app.config.from_envvar("YOUR_PROGRAM_CONFIG_FRONTEND", silent=True)
return app
请注意,无需创建应用以路由到其他应用 - dispatcher middleware已经可以为您执行此操作。
另请注意,如果您已经在使用蓝图,那么简单地发布蓝图并在单个应用程序上组合它们可能更有意义,而不是使用调度程序中间件(当然,这取决于您的应用程序的复杂程度)。