DRF分页器

 简单分页器:PageNumberPagination

from rest_framework.pagination import PageNumberPagination
class SimplePage(PageNumberPagination):
    # #每页显示记录数,前端没有传入page_num,则默认显示此参数
    page_size = 3
    #url链接参数,如;http://127.0.0.1:8000/api/books/?page=3
    page_query_param = 'page'
    #前端传入每页显示条数
    page_size_query_param = 'size'
    # 后端控制每页显示最大记录数
    max_page_size = 5

偏移分页器:LimitOffsetPagination

from rest_framework.pagination import LimitOffsetPagination
class LimitPage(LimitOffsetPagination):
    default_limit = 3  # 每页条数
    limit_query_param = 'limit' # 往后拿几条
    offset_query_param = 'offset' # 标杆
    max_limit = 5   # 后台控制显示的最大条数防止前台输入数据过大
    # http://127.0.0.1:8000/api/books/?limit=5&offset=3  表示显示第4条开始,往下显示5条记录

加密分页器:CursorPagination

from rest_framework.pagination import CursorPagination
class CursorPage(CursorPagination):
    #每页显示条数
    page_size = 3
    #页数关键词
    cursor_query_param = 'page'
    #后台允许显示的最大条数
    max_page_size = 5
    #安装id号降序排序
    ordering = '-id'
    #http://127.0.0.1:8000/api/books/?page=cD02

结果实例

使用方法:

#继承APIview的视图类中使用
class BookView(APIView):
    def get(self,request,*args,**kwargs):
        books = models.Book.objects.all().filter(is_delete=False)
        # 简单分页
        # page=SimplePage()
        # 偏移分页器
        # page=LimitPage()
        # 加密分页器
        page = CursorPage()
        page_list = page.paginate_queryset(books, request, view=self) #获取分页内容
        # 下一页
        next_page = page.get_next_link()
        # 上一页
        per_page = page.get_previous_link()
        #对分页的内容进行序列化
        books_ser = ser.BookModelser(instance=page_list, many=True)
        # books_ser=ser.BookModelser(books,many=True)
        # 用分页器封装的响应
        return page.get_paginated_response(books_ser.data)
#继承视图子类的视图中使用
pagination_class=分页类(我们自己重写的,可以修改字段)

 

全局配置

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS':  'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 100  # 每页数目
}

 

posted @ 2020-11-09 23:45  NQ31  阅读(86)  评论(0编辑  收藏  举报