1. 程式人生 > >DRF 框架總結 - 分頁 Pagination

DRF 框架總結 - 分頁 Pagination

分頁Pagination

REST framework提供了分頁的支援。

我們可以在配置檔案中設定全域性的分頁方式,如:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS':  'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 100  # 每頁數目
}

也可通過自定義Pagination類,來為檢視新增不同分頁行為。在檢視中通過pagination_class屬性來指明。

class LargeResultsSetPagination
(PageNumberPagination): page_size = 1000 page_size_query_param = 'page_size' max_page_size = 10000 class BookDetailView(RetrieveAPIView): queryset = BookInfo.objects.all() serializer_class = BookInfoSerializer pagination_class = LargeResultsSetPagination



可選分頁器

1) PageNumberPagination

前端訪問網址形式:

GET  http://api.example.org/books/?page=4

可以在子類中定義的屬性:

  • page_size 每頁數目
  • page_query_param 前端傳送的頁數關鍵字名,預設為"page"
  • page_size_query_param 前端傳送的每頁數目關鍵字名,預設為None
  • max_page_size 前端最多能設定的每頁數量
from rest_framework.pagination import PageNumberPagination

class StandardPageNumberPagination
(PageNumberPagination): page_size_query_param = 'page_size' max_page_size = 10 class BookListView(ListAPIView): queryset = BookInfo.objects.all().order_by('id') serializer_class = BookInfoSerializer pagination_class = StandardPageNumberPagination # 127.0.0.1/books/?page=1&page_size=2

2)LimitOffsetPagination

前端訪問網址形式:

GET http://api.example.org/books/?limit=100&offset=400

可以在子類中定義的屬性:

  • default_limit 預設限制,預設值與PAGE_SIZE設定一直
  • limit_query_param limit引數名,預設’limit’
  • offset_query_param offset引數名,預設’offset’
  • max_limit 最大limit限制,預設None
from rest_framework.pagination import LimitOffsetPagination

class BookListView(ListAPIView):
    queryset = BookInfo.objects.all().order_by('id')
    serializer_class = BookInfoSerializer
    pagination_class = LimitOffsetPagination

# 127.0.0.1:8000/books/?offset=3&limit=2