Python WTForms自定义字段验证不需要';不执行

Python WTForms自定义字段验证不需要';不执行,python,flask-wtforms,wtforms,Python,Flask Wtforms,Wtforms,回答如下:我试图进行自定义验证。但是没有人打电话给它。我之所以知道这一点,是因为测试过程中不会出现验证错误 import datetime as dt from flask_wtf import FlaskForm from wtforms import SubmitField, DateTimeField from wtforms.validators import ValidationError class NotificationMessage(FlaskForm): expir

回答如下:我试图进行自定义验证。但是没有人打电话给它。我之所以知道这一点,是因为测试过程中不会出现
验证错误

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.')
将日期时间导入为dt
来自flask_wtf进口FlaskForm
从wtforms导入SubmitField、DateTimeField
从wtforms.validators导入ValidationError
类别通知消息(瓶形):
expire=DateTimeField(
“到期”,
默认值=dt.datetime.today()+dt.timedelta(天=31),
验证器=[],
格式=“%Y-%m-%d%H:%m”)
submit=SubmitField('发送通知')
def validate_过期(表格,字段):
#如果field.data和field.data
我必须在我的烧瓶路径中显式调用
validate\u expire
方法吗

我必须在flask路由中显式调用validate_expire方法吗

不可以,但是您必须在端点中调用
form.validate()
form.validate\on\u submit()
(括号很重要,否则您只是检查这些方法是否存在)

这两个函数都需要ValidationErrors,并捕获它们,只返回一个布尔值。应用程序代码中未引发任何异常

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

您的表单代码按预期工作