Tôi đã thiết lập máy chủ Apache và đang xử lý phản hồi Flask qua mod_wsgi. Tôi đã đăng ký kịch bản WSGI qua bí danh:Làm cách nào để sử dụng các tuyến Flask với Apache và mod_wsgi?
[httpd.conf]
WSGIScriptAlias /service "/mnt/www/wsgi-scripts/service.wsgi"
Tôi đã thêm các tập tin WSGI tương ứng ở đường dẫn ở trên:
[/ mnt/www/wsgi-scripts/service.wsgi]
import sys
sys.path.insert(0, "/mnt/www/wsgi-scripts")
from service import application
Và tôi có một thử nghiệm đơn giản Flask Python script cung cấp các mô-đun dịch vụ:
[/mnt/www/wsgi-scripts/service.py]
from flask import Flask
app = Flask(__name__)
@app.route('/')
def application(environ, start_response):
status = '200 OK'
output = "Hello World!"
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
@app.route('/upload')
def upload(environ, start_response):
output = "Uploading"
status = '200 OK'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
if __name__ == '__main__':
app.run()
Khi tôi đi đến URL trang web của tôi [hostname]/dịch vụ nó hoạt động như mong đợi và tôi nhận được "Hello World!" trở lại. Vấn đề là tôi không biết làm thế nào để có được các tuyến đường khác để làm việc như, 'tải lên' trong ví dụ trên. Điều này hoạt động tốt trong Flask độc lập nhưng theo mod_wsgi tôi stumped. Điều duy nhất tôi có thể tưởng tượng là đăng ký một biệt danh kịch bản WSGI riêng biệt trong httpd.conf cho mỗi điểm cuối mà tôi muốn, nhưng nó sẽ lấy đi sự hỗ trợ định tuyến ưa thích của Flask. Có cách nào để làm cho công việc này?
Bạn đã thử duyệt qua '/ service/upload' chưa? Bạn có thể ngạc nhiên. –
Khi tôi nhấn/dịch vụ/tải lên, yêu cầu vẫn được gửi đến chức năng 'ứng dụng'. Trong thực tế, tôi có thể loại bỏ các tuyên bố tuyến đường trước khi chức năng ứng dụng và nó vẫn hoạt động. Nó giống như ứng dụng luôn được sử dụng bởi mod_wsgi làm điểm vào ứng dụng. Nó cảm thấy như tôi cần phải làm một cái gì đó bên trong 'ứng dụng' mà bắt đầu logic định tuyến của Flask. –