WTForms:即使数据存在,跳过可选的验证器

问题描述 投票:0回答:1

这是简化的代码:

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)时,也存在相同的问题。

python wtforms
1个回答
0
投票
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()
© www.soinside.com 2019 - 2024. All rights reserved.