在 Web 開發中,處理大量數據是非常常見的。但是,如果一次性返回所有數據,不僅會增加服務器的負擔,而且還會影響客戶端的響應時間。為了解決這個問題,分頁被廣泛應用于 Web 應用程序中,特別是在 RESTful API 中。
在 Django REST Framework 中,分頁器是一種允許我們將查詢結果劃分為多個頁面,并將每個頁面的數據返回給客戶端的工具。
基于頁碼的分頁器
基于頁碼的分頁器將查詢結果劃分為多個頁面,并使用頁碼來標識每個頁面。客戶端可以在查詢參數中指定要請求的頁面數,以及每個頁面返回的對象數量。Django REST Framework 中內置了兩種基于頁碼的分頁器:PageNumberPagination
和 LimitOffsetPagination
。
【資料圖】
PageNumberPagination
PageNumberPagination
分頁器是基于頁碼的分頁器,允許客戶端使用頁碼和每頁返回的對象數量來請求不同的數據范圍。以下是一個簡單的使用 PageNumberPagination
分頁器的示例:
from rest_framework.pagination import PageNumberPaginationclass BookPagination(PageNumberPagination): page_size = 10 page_query_param = "page" max_page_size = 100class BookViewSet(viewsets.ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer pagination_class = BookPagination
在這個例子中,我們創建了一個名為 BookPagination
的分頁器類,并指定了默認的頁面大小為 10,并將 page_query_param
屬性設置為 page
,以便使用 page
參數作為頁碼參數。我們還為客戶端指定了可以在查詢參數中使用的 page
和 page_size
參數,并設置了最大頁面大小為 100。最后,我們將 BookPagination
分頁器類添加到 BookViewSet
視圖集合中。
現在,當客戶端發起請求時,我們的 BookViewSet
視圖集合將使用 BookPagination
分頁器將查詢結果劃分為多個頁面,并將每個頁面的數據返回給客戶端。客戶端可以在查詢參數中指定 page
和 page_size
參數來請求不同的數據范圍。
LimitOffsetPagination
LimitOffsetPagination
分頁器也是一種基于頁碼的分頁器,但與 PageNumberPagination
不同的是,它允許客戶端指定一個偏移量和每頁返回的對象數量來請求數據。以下是一個簡單的使用 LimitOffsetPagination
分頁器的示例:
from rest_framework.pagination import LimitOffsetPaginationclass BookPagination(LimitOffsetPagination): default_limit = 10 limit_query_param = "limit" offset_query_param = "offset" max_limit = 100class BookViewSet(viewsets.ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer pagination_class = BookPagination
在這個例子中,我們創建了一個名為 BookPagination
的分頁器類,并指定了默認的頁面大小為 10,并將 limit_query_param
和 offset_query_param
分別設置為 limit
和 offset
,以便客戶端可以使用 limit
和 offset
參數來請求數據。我們還指定了最大限制為 100,并將 BookPagination
分頁器類添加到 BookViewSet
視圖集合中。
現在,當客戶端發起請求時,我們的 BookViewSet
視圖集合將使用 LimitOffsetPagination
分頁器將查詢結果劃分為多個頁面,并將每個頁面的數據返回給客戶端。客戶端可以在查詢參數中指定 limit
和 offset
參數來請求不同的數據范圍。
基于游標的分頁器
基于游標的分頁器與基于頁碼的分頁器不同,它使用一個游標來標識要返回的數據范圍。在客戶端發送第一次請求時,服務器返回一組數據和一個游標。客戶端使用這個游標來請求下一組數據。以下是一個簡單的使用 CursorPagination
分頁器的示例:
from rest_framework.pagination import CursorPaginationclass BookPagination(CursorPagination): page_size = 10 ordering = "title"class BookViewSet(viewsets.ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer pagination_class = BookPagination
在這個例子中,我們創建了一個名為 BookPagination
的分頁器類,并指定了默認的頁面大小為 10,并將 ordering
屬性設置為 title
,以便按標題排序。最后,我們將 BookPagination
分頁器類添加到 BookViewSet
視圖集合中。
現在,當客戶端發起請求時,我們的 BookViewSet
視圖集合將使用 CursorPagination
分頁器將查詢結果劃分為多個頁面,并將每個頁面的數據返回給客戶端。客戶端可以使用 next
和 previous
參數來請求下一頁和上一頁。
在 Django REST Framework 中,分頁器是一種將查詢結果劃分為多個頁面并將每個頁面的數據返回給客戶端的工具。Django REST Framework 中內置了兩種分頁器,即基于頁碼的分頁器和基于游標的分頁器。在使用分頁器時,我們可以指定默認的頁面大小、頁面參數和最大頁面大小等屬性,以及按特定的字段排序等選項。
關鍵詞: