DRF mixins 的常用方法

DRF mixins 常用的操作

  • GenericAPIView

    • 继承自APIVIew,增加了对于列表视图和详情视图可能用到的通用支持方法,queryset为列表视图的查询集,serializer_class为视图使用的序列化器

    • 代码块

      class TeacherView(ListModelMixin,GenericAPIView):
          queryset = models.Teacher.objects.all()
          serializer_class = TeacherSerializer
      
  • ListModelMixin

    • 列表视图扩展类,提供list(request, *args, ** kwargs)方法快速实现列表视图,返回200状态码,该Mixin的list方法会对数据进行过滤和分页

    • serializers.py

      # 老师类的序列化
      class TeacherSerializer(serializers.ModelSerializer):
          class Meta:
              model = models.Teacher
              fields = '__all__'
      
    • views.py

      class TeacherView(ListModelMixin,GenericAPIView):
          queryset = models.Teacher.objects.all()
          serializer_class = TeacherSerializer
          def get(self,request,*args,**kwargs):
              return self.list(request,*args,**kwargs)
      
    • urls.py

      path('teacher/',views.TeacherView)
      
    • 如图

  • UpdateModelMixin

    • 更新视图扩展类,提供update(request, *args, **kwargs)方法,可以快速实现更新一个存在的数据对象。
      同时也提供partial_update(request, *args, **kwargs)方法,可以实现局部更新。
      成功返回200,序列化器校验数据失败时,返回400错误。

    • serializers.py

      # 老师类的序列化
      class TeacherSerializer(serializers.ModelSerializer):
        	name = serializers.CharField(max_length=32)
          class Meta:
              model = models.Teacher
              fields = '__all__'
      
    • views.py

      class TeacherOtherView(GenericAPIView,UpdateModelMixin):
        	queryset = models.Teacher.objects.all()
          serializer_class = TeacherSerializer
          
          def put(request,*args,**kwargs):
            	return self.update(request,*args,**kwargs)
      
    • urls.py

      re_path(r'teacher/(?P<pk>\d+)/$',views.TeacherOtherView.as_view())
      
    • 如图

  • DestroyModelMixin

    • 删除视图扩展类,提供destroy(request, *args, **kwargs)方法,可以快速实现删除一个存在的数据对象。成功返回204,不存在返回404

    • serializers.py

      class TeacherSerializer(serializers.ModelSerializer):
          class Meta:
              model = models.Teacher
              fields = '__all__'
      
    • views.py

      class TeacherOtherView(GenericAPIView,DestroyModelMixin):
        	queryset = models.Teacher.objects.all()
          serializer_class = TeacherSerializer
          
          def delete(request,*args,**kwargs):
            	return self.destroy(request,*args,**kwargs)
      
    • urls.py

      re_path(r'teacher/(?P<pk>\d+)/$',views.TeacherOtherView.as_view())
      
    • 如图

  • RetrieveModelMixin

    • 详情视图扩展类,提供retrieve(request, *args, **kwargs)方法,可以快速实现返回一个存在的数据对象。如果存在,返回200, 否则返回404

    • serializers.py

      class TeacherSerializer(serializers.ModelSerializer):
          class Meta:
              model = models.Teacher
              fields = '__all__'
      
    • views.py

      class TeacherOtherView(GenericAPIView,RetrieveModelMixin):
          queryset = models.Teacher.objects.all()
          serializer_class = TeacherSerializer
      
          def get(self,request,*args,**kwargs):
              return self.retrieve(request,*args,**kwargs)
      
    • urls.py

      re_path(r'teacher/(?P<pk>\d+)/$',views.TeacherOtherView.as_view())
      
      • 如图
  • CreateModelMixin

    • 创建视图扩展类,提供create(request, *args, **kwargs)方法快速实现创建资源的视图,成功返回201状态码。如果序列化器对前端发送的数据验证失败,返回400错误。

    • serializers.py

      # 老师类的序列化
      class TeacherSerializer(serializers.ModelSerializer):
          name = serializers.CharField(max_length=32)
          class Meta:
              model = models.Teacher
              fields = '__all__'
      
    • views.py

      class TeacherView(GenericAPIView,CreateModelMixin):
        	queryset = models.Teacher.objects.all()
          serializer_class = TeacherSerializer
          # 添加数据
          def post(self,request,*args,**kwargs):
            	return self.create(request,*args,**kwargs)
      
    • urls.py

      path('teacher/',views.TeacherView.as_view())
      
    • 如图

posted @   巫小诗  阅读(700)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示