5 Django REST Framework 开发 ---- DRF API 之间的关系与对比

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

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

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

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

GenericAPIView  + 一个或多个(CreateModelMixin, ListModelMixin, UpdateModelMixin, DestoryModelMixin, RetrievModelMixin)

生成了 ListAPIView, CreateAPIView, RetrieveAPIView, DestoryAPIView, UpdateAPIView,ListCreateAPIView, RetireveUpdateAPIView, RetrieveDestoryAPIView, RetrieveUpdateDestoryAPIView

使用这些类时不需要继承 ModelMixin 中的类来实现 action,也不需要继承 GenericAPIView,因为他们的父类就是 GenericAPIView。与 ViewSet 不同的是 这些继承 GenericAPIView 和 ModelMixin 的类不能使用 Router 注册 URL。

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

某类 class MyViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): 由于GenericViewSet不包括 action, 所以需要配合 ModelMixin 使用,这样配置也可直接使用 Router

或者直接调用现成的高级类:ModelViewSet 或 ReadOnlyModelViewSet 也可达到类似效果

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

 

需手写 queryset,

serializer,

Pagination

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

自定义 handler 方法

如 get, post 等

父类        
View Yes No No No Yes -
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)

猜你喜欢

转载自www.cnblogs.com/crazy-chinese/p/9828144.html