Files
FastapiAdmin/backend/app/common/response.py
T
zhangtao 279f547f84 refactor: 重构代码结构并优化命名一致性
feat(backend): 新增模块示例和路径配置
fix(backend): 修复菜单模型名称唯一性约束
refactor(backend): 重构日志模块和路径配置
style(backend): 统一API方法命名规范
refactor(frontend): 重构API方法命名规范
fix(frontend): 修复权限校验问题
refactor: 移动定时任务测试文件到正确模块
docs: 更新模板文件路径
refactor: 优化日志记录和错误处理
fix: 修复排序默认值问题
2025-11-19 02:24:16 +08:00

159 lines
4.6 KiB
Python

# -*- coding: utf-8 -*-
from typing import Any, Mapping, Optional
from fastapi import status
from fastapi.responses import JSONResponse, StreamingResponse, FileResponse
from starlette.background import BackgroundTask
from pydantic import Field, BaseModel
from app.common.constant import RET
class ResponseSchema(BaseModel):
"""响应模型"""
code: int = Field(default=RET.OK.code, description="业务状态码")
msg: str = Field(default=RET.OK.msg, description="响应消息")
data: Optional[Any] = Field(default=None, description="响应数据")
status_code: int = Field(default=status.HTTP_200_OK, description="HTTP状态码")
success: bool = Field(default=True, description='操作是否成功')
class SuccessResponse(JSONResponse):
"""成功响应类"""
def __init__(
self,
data: Optional[Any] = None,
msg: str = RET.OK.msg,
code: int = RET.OK.code,
status_code: int = status.HTTP_200_OK,
success: bool = True
) -> None:
"""
初始化成功响应类
参数:
- data (Any | None): 响应数据。
- msg (str): 响应消息。
- code (int): 业务状态码。
- status_code (int): HTTP 状态码。
- success (bool): 操作是否成功。
返回:
- None
"""
content = ResponseSchema(
code=code,
msg=msg,
data=data,
status_code=status_code,
success=success
).model_dump()
super().__init__(content=content, status_code=status_code)
class ErrorResponse(JSONResponse):
"""错误响应类"""
def __init__(
self,
data: Optional[Any] = None,
msg: str = RET.ERROR.msg,
code: int = RET.ERROR.code,
status_code: int = status.HTTP_400_BAD_REQUEST,
success: bool = False
) -> None:
"""
初始化错误响应类
参数:
- data (Any | None): 响应数据。
- msg (str): 响应消息。
- code (int): 业务状态码。
- status_code (int): HTTP 状态码。
- success (bool): 操作是否成功。
返回:
- None
"""
content = ResponseSchema(
code=code,
msg=msg,
data=data,
status_code=status_code,
success=success
).model_dump()
super().__init__(content=content, status_code=status_code)
class StreamResponse(StreamingResponse):
"""流式响应类"""
def __init__(
self,
data: Any = None,
status_code: int = status.HTTP_200_OK,
headers: Mapping[str, str] | None = None,
media_type: str | None = None,
background: BackgroundTask | None = None
) -> None:
"""
初始化流式响应类
参数:
- data (Any): 响应数据。
- status_code (int): HTTP 状态码。
- headers (Mapping[str, str] | None): 响应头。
- media_type (str | None): 媒体类型。
- background (BackgroundTask | None): 后台任务。
返回:
- None
"""
super().__init__(
content=data,
status_code=status_code,
media_type=media_type, # 文件类型
headers=headers, # 文件名
background=background # 文件大小
)
class UploadFileResponse(FileResponse):
"""
文件响应
"""
def __init__(
self,
file_path: str,
filename: str,
media_type: str = "application/octet-stream",
headers: Optional[Mapping[str, str]] = None,
background: Optional[BackgroundTask] = None,
status_code: int = 200
):
"""
初始化文件响应类
参数:
- file_path (str): 文件路径。
- filename (str): 文件名。
- media_type (str): 文件类型。
- headers (Mapping[str, str] | None): 响应头。
- background (BackgroundTask | None): 后台任务。
- status_code (int): HTTP 状态码。
返回:
- None
"""
super().__init__(
path=file_path,
status_code=status_code,
headers=headers,
media_type=media_type,
background=background,
filename=filename,
stat_result=None,
method=None,
content_disposition_type="attachment"
)