數據庫有幾千萬條數據,這些數據須要展現,不可能直接從數據庫把數據所有讀取出來,數據庫
這樣會給內存形成特別大的壓力,有可能還會內存溢出,因此但願一點一點的取,那展現的時候也是同樣的,老是要進行分頁顯示,加密
DRF給提供了三種分頁方式,看下他們都是什麼樣的~~url
分頁組件的使用spa
DRF提供的三種分頁rest
全局配置 REST_FRAMEWORK = { 'PAGE_SIZE': 2 }
http://127.0.0.1:8000/book?page=2&size=1code
utils/pagination.py對象
自定義分頁類blog
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination class MyPagination(PageNumberPagination): # xxxx?page=1&size=2 page_size = 1 page_query_param = "page" page_size_query_param = "size" max_page_size = 3
pageDemo/views.py排序
from utils.pagination import MyPagination class BookView(APIView): def get(self, request): queryset = Book.objects.all() # 1,實例化分頁器對象 page_obj = MyPagination() # 2,調用分頁方法去分頁queryset page_queryset = page_obj.paginate_queryset(queryset, request, view=self) # 3,把分頁好的數據序列化返回
ser_obj = BookSerializer(page_queryset, many=True) # 4, 帶着上一頁下一頁鏈接的響應,返回帶超連接 需返回的時候用內置的響應方法 return page_obj.get_paginated_response(ser_obj.data) #超連接
# return Response(ret.data)
自定義分頁類內存
class MyPagination(LimitOffsetPagination): default_limit = 1 limit_query_param = "limit" # 向後找多少條 offset_query_param = "offset" # 從第幾個開始找 max_limit = 3
視圖
# 視圖和上面的大致一致 # 只有用的分頁類不一樣,其餘都相同 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)
加密遊標的分頁 把上一頁和下一頁的id記住
自定義分頁類
class MyPagination(CursorPagination): cursor_query_param = "cursor" page_size = 2 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)
對url進行了加密,還支持對數據排序
7