我有两个应用程序工厂函数 - 一个创建“客户”应用程序,另一个创建“管理员”后端应用程序。两个工厂函数基本上都执行了所描述的here - 创建一个烧瓶应用程序并为其注册一些扩展,然后添加一些蓝图(带有url_prefix)。我通过下面的create_combined_app()
将两个应用程序粘合在一起。它是我在Flask-Script的Manager
注册的函数的返回值。
def create_combined_app(config_name):
customer_app = create_customer_app(config_name)
admin_app = create_admin_app(config_name)
from werkzeug.wsgi import DispatcherMiddleware
customer_app.wsgi_app = DispatcherMiddleware(customer_app.wsgi_app, {
'/admin': admin_app
})
return customer_app
然后我就是这样做的。
def make_me_an_app():
return create_combined_app(config)
manager = Manager(make_me_an_app)
...
if __name__ == '__main__':
manager.run()
我想做一些测试,包括获取我的应用的所有GET路线并确保它们加载。我按照here中的示例进行了操作,但我只看到客户应用的网址,而且 admin 后端的网址都没有。
@main.route("/site-map")
def site_map():
from flask import current_app, jsonify
links = []
app = current_app
for rule in app.url_map.iter_rules():
if "GET" in rule.methods and has_no_empty_params(rule):
url = url_for(rule.endpoint, **(rule.defaults or {}))
links.append((url, rule.endpoint))
return jsonify(links)
当我尝试从浏览器访问它时,管理员后端工作 - 这一切都很好用,除了我在调用/ site-map时没有看到管理员的网址。
谢谢! :)
答案 0 :(得分:0)
我认为 DispatcherMiddleware 会创建单独的应用。这意味着您创建了customer_app和admin_app。那些2独立生活。他们不认识对方,因此current_app只是show customer_app。
以下是Flask http://flask.pocoo.org/docs/0.12/patterns/appdispatch/
的描述