2014-11-22 70 views
0

在我的用戶表單中,我想保留'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') 

我想要的效果如下:

  • 如果電子郵件字段爲空,什麼都不做,這是確定有空白。
  • 但是如果電子郵件字段有一些數據,則驗證它是否可接受。

如果我聲明電子郵件字段是可選的,那麼驗證將被完全忽略。我有這方面的解決方法,但有沒有任何地道和直接的方法來解決這個問題?

回答

0

問題是,您將validate_email定義爲@staticmethod。內聯驗證器的設計不是作爲一個靜態方法來完成的,而是一個實例方法。只要刪除那個裝飾器,你的驗證器應該在提供電子郵件時工作。