DRF--------序列化器Serializer--数据校验1

Serializer功能:

       1、序列化:序列化器将模型对象转成字典,经过视图的respnose后转成json字符串

       2、反序列化:视图中的request将客户端发过来的数据转成字典,序列化把字典转成模型

       3、反序列化:对客户端发送过来的数据,完成数据校验

很重要,因为几乎每个接口都要用到。

一、定义序列化器

        序列化器需要使用类定义,并且这个类必须直接或者简介继承rest_framework.serializers.Serializer

        最常用的序列化器基类:

        Serializer:所有序列化器的基类

        ModelSerializer:模型类序列化器基类 

from rest_framework import serializers

class StudentSerializer(serializers.Serializer):
        # 1.需要转换的字段声明  提供给客户端的
        id=serializers.IntegerField()
        name=serializers.CharField()
        sex=serializers.BooleanField()

        # 2.声明调用的模型类(如果继承的是ModelSerializer,才需要声明)
        class Mate:
            model=模型
            field="__all__"
            field=["字段1","字段2",....]

        # 3.验证方法
        def validate(self,attrs):
            '''
            validate: 方法的格式必须是这个
            attrs: 客户端传递的数据  字典格式
            '''
            pass
            return attrs
        def validate_<字段名>(self,data):
            '''
            validate: 方法的格式必须是这个
            attrs: 客户端传递的数据  字典格式
            '''
            pass
            return data
        
        # 4.模型操作
        def create(self,validate_data):添加数据操作,添加数据后,就自动实现了从字典变成模型对象的过程
            pass
        def update(self,validate_data):更新数据操作,更新数据后,就自动实现了从字典变成模型对象的过程
            pass
    

      注意: Serializer并不是只对数据库模型类的数据进行转换数据格式,也可以为非数据库模型类的数据定义,是独立于数据库之外的存在

案例1:Serializer功能1:请求数据校验

1.创建序列化器&&应用

'''
序列化器:Serializer
两大功能: 请求数据校验、对数据库查询到的对象进行序列化
'''

'''
Serializer功能一:数据校验
对客户端的请求数据进行校验

'''
# 1.定义序列化器
from rest_framework import serializers
from rest_framework import exceptions
class StudentSerializer(serializers.Serializer):
    # 请求数据校验: 客户端需要提交以下格式的数据
    name=serializers.CharField(max_length=32,label='姓名')
    sex2=serializers.ChoiceField(label='性别2',choices=Students.age_choices)
    age=serializers.IntegerField(label='年龄')
    classmate=serializers.CharField(label='班级',max_length=10)
    email1=serializers.EmailField(label='邮箱1')                                   # 邮箱验证方式1
    # email2=serializers.CharField(label='邮箱2',validators=[自定义邮箱验证方法(),])   # 邮箱验证方式2
    email3=serializers.CharField(label='邮箱3')                                    # 邮箱验证方法3:钩子函数

    def validate_email3(self,value):
        '''钩子函数,用于验证某个字段'''
        if re.match(f"^\w+@\w+\.\w+$",value):
            return value
        raise exceptions.ValidationError("邮箱格式错误!")

# 2.视图中使用序列化器
class StudentsView(APIView):

    def post(self,request):
        # ①引用自定义的序列化器,并传入请求数据
        # request.data:获取请求体中的数据
        ser=StudentSerializer(data=request.data,)
        # ②序列化器验证请求数据
        # ser.is_valid(): 进行序列化中的数据校验
        if ser.is_valid():
            return Response({"code":2000,"message":"数据校验成功!","data":ser.validated_data})
        else:
            return Response({"code":1001,"detail":ser.errors})

2.postman模拟发送请求数据

        ①请求数据符合序列化器的校验规则

      ② 请求数据不符合序列化器的校验规则

 

 如果想要返回的提示是中文,可在settings中设置:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值