Django_rest_framework分页

分页基本流程及配置

1、基于LimitOffsetPagination做分页,根据配置

from rest_framework.pagination import LimitOffsetPagination
class P1(LimitOffsetPagination):
    max_limit = 3
    default_limit = 2
    limit_query_param = 'limit'
    offset_query_param = 'offset'
class IndexView(APIView):
    parser_classes = [JSONParser, FormParser, MultiPartParser]
    def get(self, request):
        # parser_classes = [JSONParser, FormParser]
        user_list = models.UserInfo.objects.all()
        # 实例化一个分页对象,并根据分页的配置获取数据列表
        p1 = P1()
        page_user_list = p1.paginate_queryset(queryset=user_list, request=request, view=self)
        ser = UserInfoSerializer(instance=page_user_list, many=True)
        # return Response(ser.data)  # 不含上一页和下一页
        return p1.get_paginated_response(ser.data)  # 含上一页和下一页,详见下图

2、基于PageNumberPagination的分页

class P2(PageNumberPagination):
    # 每页显示的数据条数
    max_page_size = 5
    page_size = 3  
    page_size_query_param = 'size'
    # 页码关键字
    page_query_param = 'page'
# 视图部分和基于LimitOffsetPagination是样的,只需要把P1改成P2就可以了,页面显示效果如下图所示

3、基于CurorPagination的分页

class P3(CursorPagination):
    cursor_query_param = 'cursor'
    page_size = 2
    ordering = 'id'
# 视图部分和基于LimitOffsetPagination是样的,只需要把P1改成P3就可以了,而且,页码的也是不是明文,有助于防止恶意一下子请求过多数据。页面显示效果如下图所示,

原文地址:https://www.cnblogs.com/eric_yi/p/8432687.html