分页器

一、简单分页

from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination

class PNPagination(PageNumberPagination):
        # 定义一个PageNumberPagination的子类
        # 如需改变参数,重写其属性即可
        page_size = 1 # 每页显示数据数量
        page_query_param = 'page' # 分页的url参数名
        page_size_query_param = "size" # 可临时更改的每页显示数量
        max_page_size = 5 # 可以用size临时改变每页显示数量,但是有每页最大显示数量的限制

class BookViewSet(viewsets.ModelViewSet):

queryset = Book.objects.all()
# 因为只需要一个分页器,因此不需要像解析器一样将类放在列表中
    serializer_class = BookSerializers
    def list(self,request,*args,**kwargs):

        book_list=Book.objects.all()
# 生成分页器对象
        pp=LimitOffsetPagination()
        # 调用paginate_queryset()方法来得到每页显示的数据
        pager_books=pp.paginate_queryset(queryset=book_list,request=request,view=self)
        print(pager_books)
# 将新的数据序列化
        bs=BookSerializers(pager_books,many=True)

        #return Response(bs.data)
        return pp.get_paginated_response(bs.data)

二、全局配置分页

REST_FRAMEWORK = {
    .....
    "PAGE_SIZE":1
}

三、偏移分页

from rest_framework.pagination import LimitOffsetPagination
class MyLimitPagition(LimitOffsetPagination):
    “““
    在地址栏中的url后面是
       limit=1限制显示数据1条
       offset=1表示往后偏移一个,显示的将是第二条数据,默认是0
       limit=2&offset=1 表示限制显示两条数据,偏移一位,意味着将限制第二条和第三条数据
    ”””
    default_limit = 1

class BookView(APIView):
def get(self, request):
    php = LimitOffsetPagination()
    book_qs = Book.objects.all()
    qs = php.paginate_queryset(queryset=book_qs, request=request, view=self)
    bs = dataApi.BookSerializers(qs, many=True)
    return Response(bs.data)
posted @ 2018-08-06 20:36  桥前石头  阅读(109)  评论(0编辑  收藏  举报