2015-12-02 47 views
0

这是我的看法巫工程确定:Django的REST的架构,如何分页

from django.http import Http404, HttpResponse, HttpResponseRedirect 
from django.views.decorators.csrf import csrf_exempt 
from rest_framework.renderers import JSONRenderer 
from rest_framework.parsers import JSONParser 
from rest_framework import serializers 
from gamerauntsia.berriak.serializers import BerriaSerializer 
from rest_framework.response import Response 
import json 



class JSONResponse(HttpResponse): 
    """ 
    An HttpResponse that renders its content into JSON. 
    """ 
    def __init__(self, data, **kwargs): 
     content = JSONRenderer().render(data) 
     kwargs['content_type'] = 'application/json' 
     super(JSONResponse, self).__init__(content, **kwargs) 

@csrf_exempt 
def app_berria_list(request): 
    if request.method == 'GET': 
     berriak = Berria.objects.all() 
     serializer = BerriaSerializer(berriak, many=True) 
     return JSONResponse(serializer.data) 

我想通过5项分页响应,所以我试图在settings.py添加此:

REST_FRAMEWORK = { 
    'DEFAULT_AUTHENTICATION_CLASSES': [ 
     'rest_framework.authentication.SessionAuthentication', 
     'rest_framework.authentication.TokenAuthentication', 
    ], 
    'DEFAULT_PERMISSION_CLASSES': [ 
     'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly' 
    ], 
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 
    'PAGE_SIZE': 5 
} 

我需要改变一些东西才能使它工作吗? 在此先感谢

回答

1

串行器不分页自己,你必须调用分类类与查询集作为参数。默认情况下,内置的rest_framework.viewsets.ModelViewSet可以执行JSON解析/呈现和分页,而无需执行任何操作。

为什么不能有一个视图集类如:

from rest_framework import viewsets 
class BerriaViewSet(viewsets.ModelViewSet): 
    queryset = Berria.objects.all() 
    serializer_class = BerriaSerializer 

这会做你想要我相信一切。

如果你坚持这样做,你现在的样子,但是,你可以做到以下几点:

from rest_framework.pagination import PageNumberPagination 
@csrf_exempt 
def app_berria_list(request): 
    if request.method == 'GET': 
     berriak = Berria.objects.all() 
     paginator = PageNumberPagination() 
     page = paginator.paginate_queryset(berriak, request) 
     serializer = BerriaSerializer(page, many=True, context={'request': request}) 
     return paginator.get_paginated_response(serializer.data) 
+0

I'll与视图集中去......那太棒了!我不知道他们:D –