Не очевидно з документації колби про те, як отримати рядок запиту. Я новачок, подивився на документи, не зміг знайти!
Тому
@app.route('/')
@app.route('/data')
def data():
query_string=??????
return render_template("data.html")
Не очевидно з документації колби про те, як отримати рядок запиту. Я новачок, подивився на документи, не зміг знайти!
Тому
@app.route('/')
@app.route('/data')
def data():
query_string=??????
return render_template("data.html")
Відповіді:
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')
Повна 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 має механізми доступу до нього в абстрагованому вигляді. Ви повинні використовувати їх, якщо у вас немає вагомих причин цього не робити.
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/
Це можна зробити за допомогою 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
Як ви бачите, це лише невеликий приклад - ви можете отримати декілька значень + сформувати їх і використовувати їх або передати їх у файл шаблону.
Я прийшов сюди шукати рядок запиту, а не як отримати значення з рядка запиту.
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)
Вихід:
Список літератури:
Спробуйте так для рядка запиту:
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)
Кожна форма рядка запиту, який можна отримати з об'єкта запиту колби, як описано в веб-розробці 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
Щасливий злом :)
Це можна зробити за допомогою request.args.get()
. Наприклад, якщо у рядку запиту є поле date
, до нього можна отримати доступ, використовуючи
date = request.args.get('date')
Не забудьте додати " request
" до списку імпорту з колби, тобто
from flask import request
request.args.get()
; нові відповіді на старі запитання повинні містити те, про що не згадувалося раніше.
Якщо запит 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)