Django REST framework分頁
阿新 • • 發佈:2018-12-10
分頁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