REST功能模塊-Viewsets&routers

Viewsets:用於處理抽象概念,它容許開發人員專一對API的狀態和交互進行建模,並根據通用約定自動處理URL構造django

ViewSet類與View類幾乎相同,除了提供諸如read或update,而不是諸如get或put的處理程序方法url

重構使用ViewSetsspa

from rest_framework import viewsets
from .models import Goods
from .serializers import GoodsSerializer



class GoodsSetPagination(PageNumberPagination):
    page_size = 10
    page_size_query_param = 'page_size'
    page_query_param = 'p'
    max_page_size = 100

class GoodsListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
    queryset = Goods.objects.all()
    serializer_class = GoodsSerializer
    pagination_class = GoodsSetPagination

明確的將ViewSets綁定到url設計

當咱們定義URL conf時,處理程序方法只會綁定到動做,爲了看看到底發生了什麼,首先從咱們到ViewSets 中明確到建立一組視圖rest

在該goods/urls.py文件中,將咱們到ViewSet類綁定到一組具體到視圖中code

from goods.views import GoodsListViewSet

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


urlpatterns = [
    url(r"goods/$", goods_list, name="goods_list"),


]

使用routersrouter

由於咱們使用到是ViewSet類而不是View類,因此咱們實際上不須要本身設計URL,將資源鏈接到視圖和URL的約定能夠使用Router類自動處理,blog

咱們只須要用路由器註冊適當的視圖集,而後讓其完成資源

from django.conf.urls import url, include
from goods.views import GoodsListViewSet
from rest_framework.routers import DefaultRouter

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

urlpatterns = [
    url(r'^', include(router.urls)),

]

路由器註冊視圖相似於urlpattern,咱們包含兩個參數-視圖的url前綴和視圖自己,路由

DefaultRouter咱們使用的類也爲咱們自動建立了API根視圖

相關文章
相關標籤/搜索