DRF中serializer的中的模型欄位解釋
序列化器--Serializer
選項引數:
- max_length 最大長度
- min_length 最小長度
- allow_blank 是否允許為空
- trim_whitespace 是否截斷空白字元
- max_value 最小值
- min_value 最大值
通項引數
- read_only 該欄位僅用於序列化輸出,預設false
- write_only 該欄位僅用於反序列化輸入,預設false
- required 該欄位在反序列化時必須輸入,預設true
- default 反序列化時使用的預設值
- allow_null 該欄位是否允許傳入None,預設false
- validators 該欄位使用的驗證器
- error_messages 包含錯誤編號與錯誤資訊的字典
- label 用於HTML展示頁面時,顯示的欄位名稱
- help_text 用於HTML展示頁面時,顯示的欄位幫助提示資訊
注意事項:
- 使用序列化器的時候一定要注意,序列化器聲明瞭以後,不會自動執行,需要我們在檢視中進行呼叫才可以。
- 序列化器無法直接接收資料,需要我們在檢視中建立序列化器物件時把使用的資料傳遞過來。
- 序列化器的欄位宣告類似於我們前面使用過的表單系統。
- 開發restful api時,序列化器會幫我們把模型資料轉換成字典.
drf提供的檢視會幫我們把字典轉換成json.或者把客戶端傳送過來的資料 轉換字典
序列化器的使用
序列化器的使用分兩個階段:
- 在客戶端請求時,使用序列化器可以完成對資料的反序列化。
- 在伺服器響應時,使用序列化器可以完成對資料的序列化。
ModelSerializer元件
ModelSerializer與常規的Serializer相同,但提供了
* 基於模型類自動生成一系列欄位
* 基於模型類自動為Serializer生成validators,比如unique_together
* 包含預設的create()和update()的實現
定義
class BookInfoSerializer(serializes.ModelSerializer): class Meta: el=BookInfo fields='__all__'
model指明參照哪個模型類
fields指明為模型類的哪些欄位生成
我們可以在python manage.py shell中檢視自動生成的BookInfoSerializer的具體實現
指定欄位
使用fields來明確欄位,__all__表示包含所有欄位
使用exclude可以明確排除掉哪些欄位
通過read_only_fields指明只讀欄位,僅用於序列化輸出的欄位
使用extra_kwargs引數為ModelSerialize新增或修改原有的選項引數
單表序列化總結
1)序列化與反序列功能可以整合成一個類,該類繼承ModelSerializer
2)繼承ModelSerializer類的資源序列化類,內部包含三部分
Meta子類、區域性鉤子、全域性鉤子
注:create和update方法ModelSerializer已經重寫了,使用不需要重寫
3)在Meta子類中:
用model來繫結關聯的Model類
用fields來設定所有的序列化反序列化欄位
用extra_kwargs來設定系統的校驗規則
4)重要的欄位校驗規則:
read_only校驗規則,代表該欄位只參與序列化
write_only校驗規則,代表該欄位只參與反序列化
required校驗規則,代表該欄位在反序列化是是否是必填(True)還是選填(False),不能和read_only一起使用(規則衝突)
規則細節:
如果一個欄位有預設值或是可以為空,沒設定required規則,預設為False,反之預設值為True
如果一個Model欄位即沒有設定read_only也沒設定write_only,該欄位預設參與序列化及反序列化
5)自定義序列化欄位:在Model類中,定義方法屬性(可以返回特殊值,還可以完成連表操作),在序列化類的fields屬性中可以選擇性插拔
6)自定義反序列化欄位:在Serializer類中,自定義校驗欄位,校驗規則也只能在宣告欄位時設定,自定義的反序列化欄位(如re_pwd),
必須設定write_only為True
既然選擇了遠方,只能風雨兼程