2013-05-13 4 views
0

Как я могу написать пользовательский валидатор, который всегда выполняется, даже если пользователь отправил пустое или отсутствующее значение?Formencode и пустые значения

Я попытался перекрывая to_python, validate_python, _to_python, _validate_python (и более) методы, но ни один из них не кажется, чтобы работать, если пользователь представил пустой или None значение

ответ

0

В результате я перешел от FormEncode к WTForms, и теперь все стало намного проще. Мне кажется, что Formencode не очень хорошо продумано.

0

я обнаружил, что был в состоянии сделайте это с превалирующим инструментом, но я не уверен, что это лучший способ. Проблема в том, чтобы сделать это таким образом, что ничто иное не будет проверено, если ошибка будет выполнена. Я могу использовать chained_validators вместо pre_validators, но имеет обратный эффект, когда captcha проверяется только при прохождении всех остальных полей.

class LoginForm(formencode.Schema): 
    ... 
    captcha = formencode.validators.String(if_missing=None) 
    pre_validators = [validators.Captcha('captcha')] 



class Captcha(formencode.validators.FormValidator): 

    def __init__(self, captcha_name): 
     self.captcha_name = captcha_name 

    def validate_python(self, value_dict, state): 
     if not captcha.test_captcha(value_dict.get(self.captcha_name)): 
      raise formencode.Invalid('Captcha error', self.captcha_name, state, error_dict={self.captcha_name: 'Captcha did not match'})