"""定义统一 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" )