DRF最高封装的子类视图
# 转载请留言联系
子类视图:
| 视图 | 作用 | 方法 | 父类 | 
|---|---|---|---|
| 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+五个拓展类
class DepartmentListAPIView(ListModelMixin,CreateModelMixin,GenericAPIView):
    queryset = Department.objects.all()
    serializer_class = DepartmentSerializer
    def get(self,request):
        """查询多条数据"""
        return self.list(request)
    def post(self,request):
        """新增一条数据"""
        return self.create(request)
class DepartmentDetailAPIView(RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,GenericAPIView):
    queryset = Department.objects.all()
    serializer_class = DepartmentSerializer
    def get(self,request,pk):
        """查询一条数据"""
        return self.retrieve(request,pk)
    def post(self,request,pk):
        """修改部门"""
        return self.update(request,pk)
    def delete(self,request,pk):
        """删除一个部门"""
        return self.destroy(request,pk)
2.子类视图
class DepartmentListAPIView(ListAPIView,CreateAPIView):
”“”实现了查询多条数据和新增一条数据的功能"""
queryset = Department.objects.all()
serializer_class = DepartmentSerializer class DepartmentDetailAPIView(RetrieveUpdateDestroyAPIView):
"""实现了查询一条数据、修改一条数据、删除一条数据的功能"""
queryset = Department.objects.all()
serializer_class = DepartmentSerializer
3.子类视图的源码分析
# Concrete view classes that provide method handlers
# by composing the mixin classes with the base view. class CreateAPIView(mixins.CreateModelMixin,
GenericAPIView):
"""
Concrete view for creating a model instance.
"""
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs) class ListAPIView(mixins.ListModelMixin,
GenericAPIView):
"""
Concrete view for listing a queryset.
"""
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs) class RetrieveAPIView(mixins.RetrieveModelMixin,
GenericAPIView):
"""
Concrete view for retrieving a model instance.
"""
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs) class DestroyAPIView(mixins.DestroyModelMixin,
GenericAPIView):
"""
Concrete view for deleting a model instance.
"""
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs) class UpdateAPIView(mixins.UpdateModelMixin,
GenericAPIView):
"""
Concrete view for updating a model instance.
"""
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs) def patch(self, request, *args, **kwargs):
return self.partial_update(request, *args, **kwargs) class ListCreateAPIView(mixins.ListModelMixin,
mixins.CreateModelMixin,
GenericAPIView):
"""
Concrete view for listing a queryset or creating a model instance.
"""
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs) def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs) class RetrieveUpdateAPIView(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
GenericAPIView):
"""
Concrete view for retrieving, updating a model instance.
"""
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs) def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs) def patch(self, request, *args, **kwargs):
return self.partial_update(request, *args, **kwargs) class RetrieveDestroyAPIView(mixins.RetrieveModelMixin,
mixins.DestroyModelMixin,
GenericAPIView):
"""
Concrete view for retrieving or deleting a model instance.
"""
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs) def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs) class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
GenericAPIView):
"""
Concrete view for retrieving, updating or deleting a model instance.
"""
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs) def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs) def patch(self, request, *args, **kwargs):
return self.partial_update(request, *args, **kwargs) def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
实际上就是把(GenericAPIView+五个拓展类)的函数封装一下,return回去而已......
DRF最高封装的子类视图的更多相关文章
- DRF框架(五)——context传参,二次封装Response类,两个视图基类(APIView/GenericAPIView),视图扩展类(mixins),子类视图(工具视图),视图集(viewsets),工具视图集
		
复习 1.整体修改与局部修改 # 序列化get (给前端传递参数) #查询 ser_obj = ModelSerializer(model_obj) #只传递一个参数,默认是instance的参数,查 ...
 - drf请求、响应与视图
		
目录 一.请求 1 定义 2 常用属性 1).data 2).query_params 二.响应 1 Response 2 构造方法 3 状态码 1)信息告知 - 1xx 2)成功 - 2xx 3)重 ...
 - drf:restful概念,类继承关系,drf请求封装,drf请求流程,版本控制组件,认证组件(token),权限组件
		
1.restful规范 resfful规范的概念最重要: 是一套规范,规则,用于程序之间进行数据交换的约定. 他规定了一些协议,对我们感受最直接的就是,以前写增删改查的时候需要些四个视图寒素,rest ...
 - DRF Django REST framework 之 视图组件(四)
		
引言 在我们有几十上百的视图类,都有get,post等方法,在功能类似时,会导致大量的重复代码出现,显然还有很多可以优化的地方.这也就有了视图组件,它的功能非常强大,能很好的优化接口逻辑. 视图组件 ...
 - 二次封装 Reponse,视图家族
		
复习 """ 1.整体修改与局部修改 # 序列化 ser_obj = ModelSerializer(model_obj) # 反序列化,save() => cre ...
 - drf(请求封装/认证/权限/节流)
		
1.请求的封装 class HttpRequest(object): def __init__(self): pass @propery def GET(self): pass @propery de ...
 - 二.drf之使用序列化编写视图
		
总结:两功能序列化: a.拿到queryset --->idc = Idc.objects.all() b.将queryset给序列化成类---->serializer = IdcSeri ...
 - DRF终极封装ViewSet和Router附教程PDF源码
		
在DRF官方教程的学习过程中,一个很明显的感受是框架在不断地进行封装,我们自己写框架/工具/脚本/平台也可以模仿模仿,先完成底层代码,再做多层封装,让使用者很容易就上手操作.本文是教程的最后一篇,介绍 ...
 - DRF的封装:APIView类及五大模块
		
目录 一.drf框架的封装特点 1.APIView类 二.drf的基础组件 1.请求模块 1.1 请求模块做了什么 1.2 请求request参数 2.解析模块 3.响应模块 4.渲染模块(了解) 5 ...
 
随机推荐
- week12第二轮迭代任务分配forZ.XML
			
Z.XML第二轮迭代任务初步分配新鲜出炉,请关注! 以上便是任务分配列表,队员们会按照进度每天更改任务进度 当然,根据敏捷开发的方法,我们将在开发过程中根据情况迅速调整任务分配,以适应当时问题. Z- ...
 - Ubuntu desktop基本操作
			
2018-03-03 11:48:52 ubuntu16 lts 更换源,系统安装的时候可以跳过语言包的安装 打开software & updates应用,Other software选项页, ...
 - 基于log4j的消息流的实现之一消息获取
			
需求: 目前的程序中都是基于log4j来实现日志的管理,想要获取日志中的一部分消息,展示给用户. 约束: 由于程序中除了自己开发的代码,还会有层层依赖的第三方jar中的日志输出.需要展示给用户的消息, ...
 - JavaScript内置对象常用
			
Math 提供了数学中常用的属性和方法,使用时直接用Math.属性/方法,而不需要new一个Math对象 Date 使用Date对象来对日期和时间进行操作.使用时,必须用new创建一个实例 windo ...
 - RadioGroup和GroupBox有什么区别?
			
我在RadioGroup中放RadioButton和GroupBox中一样,搞不明白. radiogroup有个item属性都是radio控件,不需要拖控件上去.groupbox需要自己拖控件 分组的 ...
 - bzoj3011 可并堆
			
我们可以遍历得出每个节点到根节点的距离h,然后用可并堆进行维护.树形dp 我用的是pairing heap #include<cstdio> #include<algorithm&g ...
 - BZOJ2257 [Jsoi2009]瓶子和燃料  【裴蜀定理】
			
题目链接 BZOJ2257 题解 由裴蜀定理我们知道,若干的瓶子如此倾倒最小能凑出的是其\(gcd\) 现在我们需要求出\(n\)个瓶子中选出\(K\)个使\(gcd\)最大 每个数求出因数排序即可 ...
 - git config文件总结及git alias配置
			
1. 文件位置 mac /etc/.gitconfig 系统级~/.gitconifg 用户级(覆盖系统级) windows C:\Users\$user\.gitconfig 当前项目下 .git/ ...
 - JS Cookie相关操作
			
function setCookie(cookieName, cookieValue, expires) { // 设置Cookie function getCookieName(cookieName ...
 - 【可持久化线段树?!】rope史上最全详解
			
https://www.luogu.org/problemnew/show/P3919 看到上面链接中的题时,我在学会可持久化线段树的同时,第一次学会了一个非常屌(cai)的STL大法——rope!! ...