classStudentSerializer(serializers.Serializer):
name = serializers.CharField(max_length=8,required=True)
age = serializers.IntegerField(max_value=120,required=True)
sex = serializers.IntegerField(default=1)
#validate_name函数名中的name必现为定义的字段名,attr参数可以接收该字段名传入的值defvalidate_name(self,attr):
if attr == "老王":
raise serializers.ValidationError('隔壁老王不能进')
#不管在校验什么字段,都需要将数据返回,不然后续不能获取到数据return attr
2.单字段校验(方式二)
from rest_framework import serializers
#该函数名可以自己随意定义def chick_class_name(data):ifdata == "老王":
raise serializers.ValidationError('隔壁老王不行')
#不管在校验什么字段,都需要将数据返回,不然后续不能获取到数据
return dataclassStudentSerializer(serializers.Serializer):
name = serializers.CharField(max_length=8,required=True,validators=[chick_class_name]) #将自己定义的函数名,传入要校验字段的validators属性中
age = serializers.IntegerField(max_value=120,required=True)
sex = serializers.IntegerField(default=1)
3.多字段校验
from rest_framework import serializers
classStudentSerializer(serializers.Serializer):
name = serializers.CharField(max_length=8,required=True)
age = serializers.IntegerField(max_value=120,required=True)
sex = serializers.IntegerField(default=1)
defvalidate_name(self,attr):
if attr == "老王":
raise serializers.ValidationError('隔壁老王不能进')
#不管在校验什么字段,都需要将数据返回,不然后续不能获取到数据return attr
#预留的钩子函数,会将传入的数据获取,用参数attrs接收,通过字典的方式,可以取到里面的任意字段defvalidate(self, attrs):
if attrs.get('name') == "张三"and attrs.get('age') == 26:
raise serializers.ValidationError('26岁的张三不能进')
#不管在校验什么字段,都需要将数据返回,不然后续不能获取到数据return attrs
二.视图函数示例代码,views.py
from django.views import View
from django.http import HttpResponse
from unsers.serializers import StudentSerializer
import json
# Create your views here.classStudentView(View):
#在发送POST请求的时候,记得先关闭一下CRSF中间件defpost(self,request):
data = json.loads(request.body)
#将序列化的数据传入定义的反序列化类中,用data参数接收#'django.middleware.csrf.CsrfViewMiddleware', 在settings中注释掉该中间件就可以了#模拟post请求,可以用postman
serializers = StudentSerializer(data=data)
if serializers.is_valid():# is_valid(),可以进行数据校验,校验通过返回True,失败返回Falseprint(serializers.data) #无论验证是否通过,都会返回一个普通字典print(serializers.validated_data) #验证通过,返回一个有序字典,验证失败,返回一个空字典return HttpResponse("验证成功")
else:
print(serializers.errors) #验证失败,返回错误字段和错误信息return HttpResponse("验证失败")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通