Как получить доступ к строке запроса в маршрутах Flask?
Как получить доступ к параметрам запроса или к строке запроса в маршрутах Flask? Это не очевидно из документации Flask.
Пример маршрута /data
ниже иллюстрирует контекст, в котором я хотел бы получить эти данные. Если кто-то запрашивает что-то вроде example.com/data?abc=123
, я хотел бы иметь доступ к строке ?abc=123
или иметь возможность извлечь значения параметров, таких как abc
.
@app.route("/data")
def data():
# query_string = ???
return render_template("data.html")
Какова правильная практика для получения данных из строки запроса в Flask?
5 ответ(ов)
Вы можете получить значение параметра user
из URL в Flask, используя request.args.get()
. Вот пример того, как это можно сделать:
from flask import request, Flask
app = Flask(__name__)
@app.route('/data')
def data():
# Здесь мы хотим получить значение параметра user (т.е. ?user=some-value)
user = request.args.get('user')
return f'Value of user is: {user}' # Можно вернуть это значение в ответе
Таким образом, если вы перейдете по URL /data?user=some-value
, в ответе получите строку Value of user is: some-value
.
Полный URL доступен как request.url
, а строка запроса — как request.query_string.decode()
.
Вот пример:
from flask import request
@app.route('/adhoc_test/')
def adhoc_test():
return request.query_string
Чтобы получить отдельный известный параметр, переданный в строке запроса, вы можете использовать request.args.get('param')
. Это правильный способ сделать это, насколько я знаю.
Примечание: Прежде чем продолжать, вам следует задать себе вопрос, зачем вам нужна строка запроса. Я никогда не сталкивался с необходимостью извлекать её в сыром виде — Flask предоставляет механизмы для доступа к ней в абстрагированном виде. Рекомендуется использовать эти механизмы, если нет убедительной причины делать иначе.
Вы можете сделать это, используя request.query_string
.
Пример:
Рассмотрим файл view.py
:
from my_script import get_url_params
@app.route('/web_url/', methods=('GET', 'POST'))
def get_url_params_index():
return Response(get_url_params())
Также можно сделать код более модульным, используя Flask Blueprints - https://flask.palletsprojects.com/en/1.1.x/blueprints/
Предположим, что имя передается в качестве части строки запроса:
/web_url/?first_name=john
## вот мой_script.py
## импортируем необходимые пакеты Flask
from flask import request
def get_url_params():
## возможно, вам потребуется дополнительно отформатировать параметры URL с помощью escape.
firstName = request.args.get('first_name')
return firstName
Как видите, это всего лишь небольшой пример - вы можете извлекать несколько значений, форматировать их и использовать или передавать в файл шаблона.
Werkzeug и Flask уже обработали всё за вас, поэтому нет необходимости повторно использовать urlparse
. В Flask вы можете получить строку запроса через объект request
, который предоставляет все необходимые данные. Вот пример кода:
from flask import request
@app.route('/')
@app.route('/data')
def data():
query_string = request.query_string ## Вот она
return render_template("data.html")
Полную документацию по объектам запросов и ответов можно найти в Werkzeug: документация.
Я предпочитаю использовать следующий код:
user = request.args['user'] if 'user' in request.args else 'guest'
вместо:
user = request.args.get('user')
Это дает мне возможность сначала проверить, действительно ли в URL содержится этот параметр запроса. Так я могу более явно управлять значением по умолчанию.
Возврат JSON-ответа из представления Flask
Как обслуживать статические файлы в Flask
Как получить именованные параметры из URL с помощью Flask?
Как изменить порядок столбцов в DataFrame?
Как проверить тип NoneType в Python?