mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-21 04:46:26 +00:00
- 移除原监控仪表盘独立模块,将相关功能合并到在线监控模块 - 重构租户配置字段名,统一使用logo_url和name替代tenant_logo/tenant_name - 优化搜索工具函数,移除重复导入 - 调整参数配置模型字段长度限制,移除config_value的max_length约束 - 清理冗余的常量定义和导入语句 - 修复批量状态设置接口的redis依赖注入 - 增强OAuth登录安全性,添加租户默认归属和state一次性消费 - 优化资源目录缓存逻辑,减少重复计算 - 新增API Token模块基础框架 - 完善用户token版本管理,支持主动失效JWT - 调整AI模型配置缓存过期时间 - 修复菜单类型字段索引,提升查询性能 - 简化前端刷新token调用逻辑 - 新增滑块验证完成接口和忘记密码验证码校验 - 调整系统配置默认值,添加操作日志保留天数和接口白名单配置 - 限制Mock支付回调仅在开发环境可用 - 重构websocket认证方式,支持更安全的subprotocol传参
60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
from typing import Any
|
|
|
|
from app.common.enums import RET
|
|
from app.core.base_schema import PageResultSchema
|
|
from app.core.exceptions import CustomException
|
|
|
|
|
|
class PaginationService:
|
|
"""分页服务类(仅用于无法 SQL OFFSET/LIMIT 的数据源,如 Redis、本地文件列表、ORM 反射全量表名等)。"""
|
|
|
|
@staticmethod
|
|
async def paginate(
|
|
data_list: list[Any],
|
|
page_no: int | None = None,
|
|
page_size: int | None = None,
|
|
) -> Any:
|
|
"""对已在内存中的列表做切片分页。
|
|
关系型表列表请使用 CRUDBase.page(数据库分页)。
|
|
|
|
参数:
|
|
- data_list (list[Any]): 原始数据列表。
|
|
- page_no (int | None): 当前页码,默认 None。
|
|
- page_size (int | None): 每页数据量,默认 None。
|
|
|
|
返回:
|
|
- PageResultSchema[Any]: 分页结果对象。
|
|
|
|
异常:
|
|
- CustomException: 当分页参数不合法时抛出。
|
|
"""
|
|
total = len(data_list)
|
|
|
|
# 设置默认值
|
|
if page_no is None:
|
|
page_no = 1
|
|
if page_size is None:
|
|
page_size = 10
|
|
|
|
# 验证分页参数
|
|
if page_no < 1 or page_size < 1:
|
|
raise CustomException(code=RET.ERROR.code, msg="分页参数不合法")
|
|
|
|
# 计算起始索引和结束索引
|
|
start = (page_no - 1) * page_size
|
|
end = min(start + page_size, total)
|
|
|
|
# 根据计算得到的起始索引和结束索引对数据列表进行切片
|
|
paginated_data = data_list[start:end]
|
|
|
|
# 判断是否有下一页
|
|
has_next = end < total
|
|
|
|
return PageResultSchema(
|
|
items=paginated_data,
|
|
total=total,
|
|
page_no=page_no,
|
|
page_size=page_size,
|
|
has_next=has_next,
|
|
)
|