Атрибут form
Атрибут form применяется к объекту запроса
request и возвращает словарь
ImmutableMultiDict с данными, которые
пользователь отправил через HTML-форму. Данные
извлекаются из тела запроса для методов POST,
PUT и PATCH с типом содержимого
application/x-www-form-urlencoded или
multipart/form-data. Ключи словаря -
это значения атрибутов name полей формы,
а значения - введённые пользователем данные.
Синтаксис
request.form
Пример
Давайте создадим простую HTML-форму для отправки имени пользователя:
<form method="post" action="/submit">
<input type="text" name="username">
<input type="submit" value="Send">
</form>
Теперь напишем обработчик, который принимает данные формы и выводит их:
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/submit', methods=['POST'])
def submit():
username = request.form['username']
return username
Результат выполнения кода для введённого
значения 'abcde':
"abcde"
Пример
Для безопасного извлечения данных используйте
метод get, который возвращает
None, если поля нет в форме:
from flask import Flask, request
app = Flask(__name__)
@app.route('/submit', methods=['POST'])
def submit():
username = request.form.get('username')
email = request.form.get('email', 'not specified')
return f'{username} - {email}'
Результат выполнения кода, если передано только
поле username со значением 'user':
"user - not specified"
Пример
Атрибут form поддерживает множественные
значения через метод getlist. Давайте
обработаем форму с несколькими чекбоксами:
<form method="post" action="/tags">
<input type="checkbox" name="tag" value="a">
<input type="checkbox" name="tag" value="b">
<input type="checkbox" name="tag" value="c">
<input type="submit" value="Send">
</form>
Обработчик получает список выбранных значений:
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/tags', methods=['POST'])
def tags():
selected = request.form.getlist('tag')
return str(selected)
Результат выполнения кода при выборе всех трёх чекбоксов:
['a', 'b', 'c']