(生鲜项目)09. 使用 ViewSets 来返回商品列表页

第一步: 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  ----

posted @ 2019-12-25 13:29  渱尘  阅读(273)  评论(0编辑  收藏  举报