一、概念
序列化,指將查詢集QuerySet和Model實例等復(fù)雜的數(shù)據(jù)轉(zhuǎn)換為原生的Python數(shù)據(jù)類型,進而返回給客戶端,客戶端就可以很容易地呈現(xiàn)JSON,XML或其他內(nèi)容類型。
反序列化,指將傳入數(shù)據(jù)解析后,轉(zhuǎn)換回復(fù)雜的類型,從而可以保存在數(shù)據(jù)庫中。
在REST Framework中,提供了多個用于序列化操作的類,比較常用的如下:
(1)Serializer:進行序列化最基本的類。
(2)ModelSerializer:繼承于Serializer,包含了與Model字段對應(yīng)的字段,可以快速對Model進行序列化,默認實現(xiàn)了create()和update()
二、Serializer
首先創(chuàng)建一個Model:

創(chuàng)建對該Model進行序列化的類,使用Serializer,這里包含了2部分,一部分是定義了需要序列化的字段;另一部分包含了反序列化的create和update操作,需要將經(jīng)過驗證的數(shù)據(jù)返回完整的對象實例,并將對象保存到數(shù)據(jù)庫中。

這里需要注意的是:新增還是更新,取決于在實例化序列化器類時是否傳遞了現(xiàn)有實例,官方文檔如下:

最后寫一個Views,用來驗證Serializer:


三、ModelSerializer
相比于Serializer,ModelSerializer的使用更加簡單:
(1)可根據(jù)指定的model自動檢測并生成序列化的字段,不需要提前定義,默認情況下,將所有Model類中的字段映射到ModelSerializer類中相應(yīng)的字段。
(2)自動為序列化程序生成驗證器,例如 unique_together 驗證器
(3)默認實現(xiàn)了create()和update()方法
首先,創(chuàng)建一個Model:

使用ModelSerializer為該Model創(chuàng)建序列化類:

官方文檔強烈建議顯式設(shè)置fields屬性進行序列化字段,這將降低模型更改時無意中暴露數(shù)據(jù)的可能性。這里只顯示設(shè)置了4個字段,測試一下ModelSerializer:
