一、简介: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 })