博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5 Django REST Framework 开发 ---- DRF API 之间的关系与对比
阅读量:6933 次
发布时间:2019-06-27

本文共 1819 字,大约阅读时间需要 6 分钟。

由于Django REST Framework API 文档不是太详细,市场上又缺乏具有深度的书籍,导致在学习过程中因为不同 View 的使用经常搞混其功能。反复思量之后,做了下面的 Matrix 来区分这些类之间的关系与功能。

a) 首先要弄清楚 View 的继承关系从高到低继承为:

  GenericViewSet(DRF) 继承 GenericAPIView(DRF) 继承 APIView(DRF) 继承 View (Django 原生) 

b) 其次为了实现特定的 Actions 这些 Views 与 Mixin 类实现了多重继承,形成了如下 APIView 和 ViewSet 类:

  GenericAPIView  + 一个或多个(CreateModelMixin, ListModelMixin, UpdateModelMixin, DestoryModelMixin, RetrievModelMixin)生成了 ListAPIView, CreateAPIView, RetrieveAPIView, DestoryAPIView, UpdateAPIView,ListCreateAPIView, RetireveUpdateAPIView, RetrieveDestoryAPIView, RetrieveUpdateDestoryAPIView 使用这些类时不需要继承 ModelMixin 中的类来实现 action,也不需要继承 GenericAPIView,因为他们的父类就是 GenericAPIView。

c) 与 ViewSet 不同的是:

  这些 only 继承 GenericAPIView 和 ModelMixin 的类不能使用 Router 注册 URL。

d) GenericViewSet 以及继承了它的类,可以直接使用 Router 来注册 URL,比如:

  某类 class MyViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): 由于GenericViewSet不包括 action, 所以需要配合 ModelMixin 使用,这样配置也可直接使用 Router 或者直接调用现成的高级类:ModelViewSet 或 ReadOnlyModelViewSet 也可达到类似效果

e) 在功能迷惑时查下面表格即可了解如何使用这些类

 

需手写 queryset,

serializer,

Pagination

需手动绑定 Action 需与Minxin配合使用 可否通过Router注册

自定义 handler 方法

如 get, post 等

父类        
View Yes No No No Yes Object
APIView Yes No No No Yes View 
GenericAPIView No Yes/No Yes No Yes/No APIView

ListAPIView

CreateAPIView
RetrieveAPIView
DestoryAPIView
UpdateAPIView
ListCreateAPIView
RetireveUpdateAPIView
RetrieveDestoryAPIView
RetrieveUpdateDestoryAPIView

No No No No No

GenericAPIView +
1 or more
(CreateModelMixin,
ListModelMixin,
UpdateModelMixin,
DestoryModelMixin,
RetrievModelMixin)

GenericViewSet No No Yes Yes No GenericAPIView

ModelViewSet

ReadOnlyModelViewSet

No No No Yes No

GernericViewSet +

1 or more
(CreateModelMixin,
ListModelMixin,
UpdateModelMixin,
DestoryModelMixin,
RetrievModelMixin)

转载于:https://www.cnblogs.com/crazy-chinese/p/9828144.html

你可能感兴趣的文章
linux 历史(histroy)命令记录过滤
查看>>
APACHE 安装出错 configure: error: Cannot use an external APR with the bundled APR-util
查看>>
PHP性能调优,PHP慢日志---PHP脚本执行效率性能检测之WebGrind的使用
查看>>
linux工具之curl与wget高级使用
查看>>
FFmpeg Installation for Ubuntu
查看>>
mysql中表名不区分大小写
查看>>
理解Docker——深入引擎室
查看>>
讨论Linux目录结构
查看>>
LINUX开启SNMP方法
查看>>
shell-变量的数值计算
查看>>
php-fpm的pool、php-fpm慢执行日志、open_basedir、php-fpm进程管理
查看>>
centos6.8安装 gitlab 9.3.5及使用
查看>>
字符转换指令tr,col,expand
查看>>
Egret之位图字体
查看>>
python安装MySQLdb出错解决方案
查看>>
Unable to find remote helper for 'https'解决办法
查看>>
kvm使用详解
查看>>
javascript的正则表达式
查看>>
zabbix3.2.6.1升级3.4.4图文心得
查看>>
PL/SQL子程序
查看>>