# +====================================================================== # | DjangoAdmin 企业数字化开发平台 [ 赋能开发者,助力企业发展 ] # +---------------------------------------------------------------------- # | Copyright (c) 2021-2026 一米阳光团队 版权所有 # | 开源协议: Apache-2.0 # +====================================================================== """分页统一封装:解析 pageNo/pageSize 并对 SQLAlchemy query 应用分页。""" from shared.constants import PAGE_SIZE def get_page_params(query_params, default_size: int = PAGE_SIZE) -> tuple[int, int]: """ 从 request.query_params 解析分页参数。 Args: query_params: request.query_params(类 dict 对象) default_size: 默认每页条数 Returns: (page, size):page>=1,size>=1 """ try: page = int(query_params.get('pageNo', 1) or 1) except (TypeError, ValueError): page = 1 try: size = int(query_params.get('pageSize', default_size) or default_size) except (TypeError, ValueError): size = default_size if page < 1: page = 1 if size < 1: size = default_size return page, size def paginate_query(query, page: int, size: int) -> tuple[list, int]: """ 对 SQLAlchemy query 应用分页并返回 (items, total)。 Args: query: 已构建的 SQLAlchemy Query 对象(不含 count/limit/offset) page: 页码(>=1) size: 每页条数 Returns: (items, total):当前页数据列表与总记录数 """ total = query.count() items = query.limit(size).offset((page - 1) * size).all() return items, total