首页 > 解决方案 > WTForms 自定义字段验证不执行

问题描述

按照这个答案:How to validate a DateField in 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方法吗?

标签: pythonflask-wtformswtforms

解决方案


我必须在我的烧瓶路线中显式调用 validate_expire 方法吗?

不,但是您必须在端点中调用form.validate()or form.validate_on_submit()(括号很重要,否则您只是在检查这些方法是否存在)。

这两个函数都期待 ValidationErrors 并捕获它们并简单地返回一个布尔值。应用程序代码中不会引发异常。

调用其中一个验证函数后,您还可以检查form.errors每个字段的错误列表字典。

您的表单代码按预期工作。


推荐阅读