当前位置:   article > 正文

django中form组件的校验时raise ValidationError与self.add_error异同

raise validationerror

异同
当我们在form组件用clean函数(无论是局部或者全局钩子函数)验证字段是否有错误时,如果字段正确则最终clean函数要返回该字段值(全局钩子返回self.cleaned_data),是为了放入form对象的cleaned_data字典中,以供后续使用。

出现错误则有两种选择

  • raise ValidationError(‘错误信息’)

  • self.add_error(‘校验字段名’,‘错误信息’),而后返回校验字段值

两种方法都能将字段名及错误信息作为键值对放入对象的errors字典中。

但如果用raise ValidationError 的话后续的cleaned_data字典中将没有该错误字段的键值对。

结论
如过有复合校验的需求,例如先校验手机号是否注册,再校验手机号与验证码是否匹配的时候,若想要两个局部钩子clean函数分开单独检验,最好使用第二种方法,否则如果手机号码出错,后续的是否匹配的钩子函数是无法在cleaned_data中获取手机号的。

当然,你也可以通过调整校验顺序,或直接放在全局钩子中统一校验。

题外话
form组件的校验与drf中的serializer的校验挺像的,clean_变成了validated_,但是drf出错误时raise exceptions.ValidationError(msg, code)会直接返回符合rf规则的响应,不会继续后续的校验。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/671043
推荐阅读
相关标签
  

闽ICP备14008679号