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 ...
随机推荐
- 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 ...
- iOS-SDWebImage的原理以及使用流程
SDWebImage 支持异步的图片下载+缓存,提供了 UIImageView+WebCacha 的 category,方便使用.SDWebImage加载图片的流程: 1. 入口 setImageWi ...
- Struts1文件上传
package org.zln.struts.domain; import org.apache.struts.upload.FormFile; /** * Created by sherry on ...
- BZOJ4399 魔法少女LJJ(线段树合并)
注意到只有增加点/合并的操作.这些操作都可以用线段树完成,于是线段树合并一发就好了.注意乘积大小直接比较肯定会炸,取个对数即可.数据中存在重边. #include<iostream> #i ...
- IIS注册asp.net4.0
1. 运行->cmd 2. cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319 3. aspnet_regiis.exe -i
- visio中相关设置-菜单视图
1.获取或设置窗口中页面的当前显示大小(缩放系数) Window.Zoom Dim dZoom As Double dZoom = m_Visio.Window.Zoom'获取显示比例 m_Visio ...
- POJ2396:Budget(带下界的网络流)
Budget Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 8946 Accepted: 3327 Special ...
- DSP投放进阶指南
- git学习,哇瑟说实话我想要的
1.Git 简介及安装Git是目前世界上最先进的分布式版本控制系统(没有之一).它的诞生也颇具传奇,Linux创始人Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!有兴趣的话, ...
- SynchronizationContext.Post方法 代替
http://www.codeproject.com/KB/threads/SynchronizationContext.aspx看吧,不好,就将就的看下我的吧,呵呵!(没有直接翻译,不过大概的思路相 ...