Проверка пользовательских полей WTForms не выполняется - PullRequest
1 голос
/ 20 января 2020

После этого ответа: Как проверить DateField в WTForms Я попытался сделать пользовательскую проверку. Но это не называется. Я знаю это, потому что ValidationError не происходит во время тестирования.

import datetime as dt
from flask_wtf import FlaskForm
from wtforms import SubmitField, DateTimeField
from wtforms.validators import ValidationError

class NotificationMessage(FlaskForm):
    expire = DateTimeField(
        'Expire',
        default=dt.datetime.today() + dt.timedelta(days=31),
        validators=[],
        format='%Y-%m-%d %H:%M')
    submit = SubmitField('Send Notification')

    def validate_expire(form, field):
        # if field.data and field.data < dt.datetime.today():
        raise ValidationError('Expire datetime must be in the future.')

Должен ли я явно вызывать метод validate_expire в моем маршруте flask или что-то в этом роде?

1 Ответ

1 голос
/ 21 января 2020

Должен ли я явно вызывать метод validate_expire в моем маршруте flask или что-то в этом роде?

Нет, но вы должны вызвать form.validate() или form.validate_on_submit() в своей конечной точке ( круглые скобки важны, в противном случае вы просто проверяете, существуют ли эти методы).

Обе функции ожидают ValidationErrors и отлавливают их и просто возвращают логическое значение. В коде приложения не возникает никаких исключений.

После вызова одной из функций проверки вы также можете проверить form.errors на наличие словаря списков ошибок по полю.

Код вашей формы работает как ожидается.

...