验证WTForms中的可选字段

时间:2014-11-22 21:56:59

标签: wtforms flask-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')

我想要以下效果:

  • 如果电子邮件字段为空白,则不执行任何操作,可以将其留空。
  • 但如果电子邮件字段包含某些数据,请验证它是否可接受。

如果我声明电子邮件字段是可选的,则完全跳过验证。我有解决方法,但有没有任何惯用和直接的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题在于您将validate_email定义为@staticmethod。内联验证器不是设计为静态方法,而是实例方法。只需删除该装饰器,只要提供电子邮件,您的验证器就可以正常工作。