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

校验字段的局部钩子和全局钩子源码分析

时间:2019-02-24 16:16:55      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:validate   nal   钩子   方法   errors   view   代码   with   attrs   

view中使用is_valid()方法:

 def post(self, request, *args, **kwargs):
        # 新增
        response = {'status': 100, 'msg': '新增成功'}
        book_ser = BookSerializer(data=request.data)
        # 提交的字段校验通过
        if book_ser.is_valid():
            book_ser.save()
            response['book'] = book_ser.data
        else:
            response['msg'] = book_ser.errors
        return Response(response)

局部钩子和全局钩子函数代码

#局部钩子
    def validate_title(self,value):
        from rest_framework import exceptions
        if value.startswith('sb'):
            raise exceptions.ValidationError('xxx')
        return value
#全局
def validate(self, attrs):
    from rest_framework import exceptions
    if attrs.get('title')== attrs.get('title2'):
        return attrs
    else:
        raise exceptions.ValidationError('不想等啊')

通过is_valid()方法找到源码中的run_validation

技术图片
技术图片

最后执行self.to_internal_value(data)

技术图片

流程总结:

  • is_valid---->self.run_validation-(执行Serializer的run_validation)
  • 然后执行self.to_internal_value(data)
  • 循环字段,完成校验功能

校验字段的局部钩子和全局钩子源码分析

标签:validate   nal   钩子   方法   errors   view   代码   with   attrs   

原文地址:https://www.cnblogs.com/wanlei/p/10426517.html

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