功能变化: 分页bug修复

This commit is contained in:
猿小天
2023-02-13 16:09:04 +08:00
parent 32dbdefde8
commit a3460cf8d4
5 changed files with 60 additions and 14 deletions

View File

@@ -10,7 +10,7 @@
from collections import OrderedDict from collections import OrderedDict
from django.core import paginator from django.core import paginator
from django.core.paginator import Paginator as DjangoPaginator from django.core.paginator import Paginator as DjangoPaginator, InvalidPage
from rest_framework.pagination import PageNumberPagination from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response from rest_framework.response import Response
@@ -21,23 +21,61 @@ class CustomPagination(PageNumberPagination):
max_page_size = 999 max_page_size = 999
django_paginator_class = DjangoPaginator django_paginator_class = DjangoPaginator
def paginate_queryset(self, queryset, request, view=None):
"""
Paginate a queryset if required, either returning a
page object, or `None` if pagination is not configured for this view.
"""
empty = True
page_size = self.get_page_size(request)
if not page_size:
return None
paginator = self.django_paginator_class(queryset, page_size)
page_number = request.query_params.get(self.page_query_param, 1)
if page_number in self.last_page_strings:
page_number = paginator.num_pages
try:
self.page = paginator.page(page_number)
except InvalidPage as exc:
# msg = self.invalid_page_message.format(
# page_number=page_number, message=str(exc)
# )
# raise NotFound(msg)
empty = False
pass
if paginator.num_pages > 1 and self.template is not None:
# The browsable API should display pagination controls.
self.display_page_controls = True
self.request = request
if not empty:
self.page = []
return list(self.page)
def get_paginated_response(self, data): def get_paginated_response(self, data):
code = 2000 code = 2000
msg = 'success' msg = 'success'
res = { page =int(self.get_page_number(self.request, paginator)) or 1
"page": int(self.get_page_number(self.request, paginator)) or 1, total=self.page.paginator.count if self.page else 0
"total": self.page.paginator.count, limit= int(self.get_page_size(self.request)) or 10
"limit": int(self.get_page_size(self.request)) or 10, data=data
"data": data
}
if not data: if not data:
code = 2000 code = 2000
msg = "暂无数据" msg = "暂无数据"
res['data'] = [] data = []
return Response(OrderedDict([ return Response(OrderedDict([
('code', code), ('code', code),
('msg', msg), ('msg', msg),
# ('total',self.page.paginator.count), ('page', page),
('data', res), ('limit', limit),
('total',total),
('data', data)
])) ]))

View File

@@ -80,7 +80,7 @@ class CustomModelViewSet(ModelViewSet, ImportSerializerMixin, ExportSerializerMi
page = self.paginate_queryset(queryset) page = self.paginate_queryset(queryset)
if page is not None: if page is not None:
serializer = self.get_serializer(page, many=True, request=request) serializer = self.get_serializer(page, many=True, request=request)
return SuccessResponse(serializer.data, msg="获取成功") return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True, request=request) serializer = self.get_serializer(queryset, many=True, request=request)
return SuccessResponse(data=serializer.data, msg="获取成功") return SuccessResponse(data=serializer.data, msg="获取成功")

View File

@@ -5,12 +5,20 @@ import { errorLog, errorCreate } from "./tools.ts";
// import { env } from "/src/utils/util.env"; // import { env } from "/src/utils/util.env";
// import { useUserStore } from "../store/modules/user"; // import { useUserStore } from "../store/modules/user";
import { Local, Session } from '/@/utils/storage'; import { Local, Session } from '/@/utils/storage';
import qs from "qs";
/** /**
* @description 创建请求实例 * @description 创建请求实例
*/ */
function createService() { function createService() {
// 创建一个 axios 实例 // 创建一个 axios 实例
const service = axios.create(); const service = axios.create({
timeout: 20000,
paramsSerializer: {
serialize(params) {
return qs.stringify(params, { allowDots: true });
},
},
});
// 请求拦截 // 请求拦截
service.interceptors.request.use( service.interceptors.request.use(
(config) => config, (config) => config,

View File

@@ -6,7 +6,7 @@ export function GetList(query: PageQuery) {
return request({ return request({
url: apiPrefix, url: apiPrefix,
method: 'get', method: 'get',
data: query, params: query,
}); });
} }
export function GetObj(id: InfoReq) { export function GetObj(id: InfoReq) {

View File

@@ -6,7 +6,7 @@ export function GetList(query: PageQuery) {
return request({ return request({
url: apiPrefix, url: apiPrefix,
method: 'get', method: 'get',
data: query, params: query,
}); });
} }
export function GetObj(id: InfoReq) { export function GetObj(id: InfoReq) {