來源:AirPython作者:星安果1. 前言大家好,我是安果!之前有寫過一篇文章,聊到如何快速入門 Django DRF接下來,將通過幾篇文章將對 DRF 模型序列化進行展開說明,詳情談談模型序列化的
2021-06-28 13:39:33
來源:AirPython
作者:星安果
1. 前言
大家好,我是安果!
之前有寫過一篇文章,聊到如何快速入門 Django DRF
接下來,將通過幾篇文章將對 DRF 模型序列化進行展開說明,詳情談談模型序列化的作用、步驟及進階用法
2. 模型序列化的作用?
作為 DRF 中非常關鍵的一步,模型序列化主要作用有 3 個
序列化資料用於將模型序列化成 JSON 格式的物件,便於資料返回表單驗證在表單請求中,用於驗證使用者上傳的資料是否滿足項目要求資料操作可用於資料更新、資料創建、資料儲存等
3. 表單欄位驗證
指定需要序列化的欄位時,可以設定欄位類型、預設值、可讀或可寫、驗證錯誤提示資訊等,然後針對表單欄位進行驗證
表單欄位驗證同樣有 3 種方式,分別對應:
3-1序列化欄位,使用參數形式進行制定
比如,欄位 name 資料類型為字元串,max_length 指定最大長度,必須輸入,並使用「 error_messages 」設定驗證失敗的提示資訊
# 最大長度50# required=True:必須輸入# 如果不傳遞,則報錯:name必須要傳遞name = serializers.CharField(max_length=50, required=True, error_messages={"required": "name必須要傳遞"})
3-2重寫 validate( self , attrs ) 方法進行驗證
參數 attrs 包含所有欄位
我們只需要自定義驗證邏輯,如果驗證不通過,拋出「 serializers.ValidationError 」異常即可
比如,這裡驗證 name 中必須包含關鍵字「 深圳 」,否則拋出異常(代表驗證失敗)
def validate(self, attrs):""" 表單資料驗證 :param attrs: :return: """ print(attrs) if "深圳" not in attrs.get("name"): raise serializers.ValidationError('名稱中沒有包含【深圳】,驗證失敗!') return attrs
3-3重寫 validate_欄位名(self,value) 方法
單獨針對某個欄位進行驗證
比如,我們還是對 name 欄位進行驗證,如果驗證不通過,主動拋出「 serializers.ValidationError 」異常即可
def validate_name(self, name):""" 對name欄位進行驗證 :param name: :return: """ if "深圳" not in name: raise serializers.ValidationError('名稱中沒有包含【深圳】,驗證失敗!') return name
4. 重寫創建、更新方法
創建的序列化類繼承於 serializers.Serializer 類
這裡重寫 update() 和 create() 函數
其中,
update( self, instance, validated_data )用於更新資料,將參數 validated_data 中的資料更新到 instance 中create(self, validated_data)validated_data 作為關鍵字參數,用於創建模型class GoodsSerializer(serializers.Serializer): # 需要序列化的欄位 # 注意:自動生成的欄位,只會涉及讀取的場景 id = serializers.IntegerField(read_only=True) # error_messages:定義錯誤資訊 name = serializers.CharField(max_length=200, required=True, error_messages={"required": "name參數必須要傳遞"}) def update(self, instance, validated_data): """ 更新資料,將validated_data中的資料更新到instance中 :param instance: :param validated_data: :return: """ # 修改資料 instance.name = validated_data.get("name", instance.name) # 儲存更新 instance.save() return instance def create(self, validated_data): """ 創建資料 :param validated_data: :return: """ # Goods:模型 return Goods.objects.create(**validated_data)
5. 最後
本章講到模型普通序列化的步驟,關於模型序列化、序列化巢狀、項目實戰中流程,我將在下一篇文章進行說明
如果你覺得文章還不錯,請大家 點贊、分享、留言下,因為這將是我持續輸出更多優質文章的最強動力!
相關文章
來源:AirPython作者:星安果1. 前言大家好,我是安果!之前有寫過一篇文章,聊到如何快速入門 Django DRF接下來,將通過幾篇文章將對 DRF 模型序列化進行展開說明,詳情談談模型序列化的
2021-06-28 13:39:33
金磊 發自 凹非寺量子位 報道 | 公眾號 QbitAI雲端AI晶片,已經成為兵家必爭之地。據ABI Research統計,從全球市場發展來看,這塊「大蛋糕」將在2024年達到191億美元的規模。因此
2021-06-28 13:39:22
中國薪酬網釋出的《2020中國高校畢業生薪酬指數排行》,這個排名是按照工資水平、就業率、人才成長率、薪酬增長的四個要素。排出的前100名高校,新一屆的考生可以作為參考哦。T
2021-06-28 13:38:46
整理 | Carol相信下載並使用開源軟體包一定是每個開發者的必備技能,畢竟站在巨人的肩膀上看風景才能看得最遠,然而,你使用的開原始碼一定是安全的嗎?近日,一名安全研究人員發現,很
2021-06-28 13:19:51
隨著2021年過去了一半,各家下一代旗艦手機的傳聞也越來越多。當然也有像聯想這樣急不可待的自己宣佈會在今年年底釋出旗艦手機,並首發高通下一代旗艦晶片。只不過對於聯想這種
2021-06-28 13:18:47
明敏 發自 凹非寺 量子位 報道 | 公眾號 QbitAI最近,一套「現代版Unix命令」在GitHub上火了。5天就達到了2k星。網友看了後表示:這是ACE啊!我已經做好不用任何GUI工具箱的準備
2021-06-28 13:17:37