Python django rest框架,如何分页
这是我的观点,巫婆工作正常:Python django rest框架,如何分页,python,django,api,rest,django-rest-framework,Python,Django,Api,Rest,Django Rest Framework,这是我的观点,巫婆工作正常: 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_framewor
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
}
我需要做更多的改变来让它工作吗?
提前感谢序列化程序不会自行分页,您必须使用queryset作为参数调用分页类。默认情况下,内置的
rest_framework.viewsets.ModelViewSet
将执行JSON解析/呈现和分页,而无需执行任何操作
为什么不使用viewset类,例如:
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)
序列化程序不会自行分页,您必须使用queryset作为参数调用分页类。默认情况下,内置的
rest_framework.viewsets.ModelViewSet
将执行JSON解析/呈现和分页,而无需执行任何操作
为什么不使用viewset类,例如:
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)
我将使用viewset。。。太好了!我不知道他们的情况:我将使用viewset。。。太好了!我不知道他们:D