Каждая форма строки запроса, извлекаемая из объекта запроса flask, как описано в Веб-разработка O'Reilly Flask:
Из O'Reilly Flask Web Development, и, как было заявлено ранее Мананом Гухари, сначала вам нужно импортировать запрос:
from flask import request
request
- это объект, представленный Flask как контекстная переменная с именем (как вы уже догадались) request
. Как следует из названия, он содержит всю информацию, которую клиент включил в HTTP-запрос. Этот объект имеет множество атрибутов и методов, которые вы можете извлекать и вызывать соответственно.
У вас есть несколько атрибутов request
, которые содержат строку запроса, из которой можно выбрать. Здесь я перечислю каждый атрибут, который каким-либо образом содержит строку запроса, а также описание этого атрибута из книги О'Рейли.
Сначала идет args
, который представляет собой «словарь со всеми аргументами, переданными в строке запроса URL-адреса». Итак, если вы хотите, чтобы строка запроса была проанализирована в словаре, вы должны сделать что-то вроде этого:
from flask import request
@app.route('/'):
queryStringDict = request.args
(Как указывали другие, вы также можете использовать .get('<arg_name>')
для получения определенного значения из словаря)
Затем есть атрибут form
, который не содержит строку запроса, но который включен в часть другого атрибута, который включает строку запроса, которая I перечислю на мгновение. Во-первых, form
- это «Словарь со всеми полями формы, отправленными с запросом». Я говорю это, чтобы сказать следующее: есть еще один атрибут словаря, доступный в объекте запроса фляги, который называется values
. values
- это «Словарь, который объединяет значения в form
и args
». Это будет выглядеть примерно так:
from flask import request
@app.route('/'):
formFieldsAndQueryStringDict = request.values
(снова используйте .get('<arg_name>')
, чтобы получить конкретный элемент из словаря)
Другой вариант - query_string
, который представляет собой «Часть строки запроса URL-адреса в виде необработанного двоичного значения». Пример этого:
from flask import request
@app.route('/'):
queryStringRaw = request.query_string
Затем в качестве дополнительного бонуса существует full_path
, который представляет собой «части пути и строки запроса URL-адреса». По запросу:
from flask import request
@app.route('/'):
pathWithQueryString = request.full_path
И, наконец, url
, «Полный URL-адрес, запрошенный клиентом» (который включает строку запроса):
from flask import request
@app.route('/'):
pathWithQueryString = request.url
Удачного взлома :)
В этом примере возвращается это значение параметра «пользователь», переданное в строке запроса, а не сама строка запроса. «Строка запроса» означает все, что находится после вопросительного знака и перед знаком фунта, если он присутствует.
все еще полезный ответ, считайте, что он связан с вопросом. Так действительно и +1
Будет ли это вызывать исключение, если пользователя нет? (Думаю, нет, если args - это просто диктат.)
Нет - как с dict и .get, вы просто получите None.
@LyndsySimon: Хорошо замечено. Но поскольку этот ответ правильно отвечает на вопрос, на который ссылаются мои поисковые запросы Google ('flask get request parameter'), я все равно голосую за него. Я тоже педант, но списываю это на сетевую мистику. 😉
Никаких аргументов с моей стороны! Мои комментарии по этому вопросу были постоянным источником ТАКИХ очков и общей кармы. :) Удачного взлома!
@Necronet бесполезно, если, как OP, вам нужна фактическая строка.
Я использую ваше предложение, но не могу ввести значение с пробелом, например
software solutions
. Как этого добиться? Спасибо.Это может произойти, если строка запроса не закодирована по URL-адресу. Посмотрите в журнале сервера два случая. Закодированный URL будет иметь вид "GET / data? User = krace% 20kumar HTTP / 1.1" 200 "Незакодированный URL-адрес будет" GET / data? User = krace kumar HTTP / 1.1 "HTTPStatus.BAD_REQUEST -
@Kracekumar было бы полезно отредактировать свой часто цитируемый ответ, включив в него информацию с coderhelper.com/a/55252011/500902 ниже. Возможно, это правда, что этот ответ более полезен для большего числа людей, но стоит отметить другой ответ.