首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >django-rest框架,如何分页

django-rest框架,如何分页
EN

Stack Overflow用户
提问于 2015-12-02 17:43:53
回答 1查看 1.2K关注 0票数 0

这是我的观点女巫工作得好:

代码语言:javascript
运行
复制
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中添加以下内容:

代码语言:javascript
运行
复制
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
}

我需要做更多的改变才能让它发挥作用吗?提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-02 18:33:51

序列化程序不会自己分页,您必须使用queryset作为参数调用分页类。默认情况下,内置的rest_framework.viewsets.ModelViewSet将同时执行JSON解析/呈现和分页操作,而无需进行任何操作。

为什么不拥有一个viewset类,例如:

代码语言:javascript
运行
复制
from rest_framework import viewsets
class BerriaViewSet(viewsets.ModelViewSet):
    queryset = Berria.objects.all()
    serializer_class = BerriaSerializer

我相信这能做你想做的一切。

但是,如果你坚持用你现在的方式去做,你可以做以下事情:

代码语言:javascript
运行
复制
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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34049470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档