如何编写一个始终执行的自定义验证器,即使用户提交了空值或缺失值?
我已尝试覆盖to_python,validate_python,_to_python,_validate_python(及更多)方法,但如果用户提交了空值或无值,则这些方法似乎都无法运行
答案 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并没有经过深思熟虑。