6

Как получить доступ к строке запроса в маршрутах Flask?

1

Как получить доступ к параметрам запроса или к строке запроса в маршрутах 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 ответ(ов)

11

Вы можете получить значение параметра 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.

3

Полный 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 предоставляет механизмы для доступа к ней в абстрагированном виде. Рекомендуется использовать эти механизмы, если нет убедительной причины делать иначе.

0

Вы можете сделать это, используя 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

Как видите, это всего лишь небольшой пример - вы можете извлекать несколько значений, форматировать их и использовать или передавать в файл шаблона.

0

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: документация.

0

Я предпочитаю использовать следующий код:

user = request.args['user'] if 'user' in request.args else 'guest'

вместо:

user = request.args.get('user')

Это дает мне возможность сначала проверить, действительно ли в URL содержится этот параметр запроса. Так я могу более явно управлять значением по умолчанию.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь