Các vấn đề về định tuyến Python khi sử dụng Flask
Tôi có chức năng sau với nhiều tuyến đường có thể:
@bp.route('/list/', defaults={'status': None, 'time': None, 'search': None})
@bp.route('/list/lot/', defaults={'status': None, 'search': None, 'time': None})
@bp.route('/list/lot/<string:time>/', defaults={'status': None, 'search': None})
@bp.route('/list/lot/<string:time>/<string:status>', defaults={'search': None})
@bp.route('/list/lot/<string:time>/<string:status>?search=<path:search>')
@login_required
def index(status, time, search):
print(search)
Tất cả các tuyến đều hoạt động tốt, ngoại trừ tuyến cuối cùng. Tôi có URL như thế này:
http://192.168.10.88:5000/list/lot/OLDER/NEW?search=test
Và tôi không hiểu tại sao, bản in luôn bị trả lại None.
Có ý kiến gì không?
Cảm ơn
Trả lời
Bạn có thể sử dụng requesthoặc request.query_stringnếu bạn muốn lấy chuỗi truy vấn:
from flask import request
@bp.route('/list/', defaults={'status': None, 'time': None, 'search': None})
@bp.route('/list/lot/', defaults={'status': None, 'search': None, 'time': None})
@bp.route('/list/lot/<string:time>/', defaults={'status': None, 'search': None})
@bp.route('/list/lot/<string:time>/<string:status>', defaults={'search': None})
@bp.route('/list/lot/<string:time>/<string:status>?search=<path:search>')
@login_required
def index(status, time, search):
print(request.query_string, request.args.get('search'), time, status)
# b'search=test' test OLDER NEW
return 'OK'
nhận xét như thế nào tôi đã sử dụng requestđể có được giá trị của tìm kiếm: request.args.get('search').
Đây là một cách tiếp cận khác mà tôi thấy đơn giản và gọn gàng hơn:
@bp.route('/list/lot/parameters')
@login_required
def index():
print(request.args.get('time'), request.args.get('status'), request.args.get('search'))
return 'OK'
Url trông như thế này:
http://192.168.10.88:5000/list/lot/parameters?time=OLDER&status=NEW&search=test
Phần sau ?là chuỗi truy vấn. Tôi chắc chắn 99% là Flask sẽ loại bỏ chuỗi truy vấn khi khớp các tuyến (tôi không thể xác nhận điều này trong tài liệu do đó là 1%). Điều này có nghĩa là các url sau đây giống hệt nhau khi khớp với một tuyến đường.
http://192.168.10.88:5000/list/lot/OLDER/NEW?search=test
http://192.168.10.88:5000/list/lot/OLDER/NEW
Một cách khác để làm những gì (tôi nghĩ) bạn đang cố gắng làm là sử dụng chuỗi truy vấn cho tất cả các biến của bạn.
@bp.route('/list/')
@bp.route('/list/lot/')
@login_required
def index():
status = request.args.get('status', default=None)
time = request.args.get('time', default=None)
search = request.args.get('search', default=None)
print(search)