日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
DRF中的模型序列化到底該怎么用?

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

創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)品牌建設(shè)與網(wǎng)絡(luò)營(yíng)銷,包括成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、SEO優(yōu)化、網(wǎng)絡(luò)推廣、整站優(yōu)化營(yíng)銷策劃推廣、電子商務(wù)、移動(dòng)互聯(lián)網(wǎng)營(yíng)銷等。創(chuàng)新互聯(lián)公司為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制及解決方案,創(chuàng)新互聯(lián)公司核心團(tuán)隊(duì)10年專注互聯(lián)網(wǎng)開(kāi)發(fā),積累了豐富的網(wǎng)站經(jīng)驗(yàn),為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設(shè)服務(wù),在網(wǎng)站建設(shè)行業(yè)內(nèi)樹(shù)立了良好口碑。

1. 前言

大家好,我是安果!

接下來(lái),將通過(guò)幾篇文章將對(duì) DRF 模型序列化進(jìn)行展開(kāi)說(shuō)明,詳情談?wù)勀P托蛄谢淖饔?、步驟及進(jìn)階用法

2. 模型序列化的作用?

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

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

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

  • 表單驗(yàn)證

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

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

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

3. 表單字段驗(yàn)證

指定需要序列化的字段時(shí),可以設(shè)置字段類型、默認(rèn)值、可讀或可寫(xiě)、驗(yàn)證錯(cuò)誤提示信息等,然后針對(duì)表單字段進(jìn)行驗(yàn)證

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

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

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

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

3-2 重寫(xiě) validate( self , attrs ) 方法進(jìn)行驗(yàn)證

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

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

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

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

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

單獨(dú)針對(duì)某個(gè)字段進(jìn)行驗(yàn)證

比如,我們還是對(duì) name 字段進(jìn)行驗(yàn)證,如果驗(yàn)證不通過(guò),主動(dòng)拋出「 serializers.ValidationError 」異常即可

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

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

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

這里重寫(xiě) 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.     # 注意:自動(dòng)生成的字段,只會(huì)涉及讀取的場(chǎng)景 
  4.     id = serializers.IntegerField(read_only=True) 
  5.  
  6.     # error_messages:定義錯(cuò)誤信息 
  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)于模型序列化、序列化嵌套、項(xiàng)目實(shí)戰(zhàn)中流程,我將在下一篇文章進(jìn)行說(shuō)明。


網(wǎng)站題目:DRF中的模型序列化到底該怎么用?
文章位置:http://www.5511xx.com/article/copsopo.html