码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-11-06 01:24:02      阅读:13      评论:0      收藏:0      [点我收藏+]

标签:两种   ane   serialize   通过   调整   号码   出错   没有   获取手机号   

异同

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

出现错误则有两种选择

  1. raise ValidationError(‘错误信息‘)

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

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

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

结论

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

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

题外话

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

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

标签:两种   ane   serialize   通过   调整   号码   出错   没有   获取手机号   

原文地址:https://www.cnblogs.com/lymmurrain/p/13929526.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!