1. 程式人生 > >Django REST framework分頁

Django REST framework分頁

分頁Pagination

REST framework提供了分頁的支援。

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

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

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

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

注意:如果在檢視內關閉分頁功能,只需在檢視內設定

pagination_class = None
可選分頁器
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

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