DRF 自定义序列化检验

序列化检验

目的:减少原生Django在数据校验的繁琐,直接在子应用中新建serializers.py 封装序列化器重写序列化器特定名称方法,针对特定名称方法来自定义校验。

要求:在自定义校验之前,需要前序的约束条件校验类型校验,保证当前校验的值有效

(以图书类中的btitile字段为例)

需求1: 检验前端数据传过来的数据是一本是否关于Django的书

方法1:在序列化器类BookInfoSerializer(serializers.Serializer)中重写check_btitile(value)方法

# value 是btitle字段经过前序校验的值
def check_btitile(value):
	# 判断django字符 是否出现在 btitle 字段的值中
	if "django" not in value:
		# 如果不在,则校验失败,抛出异常
		raise serializers.ValidationErroe("这不是一本关于django的书")
		

需求2: 检验前端数据传过来的数据是一本是否关于Django的书

方法2:在序列化器类BookInfoSerializer(serializers.Serializer)中重写validate_<被校验字段名>(self,value)方法

def validate_btitle(self,value):
	# value:btitle 字段经过前序校验的值
	# return: 经过当前校验的当前字段的值
	if "django" not in value:
		raise serializers.ValidationError("这不是一本关于django的书")
		return raise
		# 一定要返回字段的有效值,如果不返回会造成当前字段的数据丢失

需求3:全字段检验

方法3:在序列化器类BookInfoSerializer(serializers.Serializer)中重写validate(self,arrts)方法

def validate(self,attrs):
	# attrs:当前校验所有字段及其值
	# return:返回的最终的有效数据 就是Validated_data
	btitle =attrs.get("btitile")
	if "django" not in btitle:
		raise serializer.ValidationError("这不是一本关于django的书")
		return attrs
		# attrs 最终有效数据 如果不返回就会丢失最终有效数据
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值