从Flask中的父应用程序继承配置

时间:2014-04-30 21:41:01

标签: python flask

我有一个构建如下的应用程序:

app = Flask(__name__)

app.wsgi_app = DispatcherMiddleware(frontend.create_app(), {
    '/api': api.create_app()
})

app.config['DATABASE'] = db

我想在frontendapi应用中访问同一个数据库,但是当我在注册到current_app.config['DATABASE']的蓝图中运行api之类的内容时,会引发{ {1}}。是否可以继承配置,以便测试等只需要修改顶级抽象?感谢。

1 个答案:

答案 0 :(得分:3)

只需更改create_appfrontend上的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已经可以为您执行此操作。

另请注意,如果您已经在使用蓝图,那么简单地发布蓝图并在单个应用程序上组合它们可能更有意义,而不是使用调度程序中间件(当然,这取决于您的应用程序的复杂程度)。