ดังนั้นฉันเชื่อว่าคำตอบที่ถูกต้องสำหรับสิ่งนี้คือคำนำหน้าควรได้รับการกำหนดค่าในแอปพลิเคชันเซิร์ฟเวอร์จริงที่คุณใช้เมื่อการพัฒนาเสร็จสมบูรณ์ Apache, nginx ฯลฯ
อย่างไรก็ตามหากคุณต้องการให้สิ่งนี้ทำงานในระหว่างการพัฒนาในขณะที่เรียกใช้แอป 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)
flask.Flask#create_url_adapter
และwerkzeug.routing.Map#bind_to_environ
ดูเหมือนว่ามันควรจะทำงาน - วิธีที่คุณกำลังใช้รหัส? (แอปจำเป็นต้องติดตั้งบนพา ธ ย่อยในสภาพแวดล้อม WSGIurl_for
เพื่อส่งคืนค่าที่คาดหวัง)