2009-07-15 59 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())