这是简化的代码:
from wtforms import (
Form,
StringField,
validators,
)
class UserForm(Form):
email = StringField('Email', validators=[
validators.Optional(),
validators.Email(),
])
form = UserForm(data={'email': ''})
form.validate()
print(form.errors) # No errors as expected
form = UserForm(data={'email': 'lem'})
form.validate()
print(form.errors) # This should have an error
form = UserForm(data={'email': '[email protected]'})
form.validate()
print(form.errors) # No errors as expected
输出:
{}
{}
{}
[看起来好像具有Optional跳过成功的验证,无论该字段中是否有数据。我怀疑这可能与通过数据传递命令有关。我不确定。
删除validators.Optional
给了我我期望的内容:
{'email': ['Invalid email address.']}
{'email': ['Invalid email address.']}
{}
这与具有电子邮件验证程序的电子邮件字段无关。即使当我有validators.Length(min=5)
时,也存在相同的问题。
from werkzeug import MultiDict
from wtforms import Form, StringField, validators
class UserForm(Form):
email = StringField('Email', validators=[validators.Optional(), validators.Email()]
form = UserForm(formdata=MultiDict({'email': 'lem'}))
form.validate()