功能变化: 分页bug修复
This commit is contained in:
@@ -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)
|
||||||
]))
|
]))
|
||||||
|
|||||||
@@ -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="获取成功")
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user