中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django?restframework序列化字段校驗規則是什么

發布時間:2022-06-01 09:31:56 來源:億速云 閱讀:247 作者:zzz 欄目:開發技術

這篇文章主要介紹“django restframework序列化字段校驗規則是什么”,在日常操作中,相信很多人在django restframework序列化字段校驗規則是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”django restframework序列化字段校驗規則是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一、怎么校驗創建的項目名是否是唯一的,當項目名name字段不唯一,怎么設置提示信息?

class ProjectsSerializer(serializers.Serializer):
    create_time=serializers.DateTimeField(label='創建時間',help_text='創建時間',
                                          format='%Y年%m月%d日 %H時%M分%S秒',read_only=True)
    update_time = serializers.DateTimeField(label='更新時間', help_text='更新時間',
                                            format='%Y年%m月%d日 %H時%M分%S秒', read_only=True)
    name=serializers.CharField(label='項目名稱',help_text='項目名詞',
                               max_length=20,min_length=3,
                               error_messages={'min_length':'項目名稱不能少于3位',
                                               'max_length':'項目名稱不能大于20'},
                               validators=[UniqueValidator(queryset=Projects.objects.all(),message='項目名稱不能重復')])

????tip1:校驗規則

1、可以在序列化器字段上使用validators指定自定義校驗規則
2、validators必須得為序列類型(一般為列表),在列表中可以添加多個校驗規則
3、DRF框架自帶UniqueValidator校驗器,必須得使用queryset指定查詢集對象,用于對該字段進行校驗
4、UniqueValidator校驗器,可以使用message指定自定義報錯信息
5、校驗規則的執行順序?
先對字段類型進行校驗(CharField)——》依次驗證validators列表中的校驗規則——》從右到左依次驗證其他規則——》調用單字段校驗方法(如果有定義)

二、項目名稱中必須得包含“項目”2字

def is_contains_keyword(value):
	is '項目' not in value:
		raise serializers.ValidationError("項目名稱中必須包含'項目'關鍵字")

class ProjectsSerializer(serializers.Serializer):
    create_time=serializers.DateTimeField(label='創建時間',help_text='創建時間',
                                          format='%Y年%m月%d日 %H時%M分%S秒',read_only=True)
    update_time = serializers.DateTimeField(label='更新時間', help_text='更新時間',
                                            format='%Y年%m月%d日 %H時%M分%S秒', read_only=True)
    name=serializers.CharField(label='項目名稱',help_text='項目名詞',
                               max_length=20,min_length=3,
                               error_messages={'min_length':'項目名稱不能少于3位',
                                               'max_length':'項目名稱不能大于20'},
                               validators=[UniqueValidator(queryset=Projects.objects.all(),message='項目名稱不能重復'),is_contains_keyword])

tip2:校驗規則

1、可以在類外面自定義校驗函數
2、第一個參數為待校驗的值(name)
3、如果校驗不通過,必須得拋出serializers.ValidationError(‘報錯信息’)異常,同時可以指定具體得報錯信息
4、需要將校驗函數名放置到某一個字段的 validators列表中(不加括號)

django?restframework序列化字段校驗規則是什么

三、單個字段進行校驗:項目名稱不能多于10個字

def is_contains_keyword(value):
	is '項目' not in value:
		raise serializers.ValidationError("項目名稱中必須包含'項目'關鍵字")

class ProjectsSerializer(serializers.Serializer):
    create_time=serializers.DateTimeField(label='創建時間',help_text='創建時間',
                                          format='%Y年%m月%d日 %H時%M分%S秒',read_only=True)
    update_time = serializers.DateTimeField(label='更新時間', help_text='更新時間',
                                            format='%Y年%m月%d日 %H時%M分%S秒', read_only=True)
    name=serializers.CharField(label='項目名稱',help_text='項目名詞',
                               max_length=20,min_length=3,
                               error_messages={'min_length':'項目名稱不能少于3位',
                                               'max_length':'項目名稱不能大于20'},
                               validators=[UniqueValidator(queryset=Projects.objects.all(),message='項目名稱不能重復'),is_contains_keyword])
	class Meta:
        model=Projects
        fields='__all__'
    
    def validate_name(self,attr:str):
    	if len(attr)>10:
    		raise serializers.ValidationError('項目名稱不能多于10個字')
    	return attr

????tip3:校驗規則

1、可以在序列化器類中對單個字段進行校驗
2、但字段得校驗方法名稱,必須把validate_作為前綴,加上待校驗得字段名,如:validate_待校驗得字段名
3、如果校驗不通過必須得返回serializers.ValidationError(‘具體得報錯信息’)
4、如果校驗通過,往往將校驗之后得值返回
5、如果該字段在定義時添加得校驗規則不通過,那么是不會進行單字段校驗的;如果能對單字段進行校驗說明上面是校驗通過的。
6、必須返回attr(當然如果不返回attr也不會報錯)

四、多字段進行校驗:

class RegisterModelSerializer(serializers.ModelSerializer):
    password_confirm = serializers.CharField(label='確認密碼', help_text='確認密碼',
                                             error_messages={"min_length": "允許輸入5-20個字符",
                                                             "max_length": "允許輸入5-20個字符", },
                                             write_only=True)
    token = serializers.CharField(label='token', help_text='token', read_only=True)

    class Meta:
        model = User
        fields = ['id', 'username', 'password', 'password_confirm', 'token', 'email']

    # 校驗密碼與驗證碼密碼
    def validate(self, attrs):
        password=attrs.get('password')
        password=attrs.get('password_confirm')
        if password!=password_confirm:
        	raise serializers.ValidationError('密碼和確認密碼不一致')
        return attrs

tip4:校驗規則

1、可以在序列化器類中對多個字段進行聯合校驗
2、使用固定得validate方法,會接受上面校驗通過之后得字典數據
3、當所有字段定義時添加的校驗規則都通過,并且每個字典得單字段校驗通過得情況下,才會調用validate方法
4、必須返回attrs

五、to_internal_value方法,是所有字段開始進行校驗時的入口方法(最先調用的方法)

class InterfacesSerializer(serializers.ModelSerializer):
	project=serializer.StringRelatedField(label='接口所屬項目',help_text='接口所屬項目',read_only=True)
	project_id=serializer.PrimaryKeyRelatedField(label='接口所屬項目id',help_text='接口所屬項目id',queryset=Projects.objects.all(),write_only=True)
	
	class Meta:
		model=Interfaces
		fields=['id','name','tester','project','create_time','desc','project_id']
		#exclude=['update_time']
		extra_kwargs={
			"create_time":{
				"read_only":True,
				"format":"%Y年%m月%d日 %H:%M:%S",
				}
		}
	

	def to_internal_value(self,data):
		result=super().to_intrenal_value(data)
		result['project_id']=result.get('project_id').id
		return result

六、to_representation方法,是序列化輸出的入口方法

校驗順序為:首先對字段類型進行校驗——》依次驗證validators列表中的校驗規則——》從右到左驗證其他的校驗規則——》調用單字段校驗方法(如果有定義)——》調用多字段聯合調用validate方法

到此,關于“django restframework序列化字段校驗規則是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

九寨沟县| 崇州市| 南靖县| 余江县| 翁源县| 金华市| 四平市| 和硕县| 西乌| 泰和县| 石棉县| 南昌市| 高邑县| 平度市| 开封县| 永平县| 府谷县| 绥化市| 安龙县| 景谷| 绥阳县| 盐亭县| 工布江达县| 云和县| 安达市| 广灵县| 阳东县| 三门峡市| 石棉县| 兰溪市| 西充县| 青海省| 时尚| 屯留县| 汪清县| 晋中市| 乌什县| 新化县| 达拉特旗| 邵阳县| 新晃|