체인 포맷 코드 유효성 검사기
-
16-09-2019 - |
문제
문제:
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())