3. Django每日一码 之 Serializers 源码
2019-7-6 今日源码:rest-framework 序列化Serializers
序列化组件Serializers 源码分析
首先,它需要 data 、many 、 instance,其中 instance 序列化,data为反序列化,many=True时为多条数据。
1)先从many为入口切入。
查看源码,可以发现,在父类BaseSerializer中,先调用_ _ new_ _方法,如果many=True,生成ListSerializer对象,如果为False,生成Serializer对象
2)继续以data为切入口
先从自己开始查找data,没有再去父类查找一级一级找
发现在Serializer 中有data方法,然而发现它是继承父类的,继续去父类中查找
发现又调用to_representation 方法,首先从自身查找,最后在它父类的父类Serializer中找到to_representation方法。
Serializer类里有to_representation方法,for循环执行attribute = field.get_attribute(instance)
再去查找 field.get_attribute ,最后在Field中找到
self.source_attrs就是被切分的source,然后执行get_attribute方法,source_attrs,当参数传过去,判断是方法就加括号执行,是属性就把值取出来。
3) instance 序列化
在执行save时,instance是在需要修改数据的时候使用,传入instance为修改,不传为新增
这就是 rest-framework 之 序列化组件源码分析,请大家积极找错纠正哈