代码拉取完成,页面将自动刷新
同步操作将从 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 math
import inspect
from functools import wraps
from typing import Generic, TypeVar, Sequence, Callable, Any
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse
from pydantic import BaseModel, Field
from common.enums.errors import ErrorEnum
T = 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_factory=list, description="数据")
@classmethod
def success(cls, msg: str = "OK", data: Any = None, code: int = 0):
if data is None:
data = []
return cls(code=code, msg=msg, data=data)
@classmethod
def 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="分页数据")
@classmethod
def 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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。