2009-07-15 93 views
0

問題:鏈FormEncode校驗

我在TurboGears中2的形式,具有一個文本字段的電子郵件的列表。有沒有一種簡單的方法使用ToscaWidgets或FormEncode鏈接表單驗證器的設置和電子郵件,或者我必須爲此編寫我自己的驗證器?

回答

0

我認爲它應該更像下面。它具有嘗試每封電子郵件的優勢,而不是僅僅停留在第一個無效郵件上。它還會將錯誤添加到狀態,以便您可以分辨哪些錯誤。

from formencode import FancyValidator, Invalid 
from formencode.validators import Email 

class EmailList(FancyValidator): 
    """ Takes a delimited (default is comma) string and returns a list of validated e-mails 
     Set the delimiter by passing delimiter="A_DELIMITER" to the constructor. 
     Also takes all arguments a FancyValidator does. 
     The e-mails will always be stripped of whitespace. 
    """ 
    def _to_python(self, value, state): 
     try: 
      values = str(value).split(self.delimiter) 
     except AttributeError: 
      values = str(value).split(',') 
     validator = formencode.ForEach(validators.Email()) 
     validator.to_python(values, state) 
     return [value.strip() for value in values] 
+0

有趣,我喜歡的升級。 – Robbie 2009-07-16 02:11:20

0

我想要的是一個驗證器,我可以將它放入像String和Int驗證器這樣的字段中。我發現沒有辦法做到這一點,除非我創建了自己的驗證器。爲了完整起見,我在這裏發佈它,所以其他人可以受益。

​​
1

http://formencode.org/Validator.html

另一個值得注意的驗證器是formencode.compound.All - 這是一個化合物驗證器 - 即,它是採用驗證作爲輸入的驗證器。模式就是一個例子。在這種情況下,All都會接受一個驗證器列表並依次應用它們中的每一個。 formencode.compound.Any是它的讚美,它使用列表中的第一個通過驗證器。

0

隨着FormEncode validators - 管道和包裝,你可以:

from formencode import validators, compound 


compound.Pipe(validators.Wrapper(to_python=lambda v: v.split(',')), 
       validators.Email())