इसलिए, मेरा मानना है कि इसका एक मान्य उत्तर यह है: उपसर्ग को वास्तविक सर्वर अनुप्रयोग में कॉन्फ़िगर किया जाना चाहिए जिसका उपयोग आप विकास पूरा होने पर करते हैं। अपाचे, नग्नेक्स, आदि।
हालांकि, अगर आप विकास के दौरान काम करने के लिए इस चाहते हैं डिबग में बोतल एप्लिकेशन चलाते समय पर एक नज़र डालें इस सार ।
कुप्पी की 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__) # 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)
अब, एक स्वसंपूर्ण फ्लास्क ऐप के रूप में उपरोक्त कोड चलाते समय, http://localhost:5000/spam/
प्रदर्शित करेगाHello, world!
।
एक अन्य उत्तर पर एक टिप्पणी में, मैंने व्यक्त किया कि मैं इस तरह से कुछ करना चाहता हूं:
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/
DispatcherMiddleware
मेरे आकस्मिक उदाहरण पर लागू :
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
औरwerkzeug.routing.Map#bind_to_environ
ऐसा लगता है कि यह काम करना चाहिए - आप कोड कैसे चला रहे थे? (url_for
अपेक्षित मूल्य को वापस करने के लिए ऐप को वास्तव में एक WSGI वातावरण में उप-पथ पर रखा जाना चाहिए ।)