37 lines
1.5 KiB
Python
37 lines
1.5 KiB
Python
from rest_framework.pagination import PageNumberPagination
|
||
from rest_framework.response import Response
|
||
|
||
class StandardResultsSetPagination(PageNumberPagination):
|
||
"""标准分页器,支持标准响应格式"""
|
||
page_size = 10
|
||
page_size_query_param = 'page_size'
|
||
max_page_size = 100
|
||
|
||
def get_paginated_response(self, data):
|
||
"""
|
||
返回标准格式的分页响应
|
||
|
||
Args:
|
||
data: 已经封装为标准格式的响应数据
|
||
"""
|
||
# 如果data已经是标准格式{code, message, data},则用data['data']取出实际数据
|
||
actual_data = data.get('data') if isinstance(data, dict) and 'data' in data else data
|
||
|
||
# 准备分页元数据
|
||
pagination_data = {
|
||
'count': self.page.paginator.count,
|
||
'next': self.get_next_link(),
|
||
'previous': self.get_previous_link(),
|
||
'results': actual_data,
|
||
'total_pages': self.page.paginator.num_pages,
|
||
'current_page': self.page.number,
|
||
}
|
||
|
||
# 如果data是标准格式,则保持原有message和code,否则使用默认值
|
||
response_data = {
|
||
'code': data.get('code', 200) if isinstance(data, dict) and 'code' in data else 200,
|
||
'message': data.get('message', '获取数据成功') if isinstance(data, dict) and 'message' in data else '获取数据成功',
|
||
'data': pagination_data
|
||
}
|
||
|
||
return Response(response_data) |