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

DjangoRestFramework中serializer.save()方法经历了什么?

时间:2020-06-29 00:27:20      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:else   ted   net   val   数据对象   图片   http   creat   screens   

  1. 使用serializer.save()的mixin,CreateModelMixin处理post请求,UpdateModelMixin处理put,patch请求,这里可以看到create方法,get_serializer()创建序列化实例时,只是传入request.data浏览器发送过来的数据,UpdateModelMixin,get_serializer()创建序列化实例时,传入了通过get_object()方法取到数据对象instance

    技术图片
    技术图片

  2. ModelSerializer继承自Serializer类,Serializer继承自BaseSerializer类,BaseSerializer继承自Field类

    技术图片

  3. UpdateModelMixin中,get_serializer(instance, data=request.data, partial=partial),这个方法实际就是序列化类的实例化,实例化的过程中添加了属性self.instance=instance,CreateModelMixin没有传入instance,所以self.instance=None,

    技术图片
    技术图片

  4. serializer.save()方法在BaseSerializer类中实现,调用了create方法和update方法,如果是put或者patch请求,也就是self.instance=instance,调用update方法,如果是post请求,调用的是create方法,update方法和create方法在BaseSerializer类中都是抽象方法,具体实现是在ModelSerializer类中,最终结果是post和put,patch请求得到的instance赋值给self.instance属性

    技术图片
    技术图片

  5. 同时这里可以看到save方法也可以添加关键字参数,数据保存在**kwargs中

    技术图片

  6. validated_data数据实际包括两方面,一个是serializer.is_valid()方法之后经过验证的数据,一个是save()方法添加进去的关键字参数

    技术图片

  7. ModelSerializer类中create方法和update方法实际上就是经过验证的数据存入到数据库中,也就是serializer.is_valid()方法之后

    技术图片
    技术图片

  8. 总结:serializer.save()方法实际上就是把经过验证的数据(也包括save()方法传进去的关键字参数)存入到数据库中的过程,最终将返回的数据实例赋值给self.instance属性,如果是post请求,调用的ModelSerializer类中的create()方法,如果是put或者patch请求,调用的是ModelSerializer类中的update()方法

DjangoRestFramework中serializer.save()方法经历了什么?

标签:else   ted   net   val   数据对象   图片   http   creat   screens   

原文地址:https://www.cnblogs.com/iread9527/p/13205528.html

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