rest_framework 分頁器組件 — 簡單分頁器(PageNumberPagination)
from rest_framework.pagination import PageNumberPagination
class Book(APIView): def get(self,request): book_lis = models.Book.objects.all() page = PageNumberPagination() # 產生一個分頁器對象 page.page_size = 6 # 每頁顯示的多少條記錄 page.page_query_param = 'xx' # 前台查詢第幾頁的參數,一般不需要改,系統默認查詢參數為 page # eg:http://127.0.0.1: 8122/book/?xx=5 page.page_size_query_param = 'max' # 前台控制每頁顯示的最大條數 # eg:http://127.0.0.1: 8122/book/?xx=5&max=7 表示顯示第五頁的記錄,最大顯示條數7條 page.max_page_size = 7 # 后台控制顯示的最大記錄條數,防止前台輸入的查詢條數過大 # eg:http://127.0.0.1: 8122/book/?xx=5&max=10000000000000 ret = page.paginate_queryset(book_lis, request) # 必須傳兩個參數,第一個queryset對象要分頁的所有數量,第二個參數request ser = BookSerializer(instance=ret, many=True) return Response(ser.data)
rest_framework 分頁器組件 — 偏移分頁器(LimitOffsetPagination)
from rest_framework.pagination import LimitOffsetPagination
class Book(APIView): def get(self, request): book_lis = models.Book.objects.all() page = LimitOffsetPagination() # 生成分頁器對象 page.default_limit = 5 # 前台不傳每頁默認顯示條數 page.limit_query_param = 'xx' # 前天控制每頁的顯示條數查詢參數,一般不需要改,系統默認為 limit 變量 page.offset_query_param = 'offset' # 前天控制從哪一條開始顯示的查詢參數 # eg:http://127.0.0.1: 8122/book/?xx=5&offset=7 表示顯示第8條開始,往下顯示5條記錄 page.max_limit = 10 # 后台控制顯示的最大條數防止前台輸入數據過大 ret = page.paginate_queryset(book_lis, request) # 必須傳兩個參數,第一個queryset對象要分頁的所有數量,第二個參數request ser = BookSerializer(instance=ret, many=True) # 在序列化就是分完頁以后的數據 return Response(ser.data)
rest_framework 分頁器組件 — 加密分頁器(CursorPagination)
from rest_framework.pagination import CursorPagination
class Book(APIView): def get(self, request): book_list = models.Book.objects.all() page_pagination = CursorPagination() # 產生一個分頁器對象 page_pagination.ordering = 'id' # 通過字段來排序,默認升序 page_pagination.page_size = 3 # 每頁顯示的條數 ret = page_pagination.paginate_queryset(book_list, request, self) book_ser = BookSerializer(instance=ret, many=True) return page_pagination.get_paginated_response(book_ser.data) # 源碼已經幫我們封裝了響應回去的方法 # 源碼封裝響應回去的字典 # { # "next": "http://127.0.0.1:8122/book/?cursor=cD04", # 表示下一頁的加密請求路徑 # "previous": "http://127.0.0.1:8122/book/?cursor=cj0xJnA9MTA%3D", # 表示上一頁的加密請求路徑 # "results": [ # { # "id": 8, # "name": "朝花夕拾" # } # ] # }