rest_framework-07-分頁-渲染器
阿新 • • 發佈:2018-07-08
排序。 17. 技術分享 utils 展示 turn mode 渲染器 efault
rest_framework-07-分頁-渲染器
渲染器的作用:序列化、友好的展示
分頁
a. PageNumberPagination分頁,看第n頁,每頁顯示n條數據;上一頁和下一頁。
1.
2.
3.
4.
5.渲染器 先配置settings.py文件,必須有rest_framework
6.
7.效果 好看的數據
8.也可以顯示json數據
9.用分頁模塊,settings.py先配置每頁顯示的數量
10.引入分頁模塊。
運行結果:
11.序列化分頁後的數據。
運行結果:
12.傳參數分頁。默認顯示第一頁。其他頁的數據怎麽看?需要轉參數。
13.源碼,settings.py每頁顯示2條數據。默認為空。如果想顯示更多,比如每頁顯示3條、10條數據.接下來自定的分類對象。
14.自定義分類對象
運行結果:默認每頁2條數據,頁可以傳參數。每頁顯示3條數據。
15.最多每頁顯示5條數據。2-5條數據之間隨意調配。
運行結果:
16.返回HttpResponse
運行結果:有上一頁,下一頁都做好了
b. LimitOffsetPagination索引分頁,在n個位置,向後查看n條數據;
1.第二種分頁類
2.類源碼
3.運行結果:從索引為2的數據開始向後查詢。settings.py文件配置每頁顯示的數量是2
4.索引從4開始,向後查詢3條數據
5.自定義
c. 加密分頁CursorPagination,排序。
1,源碼:
2.假設一id來排序,加負號則倒序
settings.py文件不變
運行結果;
3.正序,默認第一頁
運行結果:
4.假設想看第2頁的數據,分頁加密了,看不了。
5. 返回HttpResponse,有上一頁和下一頁
運行結果:有上下頁的鏈接
優點:避免用戶寫太多的數字,影響性能、速度、數據查詢慢。
10:源碼還原。
11.自定義類
運行結果:
總結:
1. 分頁 a. 分頁,看第n頁,每頁顯示n條數據;from rest_framework.pagination import PageNumberPagination class MyPageNumberPagination(PageNumberPagination): page_size = 2 page_size_query_param = ‘size‘ max_page_size = 5 page_query_param = ‘page‘ class Pager1View(APIView): def get(self,request,*args,**kwargs): # 獲取所有數據 roles = models.Role.objects.all() # 創建分頁對象 # pg = MyPageNumberPagination() pg = PageNumberPagination() # 在數據庫中獲取分頁的數據 pager_roles = pg.paginate_queryset(queryset=roles,request=request,view=self) # 對數據進行序列化 ser = PagerSerialiser(instance=pager_roles, many=True) return Response(ser.data) # return pg.get_paginated_response(ser.data) b. 分頁,在n個位置,向後查看n條數據; from api.utils.serializsers.pager import PagerSerialiser from rest_framework.response import Response from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination class MyLimitOffsetPagination(LimitOffsetPagination): default_limit = 2 limit_query_param = ‘limit‘ offset_query_param = ‘offset‘ max_limit = 5 class Pager1View(APIView): def get(self,request,*args,**kwargs): # 獲取所有數據 roles = models.Role.objects.all() # 創建分頁對象 # pg = MyLimitOffsetPagination() pg = LimitOffsetPagination() # 在數據庫中獲取分頁的數據 pager_roles = pg.paginate_queryset(queryset=roles,request=request,view=self) # 對數據進行序列化 ser = PagerSerialiser(instance=pager_roles, many=True) return Response(ser.data) # return pg.get_paginated_response(ser.data) c. 加密分頁,上一頁和下一頁。 from api.utils.serializsers.pager import PagerSerialiser from rest_framework.response import Response from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination class MyCursorPagination(CursorPagination): cursor_query_param = ‘cursor‘ page_size = 2 ordering = ‘id‘ page_size_query_param = None max_page_size = None class Pager1View(APIView): def get(self,request,*args,**kwargs): # 獲取所有數據 roles = models.Role.objects.all() # 創建分頁對象 # pg = CursorPagination() pg = MyCursorPagination() # 在數據庫中獲取分頁的數據 pager_roles = pg.paginate_queryset(queryset=roles,request=request,view=self) # 對數據進行序列化 ser = PagerSerialiser(instance=pager_roles, many=True) # return Response(ser.data) return pg.get_paginated_response(ser.data)
rest_framework-07-分頁-渲染器