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

异同

当我们在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规则的响应,不会继续后续的校验。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值