drf 分页 PageNumberPagination 简单使用

settings

REST_FRAMEWORK = {
    # 分页,每页大小
    "PAGE_SIZE": 2,
}

views

class BlogView(APIView):
    """
    get:
    返回所有blog
    """
    def get(self, request, *args, **kwargs):
        queryset = models.Blog.objects.order_by('-id').all()
        from rest_framework.pagination import PageNumberPagination
        pager = PageNumberPagination()
        result = pager.paginate_queryset(queryset, request, self)
        #重新序列化
        ser = BlogModelSerializer(instance=result, many=True)
        res_code.res_success(data=ser.data, msg='查询成功')
        return Response(res_code.dict)

结果

image

使用get_paginated_response

class BlogView(APIView):
    """
    get:
    返回所有blog
    post:
    添加博客
    """
    authentication_classes = [ParamsAuthentication, ]

    def get(self, request, *args, **kwargs):
        queryset = models.Blog.objects.order_by('-id').all()
        # 实例化自定义类
        pager = PageNumberPagination()
        result = pager.paginate_queryset(queryset, request, self)
        ser = BlogModelSerializer(instance=result, many=True)
        # 把序列化结果给get_paginated_response
        res = pager.get_paginated_response(ser.data)
        return res

get_paginated_response源码

    def get_paginated_response(self, data):
        return Response(OrderedDict([
            ('count', self.page.paginator.count),
            ('next', self.get_next_link()),
            ('previous', self.get_previous_link()),
            ('results', data)
        ]))

结果

image

posted @ 2022-10-09 11:01  Sherwin_szw  阅读(94)  评论(0编辑  收藏  举报