一、简介:drf内置了三种分页器类,一般需要重写类继承默认的分页器类来定制属性的具体数值。

二、PageNumberPagination

  1、路径:rest_framework.pagination.PageNumberPagination。

  2、重写类:

class NewPageNumberPagination(PageNumberPagination):
    page_size=5  # 每页显示的条数
    page_query_param='to_page'  # 跳转第几页的键,不定义则默认使用'page'
    page_size_query_param='size'# 设置每页条数的键
    max_page_size=10  # 每页最大显示条数

  3、url:.../?to_page=3&size=6,代表<跳转至第3页,每页显示6条数据>。

  4、特性:每页显示固定的条数。

三、LimitOffsetPagination

  1、路径:rest_framework.pagination.LimitOffsetPagination。

  2、重写类:

class NewLimitOffsetPagination(LimitOffsetPagination):
    default_limit = 5  # 当前页默认显示的条数
    offset_query_param = 't_offset'  # 设置基点的键,不定义则使用默认的'offset'
    limit_query_param = 't_limit'  # 设置当前页显示条数的键,不定义则使用默认的'limit'
    max_limit = 10  # 每页最大显示条数

  3、url:.../?t_offset=3&t_limit=6,代表<从第4条数据开始,显示6条数据>。

  4、特性:可以定位到具体第几条数据。

四、CursorPagination

  1、路径:rest_framework.pagination.CursorPagination。

  2、重写类:  

class NewCursorPagination(CursorPagination):
    page_size = 5  # 每页显示的条数
    cursor_query_param = 't_cursor'  # 设置指针位置的键,不定义则使用默认的'cursor'
    ordering = '-id'  # 排序参照的字段,负号代表反序

  3、url:.../?t_cursor=xxxxxxx。

  4、特性:无法定位,只能前进或者后退,但是速度快。

五、使用分页器

  1、继承了ListAPIView的情况:

class TarView(ListAPIView):
    queryset = models.Tar.objects.all()
    serializer_class = TarModelSerializer
    pagination_class = NewCursorPagination  # 配置所用的分页器

  2、继承了APIView的情况:

class TarView(APIView):
    def get(self,request,*args,**kwargs):
        book_list=models.Book.objects.all()
        page_cursor=NewPageNumberPagination()  # 获取分页器对象
        book_list=page_cursor.paginate_queryset(book_list,request,view=self)
        next_url =page_cursor.get_next_link()
        pr_url=page_cursor.get_previous_link()
        book_ser=BookModelSerializer(book_list,many=True)
        return Response(data={
            'pr_url': pr_url,
            'next_url': next_url,
            'data': book_ser.data
        })

 

posted on 2020-05-22 11:01  焚音留香  阅读(127)  评论(0编辑  收藏  举报