视图

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):

只需要很简单的几行代码就实现了增删改查,其中ListModelMixinCreateModelMixin是不需要传递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框架--视图相关推荐

  1. DRF (Django REST framework) 框架介绍

    Web应用模式 在开发Web应用中,有两种应用模式: 前后端不分离 前后端分离 1 前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控 ...

  2. flask框架视图和路由_角度视图,路由和NgModule的解释

    flask框架视图和路由 Angular vs AngularJS (Angular vs AngularJS) AngularJS (versions 1.x) is a JavaScript-ba ...

  3. .Net 初步学习笔记之一——.Net 平台与.Net FrameWork框架的关系

    .Net 包含两部分 .Net平台 和.Net FrameWork 框架 1..Net FrameWork框架包含于.Net平台. .Net FrameWork提供环境和支撑保证.Net平台运行. 2 ...

  4. php excel 组件,Yii Framework框架使用PHPExcel组件的方法示例

    本文实例讲述了Yii Framework框架使用PHPExcel组件的方法.分享给大家供大家参考,具体如下: PHPExcel下载地址http://www.yiiframework.com/exten ...

  5. ASP.NET之.NET FrameWork框架

    .NET FrameWork框架 是一套应用程序开发框架,主要目的提供一个开发模型. 主要的两个组件: 公共语言运行时(Common Language Runtime)(CLR): 提供内存管理.线 ...

  6. 请问如何把.net framework框架集成在安装程序里头?

    请问如何把.net framework框架集成在安装程序里头? 大家都知道在没有framework框架的机子上是无法运行.net编写的软件的 虽然把编写的软件做成安装软件在没有框架的机子上要安装时会自 ...

  7. DRF (Django REST framework) 框架介绍(3)

    DRF中的Request 与 Response 1. Request REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST fra ...

  8. Django框架——视图

    目录 Request Response APIView(一级视图) GenericAPIView(二级视图) Mixin 子类视图(三级视图) 路由Router Request REST framew ...

  9. php行为和事件是什么,Yii Framework框架中事件和行为的区别及应用实例分析

    本文实例讲述了Yii Framework框架中事件和行为的区别及应用.分享给大家供大家参考,具体如下: 个人觉得,在 Yii 里面,最难以明白的就是事件(Event)和行为(behavior)了.这不 ...

最新文章

  1. linux脚本命令顺序执行命令,linux – nohup多个顺序命令
  2. 使用ORM数据库:greenDao
  3. glusterfs java_GlusterFS分布式文件系统使用简介
  4. sql server高可用_SQL Server 2019常规可用性和安装概述
  5. JAVA_if或者怎么用_Java条件语句if的使用方法介绍
  6. GitHub上下载源代码的方法
  7. 初出茅庐的小李第55篇博客之ESP32点亮WS2812B彩灯
  8. 数据挖掘之航空公司客户价值分析
  9. 那种片里的马赛克,终于可以一键去除了。
  10. 为什么10M、20M的宽带只有大约1、2M的下载速度——网速KB/s与Kbps(Kb/s)的区别
  11. 我的世界服务器额外植物学bug修复,[1.12.2-1.7.10][AnotherCommonBugFix——通用Bug修复]——可修复服务器常见的BUG...
  12. 2021年秋招简历:张宁宁-硕士-苏州大学-信息与通信工程
  13. UltraEdit发布了Linux版-UEX
  14. 京东获得JD商品详情 API 返回值说明
  15. couchdb无法访问5984端口问题
  16. 机智云无需代码就能搞定IoT小程序开发和管理
  17. 《进程隐藏》:DLL挟持实现进程隐藏
  18. 【游戏开发实战】使用Unity制作水果消消乐游戏教程(八):游戏得分加分效果
  19. windows 7 中刻录系统光盘
  20. 【169期】面试官问:说说为什么要限流,有哪些解决方案?

热门文章

  1. Oracle 删除分区 导致索引失效
  2. linux命令 scp怎么用,linux系统中scp命令怎么使用
  3. KEIL各版本镜像和STM的KeilPACK包下载
  4. 关于网站推广的一些建议
  5. 虚拟化技术 hyper-v
  6. 运筹优化相关公众号的超级好的资料
  7. 12帧跑步动画分解图_画出人物跑步的动画运动规律,并上传动画效果视频和逐帧图片。...
  8. 计算机编程怎样打符号,在CAD中如何输入一些特殊符号?比如乘除、符号.
  9. 备忘录-团队选题报告
  10. 泰勒公式矩阵形式_泰勒公式,雅可比矩阵,海塞矩阵,牛顿法