35 lines
1.3 KiB
Python
Executable File
35 lines
1.3 KiB
Python
Executable File
from rest_framework.pagination import PageNumberPagination, _positive_int
|
|
from rest_framework.exceptions import ParseError
|
|
|
|
|
|
class MyPagination(PageNumberPagination):
|
|
"""
|
|
自定义分页/传入page为0则不分页
|
|
"""
|
|
page_size = 10
|
|
page_size_query_param = 'page_size'
|
|
|
|
def get_page_number(self, request, paginator):
|
|
if 'page' in request.data:
|
|
return request.data['page']
|
|
return super().get_page_number(request, paginator)
|
|
|
|
def get_page_size(self, request):
|
|
if 'page_size' in request.data:
|
|
try:
|
|
return _positive_int(
|
|
request.data['page_size'],
|
|
strict=True,
|
|
cutoff=self.max_page_size
|
|
)
|
|
except (KeyError, ValueError):
|
|
pass
|
|
return super().get_page_size(request)
|
|
|
|
def paginate_queryset(self, queryset, request, view=None):
|
|
if request.query_params.get('pageoff', None) or request.query_params.get('page', None) == '0' or request.data.get('page', None) in (0, '0'):
|
|
if queryset.count() < 3000:
|
|
return None
|
|
raise ParseError('单次请求数据量大,请分页获取')
|
|
return super().paginate_queryset(queryset, request, view=view)
|