WTForms 自定义字段验证不执行
WTForms custom field validation doesn't execute
按照这个回答:我试图进行自定义验证。但它不会被调用。我知道这是因为 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.')
我必须在我的 flask 路由中明确调用 validate_expire
方法吗?
Must I call the validate_expire method explicitly in my flask route or something?
不,但您必须在端点中调用 form.validate()
或 form.validate_on_submit()
(括号很重要,否则您只是在检查这些方法是否存在)。
这两个函数都期待 ValidationErrors 并捕获它们并且只是 return 一个布尔值。应用程序代码中没有引发异常。
调用验证函数之一后,您还可以检查form.errors
每个字段的错误列表字典。
您的表单代码按预期工作。
按照这个回答: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.')
我必须在我的 flask 路由中明确调用 validate_expire
方法吗?
Must I call the validate_expire method explicitly in my flask route or something?
不,但您必须在端点中调用 form.validate()
或 form.validate_on_submit()
(括号很重要,否则您只是在检查这些方法是否存在)。
这两个函数都期待 ValidationErrors 并捕获它们并且只是 return 一个布尔值。应用程序代码中没有引发异常。
调用验证函数之一后,您还可以检查form.errors
每个字段的错误列表字典。
您的表单代码按预期工作。