验证WTForms中的可选字段
问题描述:
在我的用户表单中,我想保留'email'字段为可选,但如果提到电子邮件,那么我的自定义验证器应该可以工作。我预计下面的代码工作。但不幸的是它不工作:验证WTForms中的可选字段
class AddUserForm(Form):
email = TextField('Email ID', [validators.Optional(strip_whitespace=True)])
@staticmethod
validate_email(form, field):
if field.data is not None:
if not is_valid_email_id_custom_function(field.data):
raise ValidationError('please enter a valid email id')
我想要的效果如下:
- 如果电子邮件字段为空,什么都不做,这是确定有空白。
- 但是如果电子邮件字段有一些数据,则验证它是否可接受。
如果我声明电子邮件字段是可选的,那么验证将被完全忽略。我有这方面的解决方法,但有没有任何地道和直接的方法来解决这个问题?
答
问题是,您将validate_email
定义为@staticmethod
。内联验证器的设计不是作为一个静态方法来完成的,而是一个实例方法。只要删除那个装饰器,你的验证器应该在提供电子邮件时工作。