daren/apps/template/pagination.py
2025-05-19 18:23:59 +08:00

37 lines
1.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)