drf7 分页组件
DRF的分頁
數據庫有幾千萬條數據,這些數據需要展示,不可能直接從數據庫把數據全部讀取出來,
這樣會給內存造成特別大的壓力,有可能還會內存溢出,所以希望一點一點的取,那展示的時候也是一樣的,總是要進行分頁顯示,
DRF給提供了三種分頁方式,看下他們都是什么樣的~~
分頁組件的使用
DRF提供的三種分頁
全局配置 REST_FRAMEWORK = {'PAGE_SIZE': 2 }pageNumber分頁
http://127.0.0.1:8000/book?page=2&size=1
utils/pagination.py
自定義分頁類
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPaginationclass MyPagination(PageNumberPagination):# xxxx?page=1&size=2page_size = 1page_query_param = "page"page_size_query_param = "size"max_page_size = 3pageDemo/views.py
from utils.pagination import MyPagination class BookView(APIView):def get(self, request):queryset = Book.objects.all()# 1,實例化分頁器對象page_obj = MyPagination()# 2,調用分頁方法去分頁querysetpage_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)limitOffset分頁
自定義分頁類
class MyPagination(LimitOffsetPagination):default_limit = 1limit_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)CursorPagination游標分頁
加密游標的分頁 把上一頁和下一頁的id記住
自定義分頁類
class MyPagination(CursorPagination):cursor_query_param = "cursor"page_size = 2ordering = "-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
總結
- 上一篇: drf6 权限和频率控制组件
- 下一篇: drf8 解析器