同步操作将从 zero/WaitAdmin开源后台系统(Python版) 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# +----------------------------------------------------------------------# | WaitAdmin(fastapi)快速开发后台管理系统# +----------------------------------------------------------------------# | 欢迎阅读学习程序代码,建议反馈是我们前进的动力# | 程序完全开源可支持商用,允许去除界面版权信息# | gitee: https://gitee.com/wafts/waitadmin-python# | github: https://github.com/topwait/waitadmin-python# | 官方网站: https://www.waitadmin.cn# | WaitAdmin团队版权所有并拥有最终解释权# +----------------------------------------------------------------------# | Author: WaitAdmin Team <2474369941@qq.com># +----------------------------------------------------------------------import mathimport inspectfrom functools import wrapsfrom typing import Generic, TypeVar, Sequence, Callable, Anyfrom fastapi.encoders import jsonable_encoderfrom fastapi.responses import JSONResponsefrom pydantic import BaseModel, Fieldfrom common.enums.errors import ErrorEnumT = TypeVar("T")class R(BaseModel, Generic[T]):""" 响应工具类 """code: int = Field(default=ErrorEnum.SUCCESS.code, description="状态")msg: str = Field(default=ErrorEnum.SUCCESS.msg, description="提示")data: T = Field(default=[T], description="数据")@classmethoddef success(cls, msg: str = "OK", data: Any = None, code: int = 0):if data is None:data = []return cls(code=code, msg=msg, data=data)@classmethoddef fail(cls, msg: str = "FAIL", data: Any = None, code: int = 1):if data is None:data = []return cls(code=code, msg=msg, data=data)class PagingResult(BaseModel, Generic[T]):""" 分页结果封装 """current_page: int = Field(default=1, description="当前页码")last_page: int = Field(default=1, description="最后页码")per_page: int = Field(default=20, description="每页数据")total: int = Field(default=1, description="数据总量")extend: Sequence[T] = Field(default=[], description="扩展信息")lists: Sequence[T] = Field(description="分页数据")@classmethoddef create(cls, data: Sequence[T], total: int, page_no: int, page_size: int) -> "PagingResult[T]":last_page = math.ceil(total / page_size)return cls(lists=data, total=total, current_page=page_no, per_page=page_size, last_page=last_page)def response_json(func: Callable[..., T]) -> Callable[..., T]:""" 统一响应格式 """@wraps(func)async def wrapper(*args, **kwargs) -> T:if inspect.iscoroutinefunction(func):resp = await func(*args, **kwargs) or []else:resp = func(*args, **kwargs) or []return JSONResponse(content=jsonable_encoder(R.success(data=resp).dict(),by_alias=False),media_type="application/json;charset=utf-8")return wrapper
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。