zoukankan      html  css  js  c++  java
  • 内部类,drf响应类,序列化与反序列化

    内部类

    # 概念:将类定义在一个类的内部,被定义的类就是内部类
    # 特点:内部类及内部类的所以名称空间,可以直接被外部类访问的
    # 应用:通过内部类的名称空间,给外部类额外拓展一些特殊的属性(配置),典型的Meta内部类 - 配置类
    
    class Book(model.Model):
        class Meta:
            db_model = "owen_book"  # 配置自定义表名
            
    class BookSerializer(serializers.ModelSerializer):
        class Meta:
            model = "Book"  # 配置序列化类绑定的Model表
    

    DRF响应类:Response

    """
    def __init__(self, data=None, status=None, template_name=None, headers=None, 								exception=False, content_type=None):
        pass
        
    data:响应的数据 - 空、字符串、数字、列表、字段、布尔
    status:网络状态码
    template_name:drf说自己也可以支持前后台不分离返回页面,但是不能和data共存(不会涉及)
    headers:响应头(不用刻意去管)
    exception:是否是异常响应(如果是异常响应,可以赋值True,没什么用)
    content_type:响应的结果类型(如果是响应data,默认就是application/json,所有不用管)
    """
    
    # 常见使用
    Response(
        data={
            'status': 0,
            'msg': 'ok',
            'result': '正常数据'
        }
    )
    
    Response(
        data={
            'status': 1,
            'msg': '客户端错误提示',
        },
    	status=status.HTTP_400_BAD_REQUEST,
    	exception=True
    )
    

    序列化基类控制的初始化参数

    """
    def __init__(self, instance=None, data=empty, **kwargs):
        pass
    
    instance:是要被赋值对象的 - 对象类型数据赋值给instance
    data:是要被赋值数据的 - 请求来的数据赋值给data
    kwargs:内部有三个属性:many、partial、context
        many:操作的对象或数据,是单个的还是多个的
        partial:在修改需求时使用,可以将所有校验字段required校验规则设置为False
        context:用于视图类和序列化类直接传参使用
    """
    
    # 常见使用
    # 单查接口
    UserModelSerializer(instance=user_obj)
    
    # 群查接口
    UserModelSerializer(instance=user_query, many=True)
    
    # 增接口
    UserModelSerializer(data=request.data)
    
    # 整体改接口
    UserModelSerializer(instance=user_obj, data=request.data)
    
    # 局部改接口
    UserModelSerializer(instance=user_obj, data=request.data, partial=True)
    
    # 删接口,用不到序列化类
    

    反序列化

    views.py

    class UserAPIView(APIView):
        def post(self, request, *args, **kwargs):
            # 单增
            # 1)将前台请求的数据交给序列化类处理
            # 2)序列化类执行校验方法,对前台提交的所有数据进行数据校验:校验失败就是异常返回,成功才能继续
            # 3)序列化组件完成数据入库操作,得到入库对象
            # 4)响应结果给前台
            serializer = serializers.UserModelSerializer(data=request.data)
            if serializer.is_valid():
                # 校验成功 => 入库 => 正常响应
                obj = serializer.save()
                return Response({
                    'status': 0,
                    'msg': 'ok',
                    'result': '新增的那个对象'
                }, status=status.HTTP_201_CREATED)
            else:
                # 校验失败 => 异常响应
                return Response({
                    'status': 1,
                    'msg': serializer.errors,
                }, status=status.HTTP_400_BAD_REQUEST)
    

    serializers.py

    """
    标注:序列化 => 后台到前台(读)  |  反序列化 => 前台到后台(写)
    1)不管是序列化还是反序列化字段,都必须在fields中进行声明,没有声明的不会参与任何过程(数据都会被丢弃)
    
    2)用 read_only 表示只读,用 write_only 表示只写,不标注两者,代表可读可写
    
    3)
    i)自定义只读字段,在model类中用@property声明,默认就是read_only
    @property
    def gender(self):
    	return self.get_sex_display()
    	
    ii)自定义只写字段,在serializer类中声明,必须手动明确write_only
    re_password = serializers.CharField(write_only=True)
    
    特殊)在serializer类中声明,没有明确write_only,是对model原有字段的覆盖,且可读可写
    password = serializers.CharField()
    
    4)用 extra_kwargs 来为 写字段 制定基础校验规则(了解)
    
    5)每一个 写字段 都可以用局部钩子 validate_字段(self, value) 方法来自定义校验规则,成功返回value,失败抛出 exceptions.ValidationError('异常信息') 异常
    
    6)需要联合校验的 写字段们,用 validate(self, attrs) 方法来自定义校验规则,,成功返回attrs,失败抛出 exceptions.ValidationError({'异常字段': '异常信息'}) 异常
    
    7)extra_kwargs中一些重要的限制条件
    	i)'required':代表是否必须参与写操作,有默认值或可以为空的字段,该值为False;反之该值为True;也可以手动修改值
    """
    
    """
    开发流程:
    1)在model类中自定义 读字段,在serializer类中自定义 写字段
    2)将model自带字段和所以自定义字段书写在fields中,用write_only和read_only区别model自带字段
    3)可以写基础校验规则,也可以省略
    4)制定局部及全局钩子
    """
    
  • 相关阅读:
    Spring Security 自动装配
    Mysql学习
    java 学习路线(bilibili)
    Mac上配置idea的项目上传到GitHub
    vim安装自动补全插件
    spring aop 获取request、response对象
    centos7配置本地yum源 使用安装镜像安装软件
    eclipse启动速度优化
    spring-mvc springboot 使用MockMvc对controller进行测试
    java web 验证码-字符变形(推荐)
  • 原文地址:https://www.cnblogs.com/godlover/p/12333784.html
Copyright © 2011-2022 走看看