前陣子沒(méi)空弄,這陣子又有點(diǎn)時(shí)間了能颁,繼續(xù)胚鸯。
這章節(jié)講viewsets和router
1: Viewsets 和 Router 最終效果
普通來(lái)說(shuō)玄渗,我們的http請(qǐng)求方式有例如get post update 等等
并且要是要配置這樣的請(qǐng)求方法的話晋涣,我們必須在url.py里面逐個(gè)進(jìn)行配置
比如下面這樣仪媒,那么在內(nèi)容多了以后,就造成了url里面非常臃腫
urlpatterns = [
path('goods/',GoodsListView.as_view(),name='goods-list'),
path('goods/<int:id>',GoodsListView.as_view(),name='goods-detail'),
]
viewsets就解決了這樣的問(wèn)題谢鹊,viewsets里面包含有好幾類
比如ModelViewSet算吩,這個(gè)最常用,包括了所有對(duì)應(yīng)的http方法
ReadOnlyModelViewSet佃扼,這個(gè)是可以用于只查詢list或者detail的只讀方法等
2:GoodsListViewSet
我們來(lái)看下用listview來(lái)舉個(gè)例子
class GoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet):
'''
List all , or create a new
'''
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
pagination_class = GoodsPagination
然后在url.py里面偎巢,還需要將請(qǐng)求方法掛鉤,因?yàn)関iewset是沒(méi)有直接的get兼耀,post這樣的http請(qǐng)求方法的
from apps.goods.views import GoodsListViewSet
goods_list = GoodsListViewSet.as_view({
'get':'list',
})
urlpatterns = [
path('goods/',goods_list,name='goods_list'),
]
這樣压昼,就可以成功建立訪問(wèn)了求冷。
3:Router
但是這樣不還是要設(shè)定多個(gè)url么?
這時(shí)候就需要Router這個(gè)功能出來(lái)了窍霞,他可以免去手動(dòng)建立一堆url的過(guò)程
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('goods',GoodsListViewSet)
urlpatterns = [
path('',include(router.urls)),
]
這樣匠题,就做到了用router和viewsets來(lái)統(tǒng)一管理請(qǐng)求