前阵子没空弄,这阵子又有点时间了,继续。
这章节讲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来统一管理请求