DRF的分頁

DRF提供的三種分頁ide

from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination

全局配置加密

REST_FRAMEWORK = {
    'PAGE_SIZE': 2
}

第一種 PageNumberPagination  看第n頁,每頁顯示n條數據

http://127.0.0.1:8000/book?page=2&size=1spa

class MyPageNumber(PageNumberPagination):
    page_size = 2  # 每頁顯示多少條
    page_size_query_param = 'size'  # URL中每頁顯示條數的參數
    page_query_param = 'page'  # URL中頁碼的參數
    max_page_size = None  # 最大頁碼數限制
自定義分頁類

 

class BookView(APIView):
    def get(self, request):
        book_list = Book.objects.all()
        # 分頁
        page_obj = MyPageNumber()
        page_article = page_obj.paginate_queryset(queryset=book_list, request=request, view=self)
        
        ret = BookSerializer(page_article, many=True)
        return Response(ret.data)
使用:須要導入你寫的類
class BookView(APIView):
    def get(self, request):
        book_list = Book.objects.all()
        # 分頁
        page_obj = MyPageNumber()
        page_article = page_obj.paginate_queryset(queryset=book_list, request=request, view=self)

        ret = BookSerializer(page_article, many=True)
        # return Response(ret.data)
        # 返回帶超連接 需返回的時候用內置的響應方法
        return page_obj.get_paginated_response(ret.data)
返回上下頁的方法

 

第二種 LimitOffsetPagination 在第n個位置  向後查看n條數據

http://127.0.0.1:8000/book?offset=2&limit=13d

class MyLimitOffset(LimitOffsetPagination):
    default_limit = 1
    limit_query_param = 'limit'
    offset_query_param = 'offset'
    max_limit = 999
自定義分頁類

 

# 視圖和上面的大致一致
# 只有用的分頁類不一樣,其餘都相同
class BookView(APIView):
    def get(self, request):
        book_list = Book.objects.all()
        # 分頁
        page_obj = MyLimitOffset()
        page_article = page_obj.paginate_queryset(queryset=book_list, request=request, view=self)

        ret = BookSerializer(page_article, many=True)
        # return Response(ret.data)
        # 返回帶超連接 需返回的時候用內置的響應方法
        return page_obj.get_paginated_response(ret.data)
視圖

 

第三種 CursorPagination 加密遊標的分頁 把上一頁和下一頁的id記住

class MyCursorPagination(CursorPagination):
    cursor_query_param = 'cursor'
    page_size = 1
    ordering = '-id'
自定義分頁
class BookView(APIView):
    def get(self, request):
        book_list = Book.objects.all()
        # 分頁
        page_obj = MyCursorPagination()
        page_article = page_obj.paginate_queryset(queryset=book_list, request=request, view=self)

        ret = BookSerializer(page_article, many=True)
        # return Response(ret.data)
        # 返回帶超連接 需返回的時候用內置的響應方法
        return page_obj.get_paginated_response(ret.data)
視圖
相關文章
相關標籤/搜索