Як отримати рядок запиту на Flask?


408

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

Тому

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

11
Це в документації під Quickstart
Jarus

Але він не використовує термін "рядок запиту". Він просто називає їх параметрами. > Для доступу до параметрів, поданих у 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
Necronet

8
Ні - як у дикті та .get, ви просто отримали None.
JPEG_

5
@LyndsySimon: Добре помічений. Але оскільки ця відповідь правильно відповідає на запитання, на яке посилаються мої пошукові терміни Google ('параметр отримати запит на колбу'), я все одно голосую за нього. Я теж педант, але я пояснюю це загальною містикою. 😉
Майкл

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")

Повна документація на об’єкти запиту та відповіді знаходиться у Веркерзі: 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)

Вихід:

параметри запиту в маршруті колби

Список літератури:

  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 :

З веб-розробки O'Reilly Flask , і, як заявляв раніше Манан Гухарі, спочатку вам потрібно імпортувати запит:

from flask import request

request- це об'єкт, що піддається витримці Flask як змінна контекст (з ним ви здогадалися) request. Як випливає з назви, вона містить всю інформацію, яку клієнт включив у запит HTTP. У цього об’єкта є безліч атрибутів і методів, за допомогою яких ви можете отримати і викликати відповідно.

У вас є досить багато requestатрибутів, які містять рядок запиту, з якого вибирати. Тут я перерахую кожен атрибут, який будь-яким чином містить рядок запиту, а також опис із книги O'Reilly цього атрибута.

Спочатку 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(); нові відповіді на старі запитання повинні містити те, про що не згадувалося раніше.
lfurini

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.