python - 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
方法吗?
解决方案
我必须在我的烧瓶路线中显式调用 validate_expire 方法吗?
不,但是您必须在端点中调用form.validate()
or form.validate_on_submit()
(括号很重要,否则您只是在检查这些方法是否存在)。
这两个函数都期待 ValidationErrors 并捕获它们并简单地返回一个布尔值。应用程序代码中不会引发异常。
调用其中一个验证函数后,您还可以检查form.errors
每个字段的错误列表字典。
您的表单代码按预期工作。
推荐阅读
- django - Docker 编写 nginx 配置设置以在端口 8000 上广播
- go - 在结构中打印结构映射
- selenium - 在多台机器上连续运行 Selenium 测试
- c++ - std::endl 和 '\n' 有什么区别
- docker - 为什么 Redis 会在几个小时后删除我的数据?
- performance - netperf 中本地发送大小 (-m) 和发送缓冲区大小 (-s) 的区别?
- r - 当我导入一个 excel 文件时,字符列带有数字
- html - 如何为幻灯片创建淡入淡出的悬停效果?
- python - python将文件从一个目录删除到另一个目录
- react-native - Expo React-Native 应用中 Stripe PaymentIntent 的确认