Files
ClassManager/backend/utils/response.py
2026-04-07 17:07:13 +08:00

106 lines
2.6 KiB
Python

# ===========================================
# 班级操行分管理系统 - 后端服务
#
# 开发者: Canglan
# 联系方式: admin@sea-studio.top
# 版权归属: Sea Network Technology Studio
# 许可证: MIT License
#
# 版权所有 © Sea Network Technology Studio
# ===========================================
from typing import Any, Optional, Dict, List
from fastapi.responses import JSONResponse
class ResponseCode:
"""响应状态码"""
SUCCESS = 200
CREATED = 201
BAD_REQUEST = 400
UNAUTHORIZED = 401
FORBIDDEN = 403
NOT_FOUND = 404
CONFLICT = 409
UNPROCESSABLE = 422
INTERNAL_ERROR = 500
def success_response(data: Any = None, message: str = "操作成功") -> JSONResponse:
"""成功响应"""
return JSONResponse(
status_code=ResponseCode.SUCCESS,
content={
"success": True,
"code": ResponseCode.SUCCESS,
"message": message,
"data": data
}
)
def error_response(
message: str = "操作失败",
code: int = ResponseCode.BAD_REQUEST,
data: Any = None
) -> JSONResponse:
"""错误响应"""
return JSONResponse(
status_code=code,
content={
"success": False,
"code": code,
"message": message,
"data": data
}
)
def unauthorized_response(message: str = "未授权,请重新登录") -> JSONResponse:
"""未授权响应"""
return JSONResponse(
status_code=ResponseCode.UNAUTHORIZED,
content={
"success": False,
"code": ResponseCode.UNAUTHORIZED,
"message": message,
"data": None
}
)
def forbidden_response(message: str = "权限不足") -> JSONResponse:
"""禁止访问响应"""
return JSONResponse(
status_code=ResponseCode.FORBIDDEN,
content={
"success": False,
"code": ResponseCode.FORBIDDEN,
"message": message,
"data": None
}
)
def not_found_response(message: str = "资源不存在") -> JSONResponse:
"""资源不存在响应"""
return JSONResponse(
status_code=ResponseCode.NOT_FOUND,
content={
"success": False,
"code": ResponseCode.NOT_FOUND,
"message": message,
"data": None
}
)
def paginated_response(items: List[Any], total: int, page: int, page_size: int) -> Dict:
"""分页响应数据"""
return {
"items": items,
"total": total,
"page": page,
"page_size": page_size,
"total_pages": (total + page_size - 1) // page_size
}