0

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

我尝试过覆盖 to_python、validate_python、_to_python、_validate_python (以及更多)方法,但如果用户提交了空值或 None 值,这些方法似乎都不会运行

4

2 回答 2

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'})
于 2013-05-13T11:13:51.767 回答
0

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

于 2013-05-14T23:43:59.680 回答