40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
"""
|
|
基本的分页器
|
|
"""
|
|
|
|
from rest_framework.exceptions import NotFound
|
|
from rest_framework.pagination import PageNumberPagination
|
|
|
|
|
|
class BasicSetPagination(PageNumberPagination):
|
|
# 默认每页显示的数据条数
|
|
page_size = 10
|
|
|
|
# 获取URL参数中设置的每页显示数据条数
|
|
page_size_query_param = "page_size"
|
|
|
|
# 获取URL参数中传入的页码key
|
|
page_query_param = "page_num"
|
|
|
|
# 最大支持的每页显示的数据条数
|
|
max_page_size = 100
|
|
|
|
def paginate_queryset_data(self, queryset, request, view=None, serializer=None):
|
|
try:
|
|
queryset = super().paginate_queryset(queryset, request=request, view=view)
|
|
ser = serializer(queryset, many=True)
|
|
return ser.data
|
|
except NotFound as e:
|
|
return []
|
|
|
|
def paginate_queryset_count(self, queryset, request, view=None, serializer=None):
|
|
try:
|
|
res = {}
|
|
queryset = super().paginate_queryset(queryset, request=request, view=view)
|
|
ser = serializer(queryset, many=True)
|
|
res["data"] = ser.data
|
|
res["total"] = self.page.paginator.count
|
|
return res
|
|
except NotFound as e:
|
|
return {}
|