Vue Django Restful framework 前后端分离开发 - 5

前阵子没空弄,这阵子又有点时间了,继续。

这章节讲viewsets和router

1: Viewsets 和 Router 最终效果

普通来说,我们的http请求方式有例如get post update 等等
并且要是要配置这样的请求方法的话,我们必须在url.py里面逐个进行配置
比如下面这样,那么在内容多了以后,就造成了url里面非常臃肿

urlpatterns = [
    path('goods/',GoodsListView.as_view(),name='goods-list'),
    path('goods/<int:id>',GoodsListView.as_view(),name='goods-detail'),
]

viewsets就解决了这样的问题,viewsets里面包含有好几类
比如ModelViewSet,这个最常用,包括了所有对应的http方法
ReadOnlyModelViewSet,这个是可以用于只查询list或者detail的只读方法等

2:GoodsListViewSet

我们来看下用listview来举个例子

class GoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet):
    '''
    List all , or create a new
    '''
    queryset = Goods.objects.all()
    serializer_class = GoodsSerializer
    pagination_class = GoodsPagination

然后在url.py里面,还需要将请求方法挂钩,因为viewset是没有直接的get,post这样的http请求方法的

from apps.goods.views import GoodsListViewSet

goods_list = GoodsListViewSet.as_view({
    'get':'list',
})

urlpatterns = [
    path('goods/',goods_list,name='goods_list'),
]

这样,就可以成功建立访问了。

3:Router

但是这样不还是要设定多个url么?
这时候就需要Router这个功能出来了,他可以免去手动建立一堆url的过程

from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register('goods',GoodsListViewSet)

urlpatterns = [
    path('',include(router.urls)),
]

这样,就做到了用router和viewsets来统一管理请求

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容