链FormEncode验证器

2024-04-20 03:12:52 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:

我在TurboGears2中有一个表单,其中有一个用于电子邮件列表的文本字段。有没有一种简单的方法使用ToscaWidgets或FormEncode来链接Set和Email的表单验证器,或者我必须为此编写自己的验证器吗?在


Tags: 方法文本表单列表链接电子邮件emailturbogears2
2条回答

我觉得应该更像下面这样。它的优点是尝试每封邮件,而不是仅仅停留在第一封无效邮件。它还会将错误添加到状态,这样您就可以知道哪些错误失败了。在

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]

我想要的是一个验证器,我可以直接插入字符串和Int验证器这样的字段中。我发现除非我创建了自己的验证器,否则没有办法做到这一点。我把它贴在这里是为了完整,这样其他人可以受益。在

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(',')
        returnValues = []
        emailValidator = Email()
        for value in values:
            returnValues.append( emailValidator._to_python(value.strip(), state) )
        return values

相关问题 更多 >