django rest framework serializers小結

来源:https://www.cnblogs.com/jiangxiaolong-1996/archive/2020/05/04/12828044.html
-Advertisement-
Play Games

引言 serializers是什麼? 官網是這樣的”Serializers allow complex data such as querysets and model instances to be converted to native Python datatypes that can the ...


引言

serializers是什麼?

官網是這樣的”Serializers allow complex data such as querysets and model instances to be converted to native Python datatypes that can then be easily rendered into JSON, XML or other content types. “翻譯出來就是,將複雜的數據結構變成json或者xml這個格式的。

  • 將queryset與model實例等進行序列化,轉化成json格式,返回給用戶(api介面)。
  • 將post與patch/put的上來的數據進行驗證。
  • 對post與patch/put數據進行處理。

簡單來說,針對get來說,serializers的作用體現在第一條,但如果是其他請求,serializers能夠發揮2,3條的作用!

本文比較長,用張圖簡單介紹一下主要內容

 

1. 常用的field

  CharField、BooleanField、IntegerField、DateTimeField這幾個用得比較多,我們把外鍵的field放到後面去說!   例如:
  • mobile = serializers.CharField(max_length=11, min_length=11)
  • age = serializers.IntegerField(min_value=1, max_value=100)
  # format可以設置時間的格式,下麵例子會輸出如:2018-1-24 12:10
  • pay_time = serializers.DateTimeField(read_only=True,format='%Y-%m-%d %H:%M')
  • is_hot = serializers.BooleanField()
  • HiddenField

HiddenField的值不依靠輸入,而需要設置預設的值,不需要用戶自己post數據過來,也不會顯式返回給用戶,最常用的就是user!!

我們在登錄情況下,進行一些操作,假設一個用戶去收藏了某一門課,那麼後臺應該自動識別這個用戶,然後用戶只需要將課程的id post過來,那麼這樣的功能,我們配合CurrentUserDefault()實現。
# 這樣就可以直接獲取到當前用戶

user = serializers.HiddenField(default=serializers.CurrentUserDefault()
  不同的是,我們在django中,form更強調對提交的表單進行一種驗證,而serializer的field不僅在進行數據驗證時起著至關重要的作用,在將數據進行序列化後返回也發揮著重要作用!!

 

2. Core arguments參數

  read_only:True表示不允許用戶自己上傳,只能用於api的輸出。如果某個欄位設置了read_only=True,那麼就不需要進行數據驗證,只會在返回時,將這個欄位序列化後返回   write_only: 與read_only對應相反;必須上傳,不返回。   required: 顧名思義,就是這個欄位是否必填。   allow_null/allow_blank:是否允許為NULL/空 。   error_messages:出錯時,信息提示。
name = serializers.CharField(required=True, min_length=6,
                error_messages={'min_length': '名字不能小於6個字元','required': '請填寫名字'})

 

label: 欄位顯示設置,如 label=’驗證碼’   help_text: 在指定欄位增加一些提示文字,這兩個欄位作用於api頁面比較有用

style: 說明欄位的類型,這樣看可能比較抽象,看下麵例子:
# 在api頁面,輸入密碼就會以*顯示
password = serializers.CharField(style={'input_type': 'password'})

# 會顯示選項框
color_channel = serializers.ChoiceField(choices=['red', 'green', 'blue'],
                                        style={'base_template': 'radio.html'})
  這裡面,還有一個十分有用的validators參數,這個我們會在後面提及!