문제

문제:

Turbogears 2에는 전자 메일 목록에 대한 텍스트 필드가있는 양식이 있습니다. toscawidgets 또는 formencode를 사용하여 세트 및 이메일을 위해 체인 양식 검증기를 사용하는 간단한 방법이 있습니까? 아니면 내 자신의 유효성 검사기를 작성해야합니까?

도움이 되었습니까?

해결책

나는 그것이 아래와 더 비슷해야한다고 생각합니다. 첫 번째 유효하지 않은 곳에서 멈추지 않고 각 이메일을 시도하는 이점이 있습니다. 또한 주에 오류를 추가하여 어떤 오류가 실패했는지 알 수 있습니다.

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]

다른 팁

~에서 http://formencode.org/validator.html

또 다른 주목할만한 유효성 검사기는 formencode.compound.all입니다 - 이것은 복합 유효성 검사기입니다. 즉, 유효성 검사기를 입력으로 취하는 유효성 검사기입니다. 스키마는 한 가지 예입니다. 이 경우 모두 유효성 검사기 목록을 가져 와서 각각을 차례로 적용합니다. formencode.compound.any는 칭찬으로, 목록에서 첫 번째 통과 유효성 검사기를 사용합니다.

내가 원했던 것은 유효성 검사기였으며 String 및 Int Validator와 같은 필드에 붙일 수있었습니다. 내 자신의 검증기를 만들지 않으면이 작업을 수행 할 방법이 없다는 것을 알았습니다. 완전성을 위해 여기에 게시하고 있으므로 다른 사람들이 혜택을받을 수 있습니다.

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

와 함께 FormenCode 유효성 검사기 - 파이프와 포장지, 당신은 다음을 수행 할 수 있습니다.

from formencode import validators, compound


compound.Pipe(validators.Wrapper(to_python=lambda v: v.split(',')),
              validators.Email())
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top