Django DRF 分頁
阿新 • • 發佈:2020-12-16
Django DRF 分頁
分頁在DRF當中可以一共有三種,可以通過setttings設定,也可也通過自定義設定
PageNumberPagination
使用URL http://127.0.0.1/CarApi/?page=2&page_size=2
這種分頁是按照頁碼和每頁條數進行分頁的,需要指定頁碼和每頁條數
常用引數
方法 | 描述 |
---|---|
page_size | 每頁資料條數,預設位空,如果settings當中設定了,價值settings當中的配置 |
django_paginator_class | 採用的django分頁器 |
page_query_param | 頁碼引數欄位 |
page_query_description | 頁碼描述 |
page_size_query_param | 頁最大顯示條數字段 |
page_size_query_description | 分頁 |
settings配置
在settings當中編寫配置,填入對應的內容
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10 # 每頁數目
}
這種方法會對當前專案所有的展示生效,如果單個檢視需要關閉,可以進行單獨設定:
pagination_class = None
自定義配置
from rest_framework.pagination import PageNumberPagination class CarPageNumberPagination(PageNumberPagination): page_query_param = "page" page_size_query_param = 'page_size' #前端收到頁面的關鍵字名稱,預設是page max_page_size = 10 #每頁資料個數 class CarViewSet(viewsets.ModelViewSet): queryset = Tc.objects.order_by("-id") serializer_class = CarSerializers pagination_class = CarPageNumberPagination
LimitOffsetPagination
http://127.0.0.1/CarApi/?limit=20&offset=0
這種分頁方法需要設定分頁起始資料位置(offset),資料偏移的量(limit)
常用引數
方法 | 描述 |
---|---|
default_limit | 預設每頁 |
limit_query_param | 在路由上偏移欄位的名稱預設是limit |
limit_query_description | 關於偏移的描述 |
offset_query_param | 分頁起始位置的名稱,預設是offset |
offset_query_description | 分頁起始位置的描述 |
max_limit | 最大偏移量限制 |
settings配置
在settings當中編寫配置,填入對應的內容
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 10 # 每頁數目
}
這種方法會對當前專案所有的展示生效,如果單個檢視需要關閉,可以進行單獨設定:
pagination_class = None
自定義配置
from rest_framework.pagination import LimitOffsetPagination
class CarPageNumberPagination(LimitOffsetPagination):
max_limit = 10 #最大偏移量限制
class CarViewSet(viewsets.ModelViewSet):
queryset = Tc.objects.order_by("-id")
serializer_class = CarSerializers
pagination_class = CarPageNumberPagination
CursorPagination
加密分頁,對上下頁頁碼進行了加密
http://127.0.0.1/CarApi/?cursor=cD0zMjgzMTgx
常用引數
方法 | 描述 |
---|---|
cursor_query_param | 頁碼引數 |
cursor_query_description | 頁碼描述 |
page_size | 每頁資料 |
invalid_cursor_message | 分頁起始位置的名稱,預設是offset |
ordering | 排序,必須設定,否則會報錯 |
page_size_query_param | 頁面資料條數設定 |
settings配置
由於沒有找到排序的引數替代品,所以,暫時沒有找到方法。
自定義配置
class CarPageNumberPagination(CursorPagination):
cursor_query_param = 'cursor'
page_size = 10
ordering = '-id'
class CarViewSet(viewsets.ModelViewSet):
queryset = Tc.objects.order_by("-id")
serializer_class = CarSerializers
pagination_class = CarPageNumberPagination