DRF-ModelSerializer-源码浅析-序列化

Django 中常常使用Model去描述数据,一般来说,每一个Model都映射一张数据库表。

但是在前后端交互的过程中, 需要将对象转化成容易传输和保持的格式,这种转化过程就是序列化的过程。

Serializer允许把QuerySet、Model Instance等复杂数据转化成Python原生数据类型,容易处理成JSON、XML或者其他内容形式。

ModelSerializer 类提供了一种快捷方式,可让自动创建具有与 Model 字段对应的字段的 Serializer 类

from rest_framework.serializers import ModelSerializer
class Example(models.Model):
    example_id = models.BigAutoField(primary_key=True, verbose_name="样例ID")
    detail = models.TextField(verbose_name="详细信息")

class ExampleSerializer(ModelSerializer):
    class Meta:
        model = Example
        fields = "__all__"

example = Example(example_id=1, detail="测试样例")
ExampleSerializer(example).data

为了自动生成Serializer,我们需要告诉ModelSerializer需要序列化哪一个Model的哪些Field

需要提供 fields 或者 exclude 之一,不能同时提供,也不能都不提供

fields 必须是 “__all__” 或者是 (list, tuple) 的实例

exclude 必须是 (list, tuple) 的实例

ModelSerializer 首先需要解析出提供的 field_name

ModelSerializer 接着 创建 Field 实例

ModelSerializer 进行序列化并且获得一个 ReturnDict 对象

参考文档:

  1. Serializers.drf.https://www.django-rest-framework.org/api-guide/serializers/#serializers
  2. Django Rest Framework源码剖析(六)-----序列化(serializers).W_D.https://www.cnblogs.com/wdliu/p/9131500.html