当前位置:   article > 正文

Django--视图集ViewSet_django viewset

django viewset

 

ViewSet主要通过继承ViewSetMixin来实现在调用as_view()时传入字典(如{'get':'list'})的映射处理工作。

常用的视图集父类

GenericViewSet  继承自GenericAPIViewViewSetMixin,在实现了调用as_view()时传入字典(如{'get':'list'})的映射处理工作的同时,还提供了GenericAPIView提供的基础方法,可以直接搭配Mixin扩展类使用。

  1. from rest_framework import mixins
  2. from rest_framework.viewsets import GenericViewSet
  3. class BookInfoViewSet(mixins.ListModelMixin,mixins.RetrieveModelMixin,GenericViewSet):
  4. """使用GenericViewSet实现返回列表和单一值"""
  5. # 指定序列化器
  6. serializer_class = BookInfoSerializer
  7. # 制定查询集
  8. queryset = BookInfo.objects.all()

url设置:

  1. url(r'^books/$', new_views.BookInfoViewSet.as_view({'get':'list'})),
  2. url(r'^books/(?P<pk>\d+)/$', new_views.BookInfoViewSet.as_view({'get':'retrieve'})),

执行结果:

 

 视图集中定义附加action动作

  1. def latest(self, request):
  2. """
  3. 返回最新的图书信息
  4. GET /books/latest
  5. """
  6. book = BookInfo.objects.latest('id')
  7. serializer = self.get_serializer(book)
  8. return Response(serializer.data)
  9. def read(self, request, pk):
  10. """
  11. 修改图书的阅读量数据
  12. PUT /books/<pk>/read/ 遵循REST设计风格的url命名方式
  13. """
  14. book = self.get_object()
  15. book.bread = request.data.get('read')
  16. book.save()
  17. serializer = self.get_serializer(book)
  18. return Response(serializer.data)

 url设置:

  1. url(r"^books/latest/$",new_views.BookInfoViewSet.as_view({'get':'latest'})),
  2. url(r"^books/(?P<pk>\d+)/read/$",new_views.BookInfoViewSet.as_view({'put':'read'})),

执行效果:

 read 路由发送put请求,第一次报错,我们将字典清空,添加'read':222 在刷新就成功了

 

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号