feat: 接入fastapi

This commit is contained in:
2026-09-29 00:47:57 +08:00
parent e5efaf507d
commit 0fdde8c3e6
10 changed files with 1088 additions and 2 deletions
+40
View File
@@ -0,0 +1,40 @@
"""定义统一 API 响应结构"""
from typing import Any, Generic, TypeVar
from pydantic import BaseModel, field_validator
DataT = TypeVar("DataT")
ResponseData = BaseModel | dict[str, Any] | list[Any] | None
class ApiResponse(BaseModel, Generic[DataT]):
code: int = 0
data: DataT | None = None
msg: str = ""
@field_validator("data")
@classmethod
def validate_data_shape(cls, value: DataT | None) -> DataT | None:
"""限制响应数据为对象、数组或空值"""
if value is not None and not isinstance(value, (BaseModel, dict, list)):
raise ValueError("响应 data 必须为对象、数组或 null")
return value
def success_response(
data: DataT | None = None,
msg: str = "",
) -> ApiResponse[DataT | dict[str, Any]]:
"""构造统一成功响应"""
response_data: DataT | dict[str, Any] = {} if data is None else data
return ApiResponse(code=0, data=response_data, msg=msg)
def error_content(
code: int, msg: str = "请求失败"
) -> dict[str, ResponseData | int | str]:
"""构造统一失败响应内容"""
return ApiResponse[ResponseData](code=code, data=None, msg=msg).model_dump(
mode="json"
)