Как получить значения переменных запроса в Flask?

Сократите HTML в Flask с помощью Flask-Minify Программирование и разработка

В этой статье мы увидим, как запрашивать аргументы запроса 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

<!DOCTYPE html>
<html>
<head>
<title>Search</title>
</head>
<body>
  <h2>You searched for {{query}}</h2>
  <!-- {{query}} is the value returned from the search function -->
</body>
</html>

Итак, после запуска приложения и перехода к

http://127.0.0.1:5000/search?query=g4g

даст этот вывод:

так, после запуска приложения

Запрос данных формы

Теперь, если нам необходимо извлечь данные из метода POST. Давайте возьмем простой пример, запросив имя и адрес электронной почты пользователя в форме:

Теперь, если нам необходимо извлечь данные из метода 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')
        email = 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

Эта страница выглядит так:

теперь, если URL-адрес посещается и данные

и после отправки формы условие if оценивается как истинное, и значения запрашиваются и возвращаются обратно в код HTML. Теперь страница выглядит так:

и после отправки формы условие if оценивается как истинное, и значения

Вместо использования 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']

Читайте также:  Строковые методы Python: примеры
Оцените статью
bestprogrammer.ru
Добавить комментарий