Поле формы StringField
Класс StringField применяется для создания текстового поля формы.
Первым параметром передаётся подпись поля (label). Дополнительно можно
передать валидаторы, значение по умолчанию и другие параметры. Поле
преобразуется в HTML-тег input с атрибутом type="text".
Синтаксис
StringField(label, [validators], [default], [description])
Пример
Давайте создадим простую форму с одним текстовым полем:
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 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>
При отправке формы на сервер значение поля будет доступно через
атрибут data.
Пример
Давайте добавим валидатор 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 form.name.data
return render_template('index.html', form=form)
Если поле оставить пустым, форма не пройдёт валидацию, а в атрибуте
errors появится сообщение об ошибке.
Пример
Давайте зададим значение по умолчанию через параметр default:
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', default='abcde')
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = MyForm()
if form.validate_on_submit():
return form.name.data
return render_template('index.html', form=form)
Результат выполнения кода после отправки формы без изменений:
"abcde"
Смотрите также
-
класс
Form,
который является базовым классом для форм -
метод
validate_on_submit,
который проверяет отправку и валидацию формы -
валидатор
DataRequired,
который делает поле обязательным -
валидатор
Length,
который ограничивает длину строки