Serializers 序列化元件 Serializers 序列化元件
Serializers 序列化元件
為什麼要用序列化元件
當我們做前後端分離的專案~~我們前後端互動一般都選擇JSON資料格式,JSON是一個輕量級的資料互動格式。
那麼我們給前端資料的時候都要轉成json格式,那就需要對我們從資料庫拿到的資料進行序列化。
接下來我們看下django序列化和rest_framework序列化的對比~~
Django的序列化方法
.values 序列化結果 django serializersDRF序列化的方法
首先,我們要用DRF的序列化,就要遵循人家框架的一些標準,
-- Django我們CBV繼承類是View,現在DRF我們要用APIView
-- Django中返回的時候我們用HTTPResponse,JsonResponse,render ,DRF我們用Response
為什麼這麼用~我們之後會詳細講~~我們繼續來看序列化~~
序列化
第一步 宣告序列化類 第二步 序列化物件外來鍵關係的序列化
外來鍵關係的序列化反序列化
當前端給我們發post的請求的時候~前端給我們傳過來的資料~我們要進行一些校驗然後儲存到資料庫~
這些校驗以及儲存工作,DRF的Serializer也給我們提供了一些方法了~~
首先~我們要寫反序列化用的一些欄位~有些欄位要跟序列化區分開~~
Serializer提供了.is_valid() 和.save()方法~~
反序列化serializer.py 反序列化views.py當前端給我們傳送patch請求的時候,前端傳給我們使用者要更新的資料,我們要對資料進行部分驗證~~
驗證
如果我們需要對一些欄位進行自定義的驗證~DRF也給我們提供了鉤子方法~~
單個欄位的驗證 多個欄位的驗證 驗證器 validatorsModelSerializer
現在我們已經清楚了Serializer的用法,會發現我們所有的序列化跟我們的模型都緊密相關~
那麼,DRF也給我們提供了跟模型緊密相關的序列化器~~ModelSerializer~~
-- 它會根據模型自動生成一組欄位
-- 它簡單的預設實現了.update()以及.create()方法
定義一個ModelSerializer序列化器
定義ModelSerializer外來鍵關係的序列化
注意:當序列化類MATE中定義了depth時,這個序列化類中引用欄位(外來鍵)則自動變為只讀
外來鍵關係序列化自定義欄位
我們可以宣告一些欄位來覆蓋預設欄位,來進行自定製~
比如我們的選擇欄位,預設顯示的是選擇的key,我們要給使用者展示的是value。
自定義欄位Meta中其它關鍵字引數
Meta中引數post以及patch請求
由於depth會讓我們外來鍵變成只讀,所以我們再定義一個序列化的類,其實只要去掉depth就可以了~~
post/patch請求序列化類SerializerMethodField
外來鍵關聯的物件有很多欄位我們是用不到的~都傳給前端會有資料冗餘~就需要我們自己去定製序列化外來鍵物件的哪些欄位~~
SerializerMethodField用ModelSerializer改進上面Serializer的完整版
ModelSerializer為什麼要用序列化元件
當我們做前後端分離的專案~~我們前後端互動一般都選擇JSON資料格式,JSON是一個輕量級的資料互動格式。
那麼我們給前端資料的時候都要轉成json格式,那就需要對我們從資料庫拿到的資料進行序列化。
接下來我們看下django序列化和rest_framework序列化的對比~~
Django的序列化方法
.values 序列化結果 django serializersDRF序列化的方法
首先,我們要用DRF的序列化,就要遵循人家框架的一些標準,
-- Django我們CBV繼承類是View,現在DRF我們要用APIView
-- Django中返回的時候我們用HTTPResponse,JsonResponse,render ,DRF我們用Response
為什麼這麼用~我們之後會詳細講~~我們繼續來看序列化~~
序列化
第一步 宣告序列化類 第二步 序列化物件外來鍵關係的序列化
外來鍵關係的序列化反序列化
當前端給我們發post的請求的時候~前端給我們傳過來的資料~我們要進行一些校驗然後儲存到資料庫~
這些校驗以及儲存工作,DRF的Serializer也給我們提供了一些方法了~~
首先~我們要寫反序列化用的一些欄位~有些欄位要跟序列化區分開~~
Serializer提供了.is_valid() 和.save()方法~~
反序列化serializer.py 反序列化views.py當前端給我們傳送patch請求的時候,前端傳給我們使用者要更新的資料,我們要對資料進行部分驗證~~
PATCH請求serializers.py PATCH請求views.py驗證
如果我們需要對一些欄位進行自定義的驗證~DRF也給我們提供了鉤子方法~~
單個欄位的驗證 多個欄位的驗證 驗證器 validatorsModelSerializer
現在我們已經清楚了Serializer的用法,會發現我們所有的序列化跟我們的模型都緊密相關~
那麼,DRF也給我們提供了跟模型緊密相關的序列化器~~ModelSerializer~~
-- 它會根據模型自動生成一組欄位
-- 它簡單的預設實現了.update()以及.create()方法
定義一個ModelSerializer序列化器
定義ModelSerializer外來鍵關係的序列化
注意:當序列化類MATE中定義了depth時,這個序列化類中引用欄位(外來鍵)則自動變為只讀
外來鍵關係序列化自定義欄位
我們可以宣告一些欄位來覆蓋預設欄位,來進行自定製~
比如我們的選擇欄位,預設顯示的是選擇的key,我們要給使用者展示的是value。
自定義欄位Meta中其它關鍵字引數
Meta中引數post以及patch請求
由於depth會讓我們外來鍵變成只讀,所以我們再定義一個序列化的類,其實只要去掉depth就可以了~~
post/patch請求序列化類SerializerMethodField
外來鍵關聯的物件有很多欄位我們是用不到的~都傳給前端會有資料冗餘~就需要我們自己去定製序列化外來鍵物件的哪些欄位~~
SerializerMethodField