第一步: from rest_framework import viewsets
1. viewsets是REST framework中非常重要的一个view, 里面包含了许多的viewset, 见下图
2.首先要介绍的就是ViewSetMixin, (action属性是给View加的)
3. 接着介绍我们要使用的 GenericViewSet, 以下是其源码, 可见GenericViewSet没有做其它事情, 仅仅是封装了普通的 generic view 和 ViewSetMixin
4. 有了上面的了解, 接下来就开始写我们的view函数, 注意这已经是第四种商品列表页的view的写法了
goods.view.py
from rest_framework import viewsets # 非常重要的一个view集合 # 方式四: 使用viewset (viewSet + routers 是固定搭配) # GenericViewSet方法并没有对请求方式进行处理, 所以需要继承ListModelMixin, 以方便使用其封装的list函数 class GoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet): """ 商品列表页 """ queryset = Goods.objects.all() serializer_class = GoodsSerializer pagination_class = GoodsPagination # 需要指定分页的类
urls.py
from goods.views import GoodsListViewSet goods_list = GoodsListViewSet.as_view({ 'get': 'list', # get绑定到list上, 可以理解为view中方式二的 "return self.list(request, *args, **kwargs)" # 'post': 'create' # psot绑定到create上, 这里我们用不上 }) urlpatterns = [ # 商品列表页 url(r'^goods/$', goods_list, name="goods-list"), ]
刷新网页, 返回没有问题,说明viewset使用成功.........
5. 现在开始正式的使用router
urls.py
from rest_framework.routers import DefaultRouter from goods.views import GoodsListViewSet # 生成router对象 router = DefaultRouter() # 配置goods的url router.register(r'goods', GoodsListViewSet) # router会自动把get转到list上,把post转到create上 urlpatterns = [ ... url('^', include(router.urls)), ... ]
刷新网页, 返回没有问题,说明viewset+router使用成功.........
------ over ----