rest_framework之分頁器
普通分頁
效果: 位址列輸入http://127.0.0.1:8000/book/?num=2&size=3
檢視第二頁, 顯示三條資料, 返回的是第4,5,6條資料
from rest_framework.viewsets import ViewSetMixin
from rest_framework.views import APIView
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response
from app01 import models
from app01 import mySer
class Book(ViewSetMixin, APIView):
def get_all(self, request):
book_list = models.Book.objects.all() # 查詢所有資料
page = PageNumberPagination() # 生成分頁器物件
page.page_size = 2 # 設定每頁的條數
page.page_query_param = 'num' # url中查詢第幾頁的key預設為'page
page.page_size_query_param = 'size' # url中這一頁資料的條數的key, 預設為None
page.max_page_size = 5 # 每頁的最大資料條數
page_list = page.paginate_queryset(book_list, request, self) # 生成這一頁的資料列表
ret = mySer.BookSerializer(page_list, many=True) # 將這一頁的資料列表序列化
# return Response(ret.data) # 返回查到的資料列表
return page.get_paginated_response(ret.data) # 額外返回資料庫中資料的總條數與上一頁下一頁的url
偏移分頁
效果: 位址列輸入http://127.0.0.1:8000/book/?offset=4&limit=3
從第4條資料開始, 檢視往後的3條資料
程式碼只需要將上面的Book類中的中間部分程式碼替換掉
from rest_framework.pagination import LimitOffsetPagination
page = LimitOffsetPagination() # 生成分頁器物件
page.default_limit = 2 # 設定每頁的條數
page.offset_query_param = 'offset' # 標杆值
page.limit_query_param = 'limit' # 往後偏移多少
page.max_limit = 5 # 每頁顯示最大的條數
加密分頁(老劉自己取得名字)
只能上下翻頁, 不能實現指定頁碼跳轉
原理, 記住當前頁的首尾兩條資料的 nid (page.ordering指定的那個),
到上一頁就是小於首條資料的id取幾條資料,
到下一頁就是大於首條資料的id取幾條資料,
所以翻頁的時候不會去資料庫重新查一次,
效率最高
from rest_framework.pagination import CursorPagination
page = CursorPagination() # 生成分頁器物件
page.ordering = 'nid' # 按nid排序
page.cursor_query_param = 'cursor' # 查詢的key值
page.page_size = 3 # 每頁顯示多少條
注意注意注意,這裡需要
return page.get_paginated_response(ret.data)
因為頁碼是加密的, 所以需要返回上下頁的連結
url示例:
剛進來: http://127.0.0.1:8000/book/
下一頁: http://127.0.0.1:8000/book/?cursor=cD0z
上一頁: http://127.0.0.1:8000/book/?cursor=cj0xJnA9MTA%3D"
相關文章
- Django之分頁功能Django
- mysql之分頁方式瞭解MySql
- Django框架之分頁器使用Django框架
- 效能優化之分頁查詢優化
- DRF之分頁類原始碼分析原始碼
- SpringBoot+Vue之分頁操作Spring BootVue
- pagehelper踩坑記之分頁亂套
- Django筆記三十四之分頁操作Django筆記
- [Procedure]Oracle之分頁儲存過程Oracle儲存過程
- web程式設計之分頁顯示 (轉)Web程式設計
- (瞭解)rest_framework之版本控制, 響應器, url控制器RESTFramework
- Linux記憶體定址之分頁機制Linux記憶體
- Linux 記憶體定址之分頁機制Linux記憶體
- rest_framework — 認證元件RESTFramework元件
- django rest_framework面經DjangoRESTFramework
- jquery外掛合集之分頁外掛[表單和表格]jQuery
- Elasticsearch之分析。Elasticsearch
- MongoDB之分片MongoDB
- 機器學習系列之分類機器學習
- 前端實現網路閱讀軟體之分頁原理與演算法(一)前端演算法
- 二、django rest_framework原始碼之認證流程剖析DjangoRESTFramework原始碼
- Hive之分析函式Hive函式
- MongoDB叢集之分片MongoDB
- Oracle之分析資料Oracle
- oracle之分割槽交換Oracle
- 4、Git之分支操作Git
- 通天之分組揹包
- 分頁器
- 機器學習之分類問題度量機器學習
- 機器學習之分類:準確率機器學習
- 機器學習之分類:預測偏差機器學習
- 機器學習之分類:指定閾值機器學習
- SQL SERVER之分割槽表SQLServer
- Python訊號之分享Python
- Redis之分散式鎖實現Redis分散式
- 微服務之分散式配置中心微服務分散式
- PyTorch之分散式操作BarrierPyTorch分散式
- git 知識之分支合併Git