Jadi, saya percaya bahwa jawaban yang valid untuk ini adalah: awalan harus dikonfigurasi dalam aplikasi server sebenarnya yang Anda gunakan saat pengembangan selesai. Apache, nginx, dll.
Namun, jika Anda ingin ini bekerja selama pengembangan sambil menjalankan aplikasi Flask dalam debug, lihat inti berikut ini. .
Flask DispatcherMiddleware
untuk menyelamatkan!
Saya akan menyalin kode di sini untuk anak cucu:
"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__) # I think this adds APPLICATION_ROOT
# to the config - I'm not exactly sure how!
# alternatively:
# app.config['APPLICATION_ROOT'] = APPLICATION_ROOT
@app.route('/')
def index():
return 'Hello, world!'
if __name__ == '__main__':
# Relevant documents:
# http://werkzeug.pocoo.org/docs/middlewares/
# http://flask.pocoo.org/docs/patterns/appdispatch/
from werkzeug.serving import run_simple
from werkzeug.wsgi import DispatcherMiddleware
app.config['DEBUG'] = True
# Load a dummy app at the root URL to give 404 errors.
# Serve app at APPLICATION_ROOT for localhost development.
application = DispatcherMiddleware(Flask('dummy_app'), {
app.config['APPLICATION_ROOT']: app,
})
run_simple('localhost', 5000, application, use_reloader=True)
Sekarang, saat menjalankan kode di atas sebagai aplikasi Flask yang berdiri sendiri, http://localhost:5000/spam/
akan munculHello, world!
.
Dalam komentar di jawaban lain, saya menyatakan bahwa saya ingin melakukan sesuatu seperti ini:
from flask import Flask, Blueprint
# Let's pretend module_blueprint defines a route, '/record/<id>/'
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()
# I now would like to be able to get to my route via this url:
# http://host:8080/api/some_submodule/record/1/
Menerapkan DispatcherMiddleware
contoh buatan saya:
from flask import Flask, Blueprint
from flask.serving import run_simple
from flask.wsgi import DispatcherMiddleware
# Let's pretend module_blueprint defines a route, '/record/<id>/'
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)
# Now, this url works!
# http://host:8080/api/some_submodule/record/1/
flask.Flask#create_url_adapter
danwerkzeug.routing.Map#bind_to_environ
kelihatannya seperti itu harus bekerja - bagaimana anda menjalankan kode? (Aplikasi sebenarnya perlu dipasang di sub-jalur di lingkungan WSGI untukurl_for
mengembalikan nilai yang diharapkan.)