赞
踩
ViewSet主要通过继承ViewSetMixin来实现在调用as_view()时传入字典(如{'get':'list'}
)的映射处理工作。
常用的视图集父类
GenericViewSet 继承自GenericAPIView
与ViewSetMixin
,在实现了调用as_view()时传入字典(如{'get':'list'}
)的映射处理工作的同时,还提供了GenericAPIView
提供的基础方法,可以直接搭配Mixin扩展类使用。
- from rest_framework import mixins
- from rest_framework.viewsets import GenericViewSet
- class BookInfoViewSet(mixins.ListModelMixin,mixins.RetrieveModelMixin,GenericViewSet):
- """使用GenericViewSet实现返回列表和单一值"""
-
- # 指定序列化器
- serializer_class = BookInfoSerializer
- # 制定查询集
- queryset = BookInfo.objects.all()
url设置:
- url(r'^books/$', new_views.BookInfoViewSet.as_view({'get':'list'})),
- url(r'^books/(?P<pk>\d+)/$', new_views.BookInfoViewSet.as_view({'get':'retrieve'})),
执行结果:
-
- def latest(self, request):
- """
- 返回最新的图书信息
- GET /books/latest
- """
- book = BookInfo.objects.latest('id')
- serializer = self.get_serializer(book)
- return Response(serializer.data)
-
- def read(self, request, pk):
- """
- 修改图书的阅读量数据
- PUT /books/<pk>/read/ 遵循REST设计风格的url命名方式
- """
- book = self.get_object()
- book.bread = request.data.get('read')
- book.save()
- serializer = self.get_serializer(book)
- return Response(serializer.data)

url设置:
- url(r"^books/latest/$",new_views.BookInfoViewSet.as_view({'get':'latest'})),
- url(r"^books/(?P<pk>\d+)/read/$",new_views.BookInfoViewSet.as_view({'put':'read'})),
执行效果:
read 路由发送put请求,第一次报错,我们将字典清空,添加'read':222 在刷新就成功了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。