Uważam więc, że prawidłowa odpowiedź na to pytanie brzmi: prefiks powinien być skonfigurowany w rzeczywistej aplikacji serwera, której używasz po zakończeniu programowania. Apache, Nginx itp.
Jeśli jednak chcesz, aby to działało podczas programowania podczas uruchamiania aplikacji Flask w trybie debugowania, spójrz na tę istotę .
Kolby DispatcherMiddleware
na ratunek!
Skopiuję kod tutaj dla potomności:
"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)
Teraz, po uruchomieniu powyższego kodu jako samodzielnej aplikacji Flask, http://localhost:5000/spam/
wyświetli sięHello, world!
.
W komentarzu do innej odpowiedzi wyraziłem, że chciałbym zrobić coś takiego:
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()
Odnosząc się DispatcherMiddleware
do mojego wymyślonego przykładu:
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)
flask.Flask#create_url_adapter
iwerkzeug.routing.Map#bind_to_environ
wygląda na to, że powinno działać - jak uruchomiłeś kod? (W rzeczywistości aplikacja musi być zamontowana na ścieżce podrzędnej w środowisku WSGI,url_for
aby zwrócić oczekiwaną wartość.)