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

324

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

Итак,

@app.route('/')
@app.route('/data')
def data():
    query_string=??????
    return render_template("data.html")
  • 10
    Он находится в документации по быстрому запуску : flask.pocoo.org/docs/quickstart/#the-request-object
  • 0
    Но он не использует термин «строка запроса». Он просто называет их параметрами. > Для доступа к параметрам, представленным в URL (? Key = value), вы можете использовать атрибут args:>> searchword = request.args.get ('key', '')
Теги:
flask
query-string

7 ответов

594
Лучший ответ
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')
  • 47
    В этом примере возвращается значение параметра «user», переданное в строке запроса, а не сама строка запроса. «Строка запроса» означает все после знака вопроса и перед знаком фунта, если таковой имеется.
  • 35
    Тем не менее полезный ответ считают, что это связано с вопросом. Так действует и +1
Показать ещё 4 комментария
194

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

  • 0
    см. также stackoverflow.com/a/11792690
  • 7
    +1 за актуальный правильный ответ. OAuth-потоки, такие как Dropbox, будут регулярно запрашивать URL-адреса перенаправления для передачи токенов. Это имеет смысл, если вы захотите проанализировать строку запроса самостоятельно.
Показать ещё 1 комментарий
13

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

## 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

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

12

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/

1

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

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)

Выход:

Изображение 108995

Рекомендации:

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

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

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)

Выход: Изображение 108996

0

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню