rest framework框架--视图
视图
GenericAPIView
# 路由
re_path(r'^(?P<version>[v1|v2]+)/api1/$', views.API1View.as_view(), name='api1')# 视图
from rest_framework.generics import GenericAPIView
class API1View(GenericAPIView):queryset = models.Role.objects.all()serializer_class = RolesSerializerspagination_class = MyPageNumberPaginationdef get(self, request, *args, **kwargs):# 获取数据roles = self.get_queryset() # 等价于models.Role.objects.all()# 分页pager_ser = self.paginate_queryset(roles)# 序列化ser = self.get_serializer(instance=pager_ser, many=True)return Response(ser.data)
和继承了APIView
的写法来说,没有什么优点可以说,一般没有什么用处。
GenericViewSet
继承class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
,有事会先找左侧的类ViewSetMinin
。
# 路由
re_path(r'^(?P<version>[v1|v2]+)/api1/$', views.API1View.as_view({'get': 'list'}), name='api1')# 视图
from rest_framework.viewsets import GenericViewSet
class API1View(GenericViewSet):queryset = models.Role.objects.all()serializer_class = RolesSerializerspagination_class = MyPageNumberPaginationdef list(self, request, *args, **kwargs):# 获取数据roles = self.get_queryset() # 等价于models.Role.objects.all()# 分页pager_ser = self.paginate_queryset(roles)# 序列化ser = self.get_serializer(instance=pager_ser, many=True)return Response(ser.data)
此时,不在根据request.method的不同来执行不同的方法了,而是在as_view()中传递参数来指定请求方法和类中方法的对应关系。as_view({'get': 'list'})
表示get方法执行API1View
中的list
方法。
Mixin系列
这个系列帮我们完成了增删改查功能,我们只需要继承就可以了
# 路由
re_path(r'^(?P<version>[v1|v2]+)/api1/$', views.API1View.as_view({'get': 'list'}), name='api1')# 视图
from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import ListModelMixin
class API1View(ListModelMixin, GenericViewSet):queryset = models.Role.objects.all()serializer_class = RolesSerializerspagination_class = MyPageNumberPagination
ModelViewSet
集大成者,其继承了class ModelViewSet(mixins.CreateModelMixin, mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, mixins.ListModelMixin, GenericViewSet):
只需要很简单的几行代码就实现了增删改查,其中ListModelMixin
和CreateModelMixin
是不需要传递id,其他的都需要传递id,所以对url是有要求的,必须传递pk的值。
# 路由
re_path(r'^(?P<version>[v1|v2]+)/api1/$', views.API1View.as_view({'get': 'list', 'post': 'create'}), name='api1'),
re_path(r'^(?P<version>[v1|v2]+)/api1/(?P<pk>\d+)$', views.API1View.as_view({'get': 'retrieve', 'delete': 'destroy', 'put': 'update', 'patch': 'partial_update'}), name='api1')# 视图
from rest_framework.viewsets import ModelViewSet
class API1View(ModelViewSet):queryset = models.Role.objects.all()serializer_class = RolesSerializerspagination_class = MyPageNumberPagination
总结
- 只想用基本的增删改查,用ModelViewSet
- 只想用增删,用CreateModelMixin,DestroyModelMixin,GenericViewSet
- 要完成复杂的逻辑,用GenericViewSet或APIView
rest framework框架--视图相关推荐
- DRF (Django REST framework) 框架介绍
Web应用模式 在开发Web应用中,有两种应用模式: 前后端不分离 前后端分离 1 前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控 ...
- flask框架视图和路由_角度视图,路由和NgModule的解释
flask框架视图和路由 Angular vs AngularJS (Angular vs AngularJS) AngularJS (versions 1.x) is a JavaScript-ba ...
- .Net 初步学习笔记之一——.Net 平台与.Net FrameWork框架的关系
.Net 包含两部分 .Net平台 和.Net FrameWork 框架 1..Net FrameWork框架包含于.Net平台. .Net FrameWork提供环境和支撑保证.Net平台运行. 2 ...
- php excel 组件,Yii Framework框架使用PHPExcel组件的方法示例
本文实例讲述了Yii Framework框架使用PHPExcel组件的方法.分享给大家供大家参考,具体如下: PHPExcel下载地址http://www.yiiframework.com/exten ...
- ASP.NET之.NET FrameWork框架
.NET FrameWork框架 是一套应用程序开发框架,主要目的提供一个开发模型. 主要的两个组件: 公共语言运行时(Common Language Runtime)(CLR): 提供内存管理.线 ...
- 请问如何把.net framework框架集成在安装程序里头?
请问如何把.net framework框架集成在安装程序里头? 大家都知道在没有framework框架的机子上是无法运行.net编写的软件的 虽然把编写的软件做成安装软件在没有框架的机子上要安装时会自 ...
- DRF (Django REST framework) 框架介绍(3)
DRF中的Request 与 Response 1. Request REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST fra ...
- Django框架——视图
目录 Request Response APIView(一级视图) GenericAPIView(二级视图) Mixin 子类视图(三级视图) 路由Router Request REST framew ...
- php行为和事件是什么,Yii Framework框架中事件和行为的区别及应用实例分析
本文实例讲述了Yii Framework框架中事件和行为的区别及应用.分享给大家供大家参考,具体如下: 个人觉得,在 Yii 里面,最难以明白的就是事件(Event)和行为(behavior)了.这不 ...
最新文章
- linux脚本命令顺序执行命令,linux – nohup多个顺序命令
- 使用ORM数据库:greenDao
- glusterfs java_GlusterFS分布式文件系统使用简介
- sql server高可用_SQL Server 2019常规可用性和安装概述
- JAVA_if或者怎么用_Java条件语句if的使用方法介绍
- GitHub上下载源代码的方法
- 初出茅庐的小李第55篇博客之ESP32点亮WS2812B彩灯
- 数据挖掘之航空公司客户价值分析
- 那种片里的马赛克,终于可以一键去除了。
- 为什么10M、20M的宽带只有大约1、2M的下载速度——网速KB/s与Kbps(Kb/s)的区别
- 我的世界服务器额外植物学bug修复,[1.12.2-1.7.10][AnotherCommonBugFix——通用Bug修复]——可修复服务器常见的BUG...
- 2021年秋招简历:张宁宁-硕士-苏州大学-信息与通信工程
- UltraEdit发布了Linux版-UEX
- 京东获得JD商品详情 API 返回值说明
- couchdb无法访问5984端口问题
- 机智云无需代码就能搞定IoT小程序开发和管理
- 《进程隐藏》:DLL挟持实现进程隐藏
- 【游戏开发实战】使用Unity制作水果消消乐游戏教程(八):游戏得分加分效果
- windows 7 中刻录系统光盘
- 【169期】面试官问:说说为什么要限流,有哪些解决方案?