首页 > 其他分享 >Drf视图集合

Drf视图集合

时间:2022-08-28 14:55:48浏览次数:48  
标签:GenericAPIView get detail 视图 集合 方法 路由 Drf

1.背景:

       技术储备,drf适合前后端分离项目,比较适合单表操作的业务,另外丰富的视图集合配合路由自动生成,开发速度能得到极大的提升。

 

2、视图分类:

         2.1:视图超类:         

                    from rest_framework.views import APIView     

                   from rest_framework.generics import GenericAPIView

               

APIView 继承与原生的Django的view,重写了as_view 和 dispatch方法
GenericAPIView 继承与APIView,提供了三个属性(queryset、serializer_class、lookup_field)以及三个方法(get_queryset、get_serializer、get_obj)

 

         2.2:视图工具类(mixin):

                 此工具类需要配合 GenericAPIView 不能单独使用,需要在视图中重写 get、post等方法

                 from rest_framework import mixins

CreateModelMixin 单增工具类——实现create方法
ListModelMixin 群查工具类——实现list方法
RetrieveModelMixin 单查工具类——实现retrieve方法
UpdateModelMixin 单整体局部改工具类——实现update方法
DestoryModelMixin 单删工具类——实现destory方法

        

 

        2.3:工具视图类(generics):

                其实继承与 GenericAPIView、 mixin(子类),由于mixin的子类不能单独使用,需要配合 GenericAPIView,等于是GenericAPIView任意组合了mixin子类,并且重写了实现方法(可能一对一,可能一对多),共9个

序号
类名
备注
1
CreateAPIView
创建数据,对应post,只实现了CreateModelMixin.create方法
2
ListAPIView
查询全部数据,对应get,只实现了ListModelMixin.list方法
3
DestroyAPIView
删除数据,对应delete,只实现了DestoryModelMixin.destory 方法
4
UpdateAPIView
更新数据,对应put,只是实现了 UpdateModelMixin.update 方法
5
RetrieveAPIView
查询单条数据,对应get,只是实现了RetrieveModelMixin.retrieve 方法
6
RetrieveUpdateAPIView
对应 get、put,实现了 4--5
7
ListCreateAPIView
对应 get、post,实现了 1--2
8
RetrieveDestroyAPIView
对应 get、delete,实现了 5--3
9
RetrieveUpdateDestroyAPIView
对应 get、delete,put ,实现了 5--3--4

 

          2.4:视图集合 

                   from rest_framework.views import ModelViewSet

                   ModelViewSet    视图大集合 实际上继承了mixins 以及 GenericViewSet ,GenericViewSet不等于 GenericAPIView,GenericViewSet实际继承了 ViewSetMixin 然后这个类重写了as_view方法,直接或者间接继承ViewSetMixin必须指定action 例如as_VIEW({"get":"get_all"})

class ActionModeViewSetDemo(ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookModelSerializer

    # detail 只有 true 和false 2种 detail =True 则生成路径中带 pk 的 否则生成正常的
    # 在路由中生成 并且 detail是false
    #     ^booksaction/get_all/$ [name='booksviewset-get-all']
    #     ^booksaction/get_all\.(?P<format>[a-z0-9]+)/?$ [name='booksviewset-get-all']

    @action(methods=["get","post"],detail=False)
    def get_all(self,request):
        book = self.get_queryset()[:2]
        ser = self.get_serializer(book,many=True)
        return Response({"code":100,"msg":"success","result":ser.data})


    # detail = True 则生成带pk的
    # booksaction/(?P<pk>[^/.]+)/get_b/$ [name='booksaction-get-b']
    @action(methods=["get"],detail=True)
    def get_b(self,request,pk):
        book = self.get_queryset()
        ser = self.get_serializer(book,many=True)
        if int(pk) > 0:
            return Response({"code": 100, "msg": "success", "result": ser.data})

  路由配置

router = routers.DefaultRouter()
router.register('booksaction',ap01view.ActionModeViewSetDemo)

  

3、路由:

       drf 框架中 提供了2种路由    DefaultRouter、SimpleRouter,区别就是DefaultRouter 会生成更多的路由,并且会生成根路由,SimpleRouter 只有 2种 

       注(生成的路由并不等于需要被调用的方法 get、post等)

       SimpleRouter 

       

 

         

 

 

        DefaultRouter:

 

 

 

                            

 

标签:GenericAPIView,get,detail,视图,集合,方法,路由,Drf
From: https://www.cnblogs.com/yuan-x/p/16632763.html

相关文章

  • 集合.List子接口
    特点:有序、有下标、元素可以重复方法:voidadd(intindex,Objecto);在index位置插入对象obooleanaddAll(intindex,Collectionc);将一个集合中的元素添加到此元素中......
  • javascript(一) Array对象, Object对象, this关键字,短路操作,Set集合,Map集合和String字
    javascript基础1,主要写(==和===的区别),Array对象,Object对象,this关键字,短路操作,Set集合,Map集合和String字符串操作。1.==,===1.===在js中需要值相等类型相等......
  • 集合
    1、创建集合创建集合使用{}或set(),但是如果要创建空集合只能使用set(),因为{}用来创建空字典。特点:1.集合可以去掉重复数据;2.集合数据是无序的......
  • Flask 学习-22.可插拨视图MethodView类
    前言可插拨视图基于使用类来代替函数,其灵感来自于Django的通用视图。可插拨视图的主要用途是用可定制的、可插拨的视图来替代部分实现。基本原理假设有一个函数用于......
  • Java学习-第一部分-第二阶段-第五节:集合
    集合笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html)前面我们保存多个数据使用的是数组,那么数组有不足的地方,我们分析一下。●数组长度开始时必须指定......
  • java如何实现对List集合进行分页
    对List集合进行分页:private<T>Page<T>listToPage(List<T>dataList,IntegerpageSize,IntegerpageNumber){Page<T>result=newPage<T>();List<T>monit......
  • 集合分区和文件分区
    切分计划set[0,6)123456[6,13)78910111213[13,20)14151617181920[floor((n-1)*(N/P)),floor(n*N/P))file[0,6] 1,2,3,4[7,12] 5,6......
  • java学习笔记015 集合
    1.集合Collection List 有序,可重复 Set 无序,不可重复Map key<==>value2.Collection接口通用的方法 boolean add(Ee) boolean addAll(Collectioncoll) int......
  • day27--Java集合10
    Java集合1021.集合家庭作业21.1Homework01按要求实现:封装一个新闻类,包括标题和内容属性,提供get、set方法,重写toString方法,打印对象时只打印标题;只提供一个带参数......
  • python基础-set集合,深浅拷贝
    python基础-set集合,深浅拷贝  一.基础数据类型补充补充给一个字符串基本操作 列表:循环删除列表中的每一个元素 分析原因:for的运行过程.会有一个......