Python Routes ใช้ Flask
Oct 22 2020
ฉันมีฟังก์ชั่นต่อไปนี้ที่สามารถใช้งานได้หลายเส้นทาง:
@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)
ทุกเส้นทางใช้งานได้ดียกเว้นเส้นทางสุดท้าย ฉันมี URL ที่ชอบสิ่งนี้:
http://192.168.10.88:5000/list/lot/OLDER/NEW?search=test
Noneและผมก็ไม่เข้าใจว่าทำไมพิมพ์เสมอกลับ
ความคิดใด ๆ ?
ขอบคุณ
คำตอบ
1 Tobin Oct 22 2020 at 20:26
คุณสามารถใช้requestหรือrequest.query_stringถ้าคุณต้องการรับสตริงแบบสอบถาม:
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'
ข้อสังเกตว่าฉันใช้requestประโยชน์จากการค้นหาอย่างไร: request.args.get('search').
นี่เป็นอีกแนวทางหนึ่งที่ฉันพบว่าง่ายและสะอาดกว่า:
@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 มีลักษณะดังนี้:
http://192.168.10.88:5000/list/lot/parameters?time=OLDER&status=NEW&search=test
1 noslenkwah Oct 22 2020 at 16:15
ส่วนหลัง?คือสตริงแบบสอบถาม ฉันแน่ใจ 99% ว่า Flask ตัดสตริงข้อความค้นหาออกเมื่อจับคู่เส้นทาง (ฉันไม่สามารถยืนยันสิ่งนี้ในเอกสารได้ด้วยเหตุนี้ 1%) ซึ่งหมายความว่า URL ต่อไปนี้เหมือนกันเมื่อจับคู่เส้นทาง
http://192.168.10.88:5000/list/lot/OLDER/NEW?search=test
http://192.168.10.88:5000/list/lot/OLDER/NEW
อีกวิธีหนึ่งในการทำสิ่งที่ (ฉันคิดว่า) คุณกำลังพยายามทำคือใช้สตริงคำค้นหาสำหรับตัวแปรทั้งหมดของคุณ
@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)