DRF 框架總結 - 分頁 Pagination
阿新 • • 發佈:2018-12-24
分頁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