Flask를 사용한 Python Routes 문제
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
다음 부분 ?은 쿼리 문자열입니다. Flask가 경로를 일치시킬 때 쿼리 문자열을 제거한다고 99 % 확신합니다 (문서에서 이것을 확인할 수 없으므로 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)