成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

DRF 中的模型序列化到底該怎么用?

開發(fā) 前端
本章講到模型普通序列化的步驟,關(guān)于模型序列化、序列化嵌套、項目實戰(zhàn)中流程,我將在下一篇文章進行說明。

[[407827]]

本文轉(zhuǎn)載自微信公眾號「AirPython」,作者星安果。轉(zhuǎn)載本文請聯(lián)系A(chǔ)irPython公眾號。

1. 前言

大家好,我是安果!

接下來,將通過幾篇文章將對 DRF 模型序列化進行展開說明,詳情談?wù)勀P托蛄谢淖饔谩⒉襟E及進階用法

2. 模型序列化的作用?

作為 DRF 中非常關(guān)鍵的一步,模型序列化主要作用有 3 個

  • 序列化數(shù)據(jù)

用于將模型序列化成 JSON 格式的對象,便于數(shù)據(jù)返回

  • 表單驗證

在表單請求中,用于驗證用戶上傳的數(shù)據(jù)是否滿足項目要求

  • 數(shù)據(jù)操作

可用于數(shù)據(jù)更新、數(shù)據(jù)創(chuàng)建、數(shù)據(jù)保存等

3. 表單字段驗證

指定需要序列化的字段時,可以設(shè)置字段類型、默認值、可讀或可寫、驗證錯誤提示信息等,然后針對表單字段進行驗證

表單字段驗證同樣有 3 種方式,分別對應(yīng):

3-1 序列化字段,使用參數(shù)形式進行制定

比如,字段 name 數(shù)據(jù)類型為字符串,max_length 指定最大長度,必須輸入,并使用「 error_messages 」設(shè)置驗證失敗的提示信息

  1. # 最大長度50 
  2. # required=True:必須輸入 
  3. # 如果不傳遞,則報錯:name必須要傳遞 
  4. name = serializers.CharField(max_length=50, required=True, error_messages={"required""name必須要傳遞"}) 

3-2 重寫 validate( self , attrs ) 方法進行驗證

參數(shù) attrs 包含所有字段

我們只需要自定義驗證邏輯,如果驗證不通過,拋出「 serializers.ValidationError 」異常即可

比如,這里驗證 name 中必須包含關(guān)鍵字「 深圳 」,否則拋出異常(代表驗證失敗)

  1. def validate(self, attrs): 
  2.     ""
  3.     表單數(shù)據(jù)驗證 
  4.     :param attrs: 
  5.     :return
  6.     ""
  7.     print(attrs) 
  8.     if "深圳" not in attrs.get("name"): 
  9.         raise serializers.ValidationError('名稱中沒有包含【深圳】,驗證失敗!'
  10.     return attrs 

3-3 重寫 validate_字段名(self,value) 方法

單獨針對某個字段進行驗證

比如,我們還是對 name 字段進行驗證,如果驗證不通過,主動拋出「 serializers.ValidationError 」異常即可

  1. def validate_name(self, name): 
  2.     ""
  3.     對name字段進行驗證 
  4.     :param name:  
  5.     :return:  
  6.     ""
  7.     if "深圳" not in name
  8.         raise serializers.ValidationError('名稱中沒有包含【深圳】,驗證失敗!'
  9.     return name 

4. 重寫創(chuàng)建、更新方法

創(chuàng)建的序列化類繼承于 serializers.Serializer 類

這里重寫 update() 和 create() 函數(shù)

其中,

  • update( self, instance, validated_data )

用于更新數(shù)據(jù),將參數(shù) validated_data 中的數(shù)據(jù)更新到 instance 中

  • create(self, validated_data)

validated_data 作為關(guān)鍵字參數(shù),用于創(chuàng)建模型

  1. class GoodsSerializer(serializers.Serializer): 
  2.     # 需要序列化的字段 
  3.     # 注意:自動生成的字段,只會涉及讀取的場景 
  4.     id = serializers.IntegerField(read_only=True
  5.  
  6.     # error_messages:定義錯誤信息 
  7.     name = serializers.CharField(max_length=200, required=True, error_messages={"required""name參數(shù)必須要傳遞"}) 
  8.  
  9.     def update(self, instance, validated_data): 
  10.         ""
  11.         更新數(shù)據(jù),將validated_data中的數(shù)據(jù)更新到instance中 
  12.         :param instance: 
  13.         :param validated_data: 
  14.         :return
  15.         ""
  16.         # 修改數(shù)據(jù) 
  17.         instance.name = validated_data.get("name", instance.name
  18.  
  19.         # 保存更新 
  20.         instance.save() 
  21.         return instance 
  22.  
  23.     def create(self, validated_data): 
  24.         ""
  25.         創(chuàng)建數(shù)據(jù) 
  26.         :param validated_data: 
  27.         :return
  28.         ""
  29.         # Goods:模型 
  30.         return Goods.objects.create(**validated_data) 

5. 最后

本章講到模型普通序列化的步驟,關(guān)于模型序列化、序列化嵌套、項目實戰(zhàn)中流程,我將在下一篇文章進行說明。

 

責任編輯:武曉燕 來源: AirPython
相關(guān)推薦

2023-11-27 12:24:23

算法模型業(yè)務(wù)模型

2023-12-13 13:49:52

Python序列化模塊

2011-06-01 14:26:11

序列化

2011-06-01 15:05:02

序列化反序列化

2022-08-06 08:41:18

序列化反序列化Hessian

2018-03-19 10:20:23

Java序列化反序列化

2009-06-14 22:01:27

Java對象序列化反序列化

2011-04-02 13:47:01

2009-08-24 17:14:08

C#序列化

2011-07-06 17:07:08

筆記本技巧

2011-07-09 16:25:00

筆記本技巧

2023-12-26 07:26:07

Java序列化反序列化機制

2012-04-13 10:45:59

XML

2011-05-18 15:20:13

XML

2009-08-06 11:16:25

C#序列化和反序列化

2015-05-20 10:05:10

Ceph分布式文件系統(tǒng)序列化

2024-09-10 08:28:22

2022-07-26 12:18:05

Python編程語言列表解析式

2009-09-09 15:47:27

XML序列化和反序列化

2009-09-09 14:45:41

XML序列化和反序列化
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲一区久久久 | 欧美精品久久久 | 色爱区综合 | 91资源在线 | 成人欧美一区二区三区黑人孕妇 | 黄色大全免费看 | 国产精品一级 | 免费观看一区二区三区毛片 | 亚洲精品欧美一区二区三区 | 精品视频在线观看 | 久久精品国产99国产精品 | 午夜视频在线免费观看 | 狠狠伊人 | 国产精品久久久亚洲 | 91精品国产91久久久久久吃药 | se婷婷 | 欧美精品一区二区三区一线天视频 | 国产精品99久久久久久久久久久久 | 亚洲第一成年免费网站 | 欧美一区二区三区 | 国产精品日日做人人爱 | 97精品超碰一区二区三区 | 日本在线免费 | 91精品久久久久久久久 | 在线免费观看日本视频 | 国产又爽又黄的视频 | 精品视频亚洲 | 欧美一级片中文字幕 | 精品一区二区三区在线观看 | 高清欧美性猛交 | 99热国产在线播放 | 国产麻豆乱码精品一区二区三区 | 国产高清精品一区二区三区 | 91免费观看 | 天天射影院 | 一本综合久久 | 成人网av | 99在线精品视频 | 秋霞av国产精品一区 | 动漫www.被爆羞羞av44 | 国产精久久久久久久妇剪断 |