zoukankan      html  css  js  c++  java
  • restful规范和Django restful framework

    ---恢复内容开始---

    序列化的三种方式:

    --values + JsonResponse

    --django.core.serializers + HttpResponse

    -- DRF实现序列化

       -- 第一步声明序列化器

       -- 第二步使用我们的序列化器序列化queryset

       -- 序列好的数据在ser_obj.data里边、

      --无法序列化的数据丢弃

    -- 外键关系的序列化是嵌套的序列化器对象

      注意many=True

    -- 反序列化post请求

       --  确定新增的数据结构

     -- 序列化器

           -- 正序反序字段不统一

      -- required=False 只序列化不走校验

      -- read_only=True 只序列化用

      -- write_only=True 只反序列化用

    -- 反序列化 put/patch 请求

      -- 重写update方法

      -- ser_obj=BudgetModelSerializer(instance=budget_obj,data=request.data,partial=True)

    --验证

     -- 单个字段的验证

      def  validate_字段名称(self,value):

        不通过raise serializers.ValidationError('错误信息')

        通过 return value

    --多个字段验证

      def validate(self,attrs):

        attrs是所有字段组成的字典

    -- 自定义

      def my_validate(value):

        配置 -- 给字段加validators=[my_validate]

    ---ModelSerializer

      -- class Meta:

      model = 表名

      fields = "__all__"

      depth = 1

      extra_kwargs={{默认字段:{参数:值}},}

    -- SerializerMethodField()

      def get_字段名称(self,obj):

        obj 每次序列化的模型对象

        return 自定义的数据

    视图组件:

      -- 第一次封装

       

    GenericAPIView(APIView):      
            queryset = None
            serializer_class= None      
            def get_queryset(self):        
                  return self.queryset.all()
       def  get_serializer(self):
                  return self.serializer_class(*args,**kwargs)   
    class ListModelMixin(object):
        queryset=Budget.object.all()
        serializer_class=BudgetModelSerializer
               def list(self,request,*args,**kwargs)    
                 queryset=self.get_queryset()
                     serializer = self.get_serializer(queryset,many=True)
                     return Response(serializer.data)    

    --第二次封装 方便继承

    --第三次封装 ViewSetMixin 重新as_view方法

        -- 在 ViewSetMixin 执行self.dispatch()方法之前

          把self.get = self.list

    ---恢复内容结束---

    序列化的三种方式:

    --values + JsonResponse

    --django.core.serializers + HttpResponse

    -- DRF实现序列化

       -- 第一步声明序列化器

       -- 第二步使用我们的序列化器序列化queryset

       -- 序列好的数据在ser_obj.data里边、

      --无法序列化的数据丢弃

    -- 外键关系的序列化是嵌套的序列化器对象

      注意many=True

    -- 反序列化post请求

       --  确定新增的数据结构

     -- 序列化器

           -- 正序反序字段不统一

      -- required=False 只序列化不走校验

      -- read_only=True 只序列化用

      -- write_only=True 只反序列化用

    -- 反序列化 put/patch 请求

      -- 重写update方法

      -- ser_obj=BudgetModelSerializer(instance=budget_obj,data=request.data,partial=True)

    --验证

     -- 单个字段的验证

      def  validate_字段名称(self,value):

        不通过raise serializers.ValidationError('错误信息')

        通过 return value

    --多个字段验证

      def validate(self,attrs):

        attrs是所有字段组成的字典

    -- 自定义

      def my_validate(value):

        配置 -- 给字段加validators=[my_validate]

    ---ModelSerializer

      -- class Meta:

      model = 表名

      fields = "__all__"

      depth = 1

      extra_kwargs={{默认字段:{参数:值}},}

    -- SerializerMethodField()

      def get_字段名称(self,obj):

        obj 每次序列化的模型对象

        return 自定义的数据

    视图组件:

      -- 第一次封装

       

    GenericAPIView(APIView):      
            queryset = None
            serializer_class= None      
            def get_queryset(self):        
                  return self.queryset.all()
       def  get_serializer(self):
                  return self.serializer_class(*args,**kwargs)   
    class ListModelMixin(object):
        queryset=Budget.object.all()
        serializer_class=BudgetModelSerializer
               def list(self,request,*args,**kwargs)    
                 queryset=self.get_queryset()
                     serializer = self.get_serializer(queryset,many=True)
                     return Response(serializer.data)    

    --第二次封装 方便继承

    --第三次封装 ViewSetMixin 重新as_view方法

        -- 在 ViewSetMixin 执行self.dispatch()方法之前

          把self.get = self.list

  • 相关阅读:
    bind 与Eval的区别
    GDI+
    文件读写
    “六度分离”和 洪泛(Search flooding)搜索
    Internet streaming 现在谁是霸主?
    苹果提供高清HD下载SO贵
    关于Youtube 的平均文件尺寸与GFS
    [笔记+整理]随机网络和无标度网络
    2008年中国广播电视广告额增长超15%
    笔记:Mobile CDN 和IPTV CDN有哪些不同
  • 原文地址:https://www.cnblogs.com/Lucifer77/p/10522390.html
Copyright © 2011-2022 走看看