一、概念
序列化,指将查询集QuerySet和Model实例等复杂的数据转换为原生的Python数据类型,进而返回给客户端,客户端就可以很容易地呈现JSON,XML或其他内容类型。
反序列化,指将传入数据解析后,转换回复杂的类型,从而可以保存在数据库中。
在REST Framework中,提供了多个用于序列化操作的类,比较常用的如下:
(1)Serializer:进行序列化最基本的类。
(2)ModelSerializer:继承于Serializer,包含了与Model字段对应的字段,可以快速对Model进行序列化,默认实现了create()和update()
二、Serializer
首先创建一个Model:
创建对该Model进行序列化的类,使用Serializer,这里包含了2部分,一部分是定义了需要序列化的字段;另一部分包含了反序列化的create和update操作,需要将经过验证的数据返回完整的对象实例,并将对象保存到数据库中。
这里需要注意的是:新增还是更新,取决于在实例化序列化器类时是否传递了现有实例,官方文档如下:
最后写一个Views,用来验证Serializer:
三、ModelSerializer
相比于Serializer,ModelSerializer的使用更加简单:
(1)可根据指定的model自动检测并生成序列化的字段,不需要提前定义,默认情况下,将所有Model类中的字段映射到ModelSerializer类中相应的字段。
(2)自动为序列化程序生成验证器,例如 unique_together 验证器
(3)默认实现了create()和update()方法
首先,创建一个Model:
使用ModelSerializer为该Model创建序列化类:
官方文档强烈建议显式设置fields属性进行序列化字段,这将降低模型更改时无意中暴露数据的可能性。这里只显示设置了4个字段,测试一下ModelSerializer: