1. 程式人生 > 其它 >DRF中serializer的中的模型欄位解釋

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展示頁面時,顯示的欄位幫助提示資訊

注意事項:

  1. 使用序列化器的時候一定要注意,序列化器聲明瞭以後,不會自動執行,需要我們在檢視中進行呼叫才可以。
  2. 序列化器無法直接接收資料,需要我們在檢視中建立序列化器物件時把使用的資料傳遞過來。
  3. 序列化器的欄位宣告類似於我們前面使用過的表單系統。
  4. 開發restful api時,序列化器會幫我們把模型資料轉換成字典.

drf提供的檢視會幫我們把字典轉換成json.或者把客戶端傳送過來的資料 轉換字典
序列化器的使用
序列化器的使用分兩個階段:

  1. 在客戶端請求時,使用序列化器可以完成對資料的反序列化。
  2. 在伺服器響應時,使用序列化器可以完成對資料的序列化。

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

既然選擇了遠方,只能風雨兼程

轉載:https://www.cnblogs.com/lzss/p/11922448.html