Formencode和空值

时间:2013-05-13 05:20:17

标签: python formencode

如何编写一个始终执行的自定义验证器,即使用户提交了空值或缺失值?

我已尝试覆盖to_python,validate_python,_to_python,_validate_python(及更多)方法,但如果用户提交了空值或无值,则这些方法似乎都无法运行

2 个答案:

答案 0 :(得分:0)

我发现我能用预验证器做到这一点,但我不确定这是不是最好的方法。这样做的问题是如果验证码失败则没有其他任何东西得到验证。我可以使用chained_validators而不是pre_validators,但这会产生相反的效果,只有在所有其他字段都通过后才会验证验证码。

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'})

答案 1 :(得分:0)

我最终从FormEncode转移到了WTForms,现在一切都变得容易了。在我看来,Formencode并没有经过深思熟虑。