2009-07-15 4 views
0

문제 :체인 FormEncode 검사기

나는 전자 우편의 목록은 텍스트 필드가 TurboGears 2의 형태를 갖는다. ToscaWidgets 또는 FormEncode를 사용하여 Set 및 Email 용 양식 검사기를 연결하는 간단한 방법이 있습니까? 아니면이 작업을 위해 자체 유효성 검사기를 작성해야합니까?

답변

0

나는 아래와 같아야한다고 생각합니다. 첫 번째 무효화에 머물지 않고 각 전자 메일을 시도하는 이점이 있습니다. 또한 상태에 오류를 추가하여 어떤 오류가 발생했는지 알 수 있습니다. http://formencode.org/Validator.html

다른 주목할 검사기로부터

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

+0

하지만 13 행은 다음 값을 다시 할당해야합니다. values ​​= validator.to_python (values, state) – Robbie

0

필자가 원하는 것은 String 및 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 
1

formencode.compound.All가있다 - 이것은 복합 검증기이다 - 즉, 입력으로 검증 걸리는 검사기이다. 스키마가 하나의 예입니다. 이 경우 All은 유효성 검사기 목록을 가져 와서 차례대로 각 유효성 검사기를 적용합니다. formencode.compound.Any는 해당 목록에서 첫 번째 전달 유효성 검사기를 사용하는 칭찬입니다. FormEncode validators

0

- 파이프 및 래퍼, 당신은 할 수 :

from formencode import validators, compound 


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