zoukankan      html  css  js  c++  java
  • 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())
        
      • 如图

  • 相关阅读:
    #ifdef的用法
    修改WordPress中上传附件2M大小限制的方法/php+iis上传附件默认大小修改方法
    没有找到libufun.lib,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。
    JAVA安卓和C# 3DES加密解密的兼容性问题
    使用 Repeater 控件,每隔N条数据输出另外的格式
    Forms表单登陆,动态获取web.config里面的cookies配置
    SQL Server中索引使用及维护
    动态绑定easyui datagrid列名
    Spring Hibernate多数据源配置
    SSH异常处理
  • 原文地址:https://www.cnblogs.com/wuxiaoshi/p/11980537.html
Copyright © 2011-2022 走看看