class View(object):
这是 Django 原生的视图类,会根据 http 请求的方法,执行相应的函数
以下的类都是来自 django rest framework:
class APIView(View):
比 View 多定义了认证类、权限类、节流类等
class GenericAPIView(views.APIView):
仅仅是比 APIView 多定了如下类变量: queryset serializer_class pagination_class
和一些使用这些类变量的方法 get_object get_serializer get_serializer_class paginate_queryset 等
实际上并不比 APIView 先进多少
url(r'^publishes/$', views.PublishView.as_view()),
url(r'^publishes/(?P<pk>\d+)/$', views.PublishDetailView.as_view()),
class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
主要进步的地方在其父类 ViewSetMixin 重写了 as_view 方法,
同时就需要在写路由时的 .as_view() 的参数中 加上 {'get':'list', 'post':'creat'}
结论:只要视图类继承了 GenericViewSet 或 其子类,就需要在写路由时给 as_view函数指定参数
class ModelViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
GenericViewSet):
比 GenericViewSet 进步的意义是继承了好多个 minin , 可以天然的避开一个model表分成两个视图的问题
url(r'^books/$', views.BookViewSet.as_view({"get":"list","post":"create"}),name="book_list"),
url(r'^books/(?P<pk>\d+)$', views.BookViewSet.as_view({'get': 'retrieve', 'put': 'update',
'patch': 'partial_update', 'delete': 'destroy'}),name="book_detail"),
Django and DRF CBV 视图类
最新推荐文章于 2022-03-29 14:12:12 发布