Поле формы DateField
Класс DateField применяется при описании формы
Flask-WTF и создаёт поле для ввода даты. Первым
параметром передаётся подпись поля, которая выводится
рядом с элементом ввода. При отправке формы значение
проходит валидацию и преобразуется в объект date
из модуля datetime. По умолчанию поле принимает
дату в формате '%Y-%m-%d', например '2024-01-15'.
Класс наследуется от Field и поддерживает общие
параметры: validators для списка валидаторов,
default для значения по умолчанию,
format для собственного формата даты,
render_kw для HTML-атрибутов.
Синтаксис
from wtforms import DateField
field = DateField(label, [validators], [format], [default])
Пример
Давайте создадим форму с полем даты и выведем её на странице:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import DateField, SubmitField
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class DateForm(FlaskForm):
birthday = DateField('Birthday')
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = DateForm()
res = None
if form.validate_on_submit():
res = form.birthday.data
return render_template('index.html', form=form, res=res)
Шаблон для вывода формы и результата:
<form method="post">
{{ form.hidden_tag() }}
<p>{{ form.birthday.label }} {{ form.birthday() }}</p>
<p>{{ form.submit() }}</p>
</form>
{% if res %}
<p>{{ res }}</p>
{% endif %}
После отправки формы с датой '2024-01-15'
результат выполнения кода:
2024-01-15
Пример
Давайте добавим валидатор DataRequired,
чтобы поле было обязательным:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import DateField, SubmitField
from wtforms.validators import DataRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class DateForm(FlaskForm):
birthday = DateField('Birthday', [DataRequired()])
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = DateForm()
res = None
if form.validate_on_submit():
res = form.birthday.data
return render_template('index.html', form=form, res=res)
Если отправить пустое поле, форма не пройдёт
валидацию, а в атрибуте errors появится
сообщение об ошибке.
Пример
Давайте зададим собственный формат даты
через параметр format:
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import DateField, SubmitField
app = Flask(__name__)
app.config['SECRET_KEY'] = 'abcde'
class DateForm(FlaskForm):
birthday = DateField('Birthday', format='%d.%m.%Y')
submit = SubmitField('Send')
@app.route('/', methods=['GET', 'POST'])
def index():
form = DateForm()
res = None
if form.validate_on_submit():
res = form.birthday.data
return render_template('index.html', form=form, res=res)
Теперь поле принимает дату в формате '15.01.2024'.
Результат выполнения кода:
2024-01-15
Смотрите также
-
класс
Form,
который является базой для всех форм -
метод
validate_on_submit,
который проверяет отправку и валидность формы -
атрибут
data,
который хранит значение поля после валидации -
валидатор
DataRequired,
который делает поле обязательным