В этой статье мы увидим, как запрашивать аргументы запроса URL-адреса и как запрашивать входящие данные формы от пользователя во флягу.
Во фляге для работы со строками запроса или данными формы мы используем переменные запроса.
Например, строка запроса может выглядеть так:
google.com/search?q=python
Давайте начнем с создания проекта демонстрационной фляги. Чтобы иметь возможность запрашивать данные, нам нужно будет импортировать запрос из библиотеки Flask.
Python3
# importing Flask and request
# from the flask library
from
flask
import
Flask, request, render_template
# to render html code
# pass current module (__name__)
# as argument to create instance of flask app
app
=
Flask(__name__)
# ‘/search’ URL is bound with search() function.
@app
.route(
'/search'
)
# for requesting query arguments
# defining a function search which returns the rendered html code
def
search():
return
render_template(
"search.html"
)
# ‘/name’ URL is bound with name() function.
@app
.route(
'/name'
)
# for requesting form data
# defining a function name which returns the rendered html code
def
name():
return
render_template(
"name.html"
)
# for running the app
if
__name__
=
=
"__main__"
:
app.run(debug
=
True
)
Функция route() класса Flask является декоратором, который сообщает приложению, какой URL-адрес должен вызывать связанную функцию.
Здесь мы создали два маршрута /search для запроса аргументов запроса и /name для запроса данных формы.
Мы будем обновлять их по мере продвижения вперед. Опять же подробности можно понять отсюда.
Запрос аргументов запроса
Как объяснялось выше, строка запроса — это часть после вопросительного знака:
https://www.google.com/search?q=python
Здесь, в нашем случае, приложение по умолчанию работает на 127.0.0.1:5000, поэтому предположим, что мы добавляем строку запроса в /search route для выполнения поиска, это будет выглядеть так с ключевым запросом и значением g4g :
http://127.0.0.1:5000/search?query=g4g
Теперь мы хотим извлечь значение. Для этого мы используем request.args.get(’query’) или request.args[’query’].
Рекомендуется использовать request.args.get(’query’), так как второй вызовет ошибку 400, если ключ запроса не предоставлен.
Итак, давайте внесем изменения в наш маршрут /search
Python3
@app
.route(
'/search'
)
def
search():
query
=
request.args.get(
'query'
)
# passing the value to html code
return
render_template(
"search.html"
, query
=
query)
Это отобразит этот HTML-код:
HTML
Итак, после запуска приложения и перехода к
http://127.0.0.1:5000/search?query=g4g
даст этот вывод:
Запрос данных формы
Теперь, если нам необходимо извлечь данные из метода POST. Давайте возьмем простой пример, запросив имя и адрес электронной почты пользователя в форме:
Код для приведенной выше формы:
HTML
<!DOCTYPE html>
<
html
>
<
head
>
<
title
>Name</
title
>
</
head
>
<
body
>
<
form
action
=
"/name"
method
=
"POST"
>
<
label
>Enter your name:</
label
>
<
input
type
=
"text"
name
=
"name"
required />
<
br
>
<
label
>Enter your email:</
label
>
<
input
type
=
"text"
name
=
"email"
required />
<
input
type
=
"submit"
value
=
"Submit"
>
</
form
>
<
br
><
br
>
DATA RECEIVED:
<
br
>
{{name}}
<
br
>
{{email}}
</
body
>
</
html
>
Таким образом, чтобы запросить имя и адрес электронной почты из формы, мы используем request.form.get(’name’) и request.form.get(’email’), поскольку имя HTML имеет значение name и email во входном теге:
<input type="text" name="name" required /> <input type="text" name="email" required />
Теперь давайте посмотрим код Python:
Здесь нам нужно указать методы, которые мы используем в маршруте. Таким образом, когда форма отправляется, выполняется код из метода POST, а если метод GET, выполняется код из условия else.
Python3
# passing required methods
@app
.route(
'/name'
, methods
=
[
'GET'
,
'POST'
])
def
name():
if
request.method
=
=
'POST'
:
# if form is submitted this code will be executed
name
=
request.form.get(
'name'
)
=
request.form.get(
'email'
)
return
render_template(
"name.html"
, name
=
name, email
=
email)
else
:
# if only visited
return
render_template(
"name.html"
)
Итак, теперь, если URL-адрес посещается и данные вводятся на:
http://127.0.0.1:5000/name
Эта страница выглядит так:
и после отправки формы условие if оценивается как истинное, и значения запрашиваются и возвращаются обратно в код HTML. Теперь страница выглядит так:
Вместо использования request.form.get(’email’) мы также можем использовать request.form[’email’] и результаты будут такими же, разница в том, что второй возвращается в виде словаря.
Summary
Чтобы запросить данные строки запроса, мы используем:
request.args.get('query') //recommended or request.args['query']
Для запроса данных формы мы используем:
request.form.get('name') //recommended or request.form['name']