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

原文地址:https://www.cnblogs.com/Lucifer77/p/10522390.html