Viewsets和router完成商品列表页

来自CloudWiki
跳转至: 导航搜索

应用Viewsets实现商品列表页

视图层view.py

from .serializers import GoodsSerializer

from rest_framework.response import Response
from rest_framework import mixins
from rest_framework import generics
from rest_framework.pagination import PageNumberPagination
from rest_framework import viewsets

from .models import Goods

# Create your views here.

class GoodsPagination(PageNumberPagination):
    page_size = 12
    page_size_query_param = 'page_size'
    page_query_param = "page"
    max_page_size = 100



class GoodsListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):

    """
    商品列表页
    """
    queryset = Goods.objects.all()
    serializer_class = GoodsSerializer
    pagination_class = GoodsPagination

    


路由urls.py

下面代码 对get 方法 和list方法做了一个绑定:

 from django.conf.urls import url, include
#from django.contrib import admin
import xadmin
from mxshop.settings import MEDIA_ROOT
from django.views.static import serve
from rest_framework.documentation import include_docs_urls

from goods.views import GoodsListViewSet

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

urlpatterns = [
    url(r'^xadmin/', xadmin.site.urls),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}),
    url(r'goods/$',goods_list, name="goods-list"),
    url(r'docs/', include_docs_urls(title="silutong")),

]

应用router简化路由

urls.py

通过引入router ,便利url寻址和绑定

from django.conf.urls import url, include
#from django.contrib import admin
import xadmin
from mxshop.settings import MEDIA_ROOT
from django.views.static import serve
from rest_framework.documentation import include_docs_urls
from rest_framework.routers import DefaultRouter

from goods.views import GoodsListViewSet

router = DefaultRouter()

router.register(r'goods',GoodsListViewSet)

urlpatterns = [
    url(r'^xadmin/', xadmin.site.urls),
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^media/(?P<path>.*)$', serve, {"document_root": MEDIA_ROOT}),
    url(r'^',include(router.urls)),
    url(r'docs/', include_docs_urls(title="silutong")),

]