如何编写始终执行的自定义验证器,即使用户提交了空值或缺失值?
我尝试过覆盖 to_python、validate_python、_to_python、_validate_python (以及更多)方法,但如果用户提交了空值或 None 值,这些方法似乎都不会运行
如何编写始终执行的自定义验证器,即使用户提交了空值或缺失值?
我尝试过覆盖 to_python、validate_python、_to_python、_validate_python (以及更多)方法,但如果用户提交了空值或 None 值,这些方法似乎都不会运行
我发现我可以使用预验证器来做到这一点,但我不确定这是否是最好的方法。这样做的问题是,如果验证码失败,则不会验证其他任何内容。我可以使用 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'})
我最终从 FormEncode 转移到 WTForms,现在一切都变得容易多了。在我看来,Formencode 并没有经过深思熟虑。