Как вы получаете строку запроса на Flask?


409

Не очевидно из документации на флягу о том, как получить строку запроса. Я новенький, посмотрел документы, не смог найти!

Так

@app.route('/')
@app.route('/data')
def data():
    query_string=??????
    return render_template("data.html")

11
Это находится в документации по быстрому
старту

Но он не использует термин «строка запроса». Он просто называет их параметрами. > Чтобы получить доступ к параметрам, представленным в URL (? Key = value), вы можете использовать атрибут args:>> searchword = request.args.get ('key', '')
Ion Freeman

Ответы:


779
from flask import request

@app.route('/data')
def data():
    # here we want to get the value of user (i.e. ?user=some-value)
    user = request.args.get('user')

70
В этом примере возвращается значение параметра «user», переданное в строке запроса, а не сама строка запроса. «Строка запроса» означает все после знака вопроса и до знака фунта, если таковой имеется.
Линдси Симон

45
Тем не менее полезный ответ считают, что это связано с вопросом. Так действует и +1
Некронет

8
Нет - как с помощью dict и .get, вы просто получите None.
JPEG_23.10.16

5
@LyndsySimon: хорошо заметили. Но так как этот ответ правильно отвечает на вопрос, на который ссылаются мои поисковые термины Google («параметр запроса колбы»), я все равно голосую за него. Я тоже педант, но я приписываю это интернет-мистике. Michael
Майкл Шепер

5
Никаких аргументов от меня! Мои комментарии по этому вопросу были постоянным источником SO пунктов и общей кармы. :) Счастливого взлома!
Линдси Симон

237

Полный URL доступен как request.url, а строка запроса доступна как request.query_string.

Вот пример:

from flask import request

@app.route('/adhoc_test/')
def adhoc_test():

    return request.query_string

Чтобы получить доступ к отдельному известному параметру, переданному в строке запроса, вы можете использовать request.args.get('param'). Это "правильный" способ сделать это, насколько я знаю.

ETA: Прежде чем идти дальше, вы должны спросить себя, зачем вам строка запроса. Мне никогда не приходилось извлекать необработанную строку - у Flask есть механизмы для доступа к ней абстрактно. Вы должны использовать их, если у вас нет веских причин не делать этого.


11
+1 за актуальный правильный ответ. OAuth-потоки, такие как Dropbox, будут регулярно запрашивать URL-адреса перенаправления для передачи токенов. Это имеет смысл, если вы захотите проанализировать строку запроса самостоятельно.
Ричард Лёвехерте

Виртуальный -1 за неправильный ответ 😉. Хотя это буквально правильно, оно не дает то, что искала ФП, что делает принятый ответ. DWIM FTW. Хорошо сыгранный как магнит SO пунктов однако.
Дэйв

15

Werkzeug / Flask как уже все разобрали за вас. Не нужно делать ту же самую работу снова с urlparse:

from flask import request

@app.route('/')
@app.route('/data')
def data():
    query_string = request.query_string  ## There is it
    return render_template("data.html")

Полная документация для объектов запроса и ответа находится в Werkzeug: http://werkzeug.pocoo.org/docs/wrappers/


14

Мы можем сделать это с помощью 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 - http://flask.pocoo.org/docs/0.10/blueprints/

Давайте рассмотрим, как имя передается как часть строки запроса / web_url /? First_name = john

## here is my_script.py

## import required flask packages
from flask import request
def get_url_params():
    ## you might further need to format the URL params through escape.    
    firstName = request.args.get('first_name') 
    return firstName

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


11

Я пришел сюда в поисках строки запроса, а не о том, как получить значения из строки запроса.

request.query_string возвращает параметры URL в виде необработанной байтовой строки (ссылка 1).

Пример использования request.query_string:

from flask import Flask, request

app = Flask(__name__)

@app.route('/data', methods=['GET'])
def get_query_string():
    return request.query_string

if __name__ == '__main__':
    app.run(debug=True)

Вывод:

параметры запроса в маршруте Flask

Ссылки:

  1. Официальная документация API по query_string

1
Это должен быть принятый ответ, поскольку он дает точное решение, которое ищет ОП.
Constt

Трудно бороться с +600 на несколько неточный ответ.
Марвин

4

Попробуйте вот так для строки запроса:

from flask import Flask, request

app = Flask(__name__)

@app.route('/parameters', methods=['GET'])
def query_strings():

    args1 = request.args['args1']
    args2 = request.args['args2']
    args3 = request.args['args3']

    return '''<h1>The Query String are...{}:{}:{}</h1>''' .format(args1,args2,args3)


if __name__ == '__main__':

    app.run(debug=True)

Вывод: введите описание изображения здесь


request.args ['args1'] лучше записать как request.args.get ('args1')
imbatman

1

Каждая форма строки запроса извлекается из объекта запроса фляги, как описано в O'Reilly Flask Web Devleopment :

Из 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атрибут, который не содержит строку запроса, но который включен в часть другого атрибута, который включает в себя строку запроса, которую я сейчас перечислю. Во-первых, 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». Por ejemplo:

from flask import request

@app.route('/'):
    pathWithQueryString = request.full_path

И, наконец, url«Полный URL, запрошенный клиентом» (который включает строку запроса):

from flask import request

@app.route('/'):
    pathWithQueryString = request.url

Удачного взлома :)


0

Это можно сделать с помощью request.args.get(). Например, если в строке запроса есть поле date, доступ к нему можно получить с помощью

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

Не забудьте добавить " request" в список импорта из колбы, т.е.

from flask import request

Хотя ваш ответ технически правильный, уже есть другие ответы (более старые и полные), предлагающие использовать request.args.get(); новые ответы на старые вопросы должны содержать то, что не упоминалось ранее.
Ифурини

0

Если запрос, если GET и мы передали некоторые параметры запроса, то,

fro`enter code here`m flask import request
@app.route('/')
@app.route('/data')
def data():
   if request.method == 'GET':
      # Get the parameters by key
      arg1 = request.args.get('arg1')
      arg2 = request.args.get('arg2')
      # Generate the query string
      query_string="?arg1={0}&arg2={1}".format(arg1, arg2)
      return render_template("data.html", query_string=query_string)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.