1. 程式人生 > >rest_framework-07-分頁-渲染器

rest_framework-07-分頁-渲染器

排序。 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-分頁-渲染器