Класс FlaskForm
Класс FlaskForm применяется для создания форм
в приложениях Flask. Он наследуется от класса
Form библиотеки WTForms и добавляет поддержку
защиты от CSRF-атак, а также интеграцию с Flask-приложением.
Поля формы описываются как атрибуты класса, а их типы
задаются специальными классами полей, например
StringField или SubmitField.
При создании экземпляра формы можно передать данные
из запроса через параметр formdata. Если данные
не переданы, форма считается пустой. Для проверки
корректности данных используется метод validate_on_submit,
который возвращает True, если форма была отправлена
и все поля прошли валидацию.
Синтаксис
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
class MyForm(FlaskForm):
field = StringField('Label')
submit = SubmitField('Send')
Пример
Давайте создадим простую форму с одним текстовым полем и кнопкой отправки:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
class MyForm(FlaskForm):
name = StringField('Name')
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm()
if form.validate_on_submit():
return f"Hello, {form.name.data}!"
return render_template('index.html', form=form)
Шаблон для отображения формы:
<form method="post">
{{ form.csrf_token }}
<p>{{ form.name.label }} {{ form.name() }}</p>
<p>{{ form.submit() }}</p>
</form>
Результат выполнения кода при отправке имени 'abcde':
Hello, abcde!
Пример
Давайте добавим валидацию поля с помощью
DataRequired:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
class MyForm(FlaskForm):
name = StringField('Name', validators=[DataRequired()])
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm()
if form.validate_on_submit():
return f"Hello, {form.name.data}!"
return render_template('index.html', form=form)
Шаблон для отображения формы с ошибками:
<form method="post">
{{ form.csrf_token }}
<p>{{ form.name.label }} {{ form.name() }}</p>
{% for error in form.name.errors %}
<p>{{ error }}</p>
{% endfor %}
<p>{{ form.submit() }}</p>
</form>
Результат выполнения кода при отправке пустого поля:
This field is required.
Смотрите также
-
метод
validate_on_submit,
который проверяет отправку и валидацию формы -
метод
hidden_tag,
который выводит скрытые поля формы, включая CSRF-токен -
атрибут
errors,
который содержит ошибки валидации полей -
класс
DataRequired,
который проверяет обязательность заполнения поля