# 转载请留言联系

  • 子类视图:

视图 作用 方法 父类
ListAPIView 查询多条数据 get GenericAPIView
ListModelMixin
CreateAPIView 新增一条数据 post GenericAPIView
CreateModelMixin
RetrieveAPIView 查询一条数据 get GenericAPIView
RetrieveModelMixin
UpdateAPIView 修改一条数据 put,patch GenericAPIView
UpdateModelMixin
DestroyAPIView 删除一条数据 delete GenericAPIView
DestroyModelMixin
RetrieveUpdateAPIView 查询,更新一条数据 get,put,patch GenericAPIView
RetrieveModelMixin UpdateModelMixin
RetrieveUpdateDestroyAPIView 获取,更新,删除一条数据 get,put,patch,delete GenericAPIView
RetrieveModelMixin UpdateModelMixin DestroyModelMixin
  • 对比以及使用(GenericAPIView+五个拓展类 VS 子类视图)

1.GenericAPIView+五个拓展类

  1. class DepartmentListAPIView(ListModelMixin,CreateModelMixin,GenericAPIView):
  2.  
  3. queryset = Department.objects.all()
  4. serializer_class = DepartmentSerializer
  5.  
  6. def get(self,request):
  7. """查询多条数据"""
  8. return self.list(request)
  9.  
  10. def post(self,request):
  11. """新增一条数据"""
  12. return self.create(request)
  13.  
  14. class DepartmentDetailAPIView(RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,GenericAPIView):
  15.  
  16. queryset = Department.objects.all()
  17. serializer_class = DepartmentSerializer
  18.  
  19. def get(self,request,pk):
  20. """查询一条数据"""
  21. return self.retrieve(request,pk)
  22.  
  23. def post(self,request,pk):
  24. """修改部门"""
  25. return self.update(request,pk)
  26.  
  27. def delete(self,request,pk):
  28. """删除一个部门"""
  29. return self.destroy(request,pk)

2.子类视图

  1. class DepartmentListAPIView(ListAPIView,CreateAPIView):
  2. ”“”实现了查询多条数据和新增一条数据的功能"""
  3. queryset = Department.objects.all()
  4. serializer_class = DepartmentSerializer
  5.  
  6. class DepartmentDetailAPIView(RetrieveUpdateDestroyAPIView):
  7. """实现了查询一条数据、修改一条数据、删除一条数据的功能"""
  8. queryset = Department.objects.all()
  9. serializer_class = DepartmentSerializer

3.子类视图的源码分析

  1. # Concrete view classes that provide method handlers
  2. # by composing the mixin classes with the base view.
  3.  
  4. class CreateAPIView(mixins.CreateModelMixin,
  5. GenericAPIView):
  6. """
  7. Concrete view for creating a model instance.
  8. """
  9. def post(self, request, *args, **kwargs):
  10. return self.create(request, *args, **kwargs)
  11.  
  12. class ListAPIView(mixins.ListModelMixin,
  13. GenericAPIView):
  14. """
  15. Concrete view for listing a queryset.
  16. """
  17. def get(self, request, *args, **kwargs):
  18. return self.list(request, *args, **kwargs)
  19.  
  20. class RetrieveAPIView(mixins.RetrieveModelMixin,
  21. GenericAPIView):
  22. """
  23. Concrete view for retrieving a model instance.
  24. """
  25. def get(self, request, *args, **kwargs):
  26. return self.retrieve(request, *args, **kwargs)
  27.  
  28. class DestroyAPIView(mixins.DestroyModelMixin,
  29. GenericAPIView):
  30. """
  31. Concrete view for deleting a model instance.
  32. """
  33. def delete(self, request, *args, **kwargs):
  34. return self.destroy(request, *args, **kwargs)
  35.  
  36. class UpdateAPIView(mixins.UpdateModelMixin,
  37. GenericAPIView):
  38. """
  39. Concrete view for updating a model instance.
  40. """
  41. def put(self, request, *args, **kwargs):
  42. return self.update(request, *args, **kwargs)
  43.  
  44. def patch(self, request, *args, **kwargs):
  45. return self.partial_update(request, *args, **kwargs)
  46.  
  47. class ListCreateAPIView(mixins.ListModelMixin,
  48. mixins.CreateModelMixin,
  49. GenericAPIView):
  50. """
  51. Concrete view for listing a queryset or creating a model instance.
  52. """
  53. def get(self, request, *args, **kwargs):
  54. return self.list(request, *args, **kwargs)
  55.  
  56. def post(self, request, *args, **kwargs):
  57. return self.create(request, *args, **kwargs)
  58.  
  59. class RetrieveUpdateAPIView(mixins.RetrieveModelMixin,
  60. mixins.UpdateModelMixin,
  61. GenericAPIView):
  62. """
  63. Concrete view for retrieving, updating a model instance.
  64. """
  65. def get(self, request, *args, **kwargs):
  66. return self.retrieve(request, *args, **kwargs)
  67.  
  68. def put(self, request, *args, **kwargs):
  69. return self.update(request, *args, **kwargs)
  70.  
  71. def patch(self, request, *args, **kwargs):
  72. return self.partial_update(request, *args, **kwargs)
  73.  
  74. class RetrieveDestroyAPIView(mixins.RetrieveModelMixin,
  75. mixins.DestroyModelMixin,
  76. GenericAPIView):
  77. """
  78. Concrete view for retrieving or deleting a model instance.
  79. """
  80. def get(self, request, *args, **kwargs):
  81. return self.retrieve(request, *args, **kwargs)
  82.  
  83. def delete(self, request, *args, **kwargs):
  84. return self.destroy(request, *args, **kwargs)
  85.  
  86. class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin,
  87. mixins.UpdateModelMixin,
  88. mixins.DestroyModelMixin,
  89. GenericAPIView):
  90. """
  91. Concrete view for retrieving, updating or deleting a model instance.
  92. """
  93. def get(self, request, *args, **kwargs):
  94. return self.retrieve(request, *args, **kwargs)
  95.  
  96. def put(self, request, *args, **kwargs):
  97. return self.update(request, *args, **kwargs)
  98.  
  99. def patch(self, request, *args, **kwargs):
  100. return self.partial_update(request, *args, **kwargs)
  101.  
  102. def delete(self, request, *args, **kwargs):
  103. return self.destroy(request, *args, **kwargs)

实际上就是把(GenericAPIView+五个拓展类)的函数封装一下,return回去而已......

DRF最高封装的子类视图的更多相关文章

  1. DRF框架(五)——context传参,二次封装Response类,两个视图基类(APIView/GenericAPIView),视图扩展类(mixins),子类视图(工具视图),视图集(viewsets),工具视图集

    复习 1.整体修改与局部修改 # 序列化get (给前端传递参数) #查询 ser_obj = ModelSerializer(model_obj) #只传递一个参数,默认是instance的参数,查 ...

  2. drf请求、响应与视图

    目录 一.请求 1 定义 2 常用属性 1).data 2).query_params 二.响应 1 Response 2 构造方法 3 状态码 1)信息告知 - 1xx 2)成功 - 2xx 3)重 ...

  3. drf:restful概念,类继承关系,drf请求封装,drf请求流程,版本控制组件,认证组件(token),权限组件

    1.restful规范 resfful规范的概念最重要: 是一套规范,规则,用于程序之间进行数据交换的约定. 他规定了一些协议,对我们感受最直接的就是,以前写增删改查的时候需要些四个视图寒素,rest ...

  4. DRF Django REST framework 之 视图组件(四)

    引言 在我们有几十上百的视图类,都有get,post等方法,在功能类似时,会导致大量的重复代码出现,显然还有很多可以优化的地方.这也就有了视图组件,它的功能非常强大,能很好的优化接口逻辑. 视图组件 ...

  5. 二次封装 Reponse,视图家族

    复习 """ 1.整体修改与局部修改 # 序列化 ser_obj = ModelSerializer(model_obj) # 反序列化,save() => cre ...

  6. drf(请求封装/认证/权限/节流)

    1.请求的封装 class HttpRequest(object): def __init__(self): pass @propery def GET(self): pass @propery de ...

  7. 二.drf之使用序列化编写视图

    总结:两功能序列化: a.拿到queryset --->idc = Idc.objects.all() b.将queryset给序列化成类---->serializer = IdcSeri ...

  8. DRF终极封装ViewSet和Router附教程PDF源码

    在DRF官方教程的学习过程中,一个很明显的感受是框架在不断地进行封装,我们自己写框架/工具/脚本/平台也可以模仿模仿,先完成底层代码,再做多层封装,让使用者很容易就上手操作.本文是教程的最后一篇,介绍 ...

  9. DRF的封装:APIView类及五大模块

    目录 一.drf框架的封装特点 1.APIView类 二.drf的基础组件 1.请求模块 1.1 请求模块做了什么 1.2 请求request参数 2.解析模块 3.响应模块 4.渲染模块(了解) 5 ...

随机推荐

  1. POJ 3177 Redundant Paths & POJ 3352 Road Construction(双连通分量)

    Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...

  2. iOS-SDWebImage的原理以及使用流程

    SDWebImage 支持异步的图片下载+缓存,提供了 UIImageView+WebCacha 的 category,方便使用.SDWebImage加载图片的流程: 1. 入口 setImageWi ...

  3. Struts1文件上传

    package org.zln.struts.domain; import org.apache.struts.upload.FormFile; /** * Created by sherry on ...

  4. BZOJ4399 魔法少女LJJ(线段树合并)

    注意到只有增加点/合并的操作.这些操作都可以用线段树完成,于是线段树合并一发就好了.注意乘积大小直接比较肯定会炸,取个对数即可.数据中存在重边. #include<iostream> #i ...

  5. IIS注册asp.net4.0

    1. 运行->cmd 2. cd  C:\Windows\Microsoft.NET\Framework64\v4.0.30319 3. aspnet_regiis.exe -i

  6. visio中相关设置-菜单视图

    1.获取或设置窗口中页面的当前显示大小(缩放系数) Window.Zoom Dim dZoom As Double dZoom = m_Visio.Window.Zoom'获取显示比例 m_Visio ...

  7. POJ2396:Budget(带下界的网络流)

    Budget Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 8946   Accepted: 3327   Special ...

  8. DSP投放进阶指南

  9. git学习,哇瑟说实话我想要的

    1.Git 简介及安装Git是目前世界上最先进的分布式版本控制系统(没有之一).它的诞生也颇具传奇,Linux创始人Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!有兴趣的话, ...

  10. SynchronizationContext.Post方法 代替

    http://www.codeproject.com/KB/threads/SynchronizationContext.aspx看吧,不好,就将就的看下我的吧,呵呵!(没有直接翻译,不过大概的思路相 ...