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根视图

相关文章
相关标签/搜索