所以,我认为一个有效的答案是:当开发完成时,在实际使用的服务器应用程序中配置前缀。Apache、nginx等。
但是,如果你想在调试期间运行Flask应用程序时使其起作用,请查看this gist。
Flask的DispatcherMiddleware
来拯救!
我将在此处复制代码:
"Serve a Flask app on a sub-url during localhost development."
from flask import Flask
APPLICATION_ROOT = '/spam'
app = Flask(__name__)
app.config.from_object(__name__)
@app.route('/')
def index():
return 'Hello, world!'
if __name__ == '__main__':
from werkzeug.serving import run_simple
from werkzeug.wsgi import DispatcherMiddleware
app.config['DEBUG'] = True
application = DispatcherMiddleware(Flask('dummy_app'), {
app.config['APPLICATION_ROOT']: app,
})
run_simple('localhost', 5000, application, use_reloader=True)
现在,当将上述代码作为独立的Flask应用运行时,
http://localhost:5000/spam/
将显示
Hello, world!
。
在对另一个答案进行评论时,我表达了希望做类似于这样的事情:
from flask import Flask, Blueprint
from some_submodule.flask import module_blueprint
app = Flask(__name__)
app.config['APPLICATION_ROOT'] = '/api'
app.register_blueprint(module_blueprint, url_prefix='/some_submodule')
app.run()
将DispatcherMiddleware
应用于我编造的示例:
from flask import Flask, Blueprint
from flask.serving import run_simple
from flask.wsgi import DispatcherMiddleware
from some_submodule.flask import module_blueprint
app = Flask(__name__)
app.config['APPLICATION_ROOT'] = '/api'
app.register_blueprint(module_blueprint, url_prefix='/some_submodule')
application = DispatcherMiddleware(Flask('dummy_app'), {
app.config['APPLICATION_ROOT']: app
})
run_simple('localhost', 5000, application, use_reloader=True)
app.register_blueprint
下面的url_prefix
和在实例化蓝图对象时通过传递url_prefix='/abc/123'
之间的区别吗?谢谢! - aralarregister_blueprint
调用中使用 URL 前缀使应用程序可以自由地将蓝图 "挂载" 到任何想要的位置,甚至可以在不同的 URL 上多次挂载相同的蓝图。如果在蓝图本身中放置前缀,则这使得应用程序更容易,但灵活性较低。 - Miguel Grinberg