Django REST framework:Serializers與ModelSerializer

一、概念

序列化,指將查詢集QuerySet和Model實(shí)例等復(fù)雜的數(shù)據(jù)轉(zhuǎn)換為原生的Python數(shù)據(jù)類型,進(jìn)而返回給客戶端,客戶端就可以很容易地呈現(xiàn)JSON,XML或其他內(nèi)容類型。

反序列化,指將傳入數(shù)據(jù)解析后,轉(zhuǎn)換回復(fù)雜的類型,從而可以保存在數(shù)據(jù)庫(kù)中。

在REST Framework中,提供了多個(gè)用于序列化操作的類,比較常用的如下:

(1)Serializer:進(jìn)行序列化最基本的類。

(2)ModelSerializer:繼承于Serializer,包含了與Model字段對(duì)應(yīng)的字段,可以快速對(duì)Model進(jìn)行序列化,默認(rèn)實(shí)現(xiàn)了create()和update()

二、Serializer

首先創(chuàng)建一個(gè)Model:

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

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

最后寫一個(gè)Views,用來驗(yàn)證Serializer:

三、ModelSerializer

相比于Serializer,ModelSerializer的使用更加簡(jiǎn)單:

(1)可根據(jù)指定的model自動(dòng)檢測(cè)并生成序列化的字段,不需要提前定義,默認(rèn)情況下,將所有Model類中的字段映射到ModelSerializer類中相應(yīng)的字段。

(2)自動(dòng)為序列化程序生成驗(yàn)證器,例如 unique_together 驗(yàn)證器

(3)默認(rèn)實(shí)現(xiàn)了create()和update()方法

首先,創(chuàng)建一個(gè)Model:

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容