验证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。内联验证器的设计不是作为一个静态方法来完成的,而是一个实例方法。只要删除那个装饰器,你的验证器应该在提供电子邮件时工作。