kangda/app/util/httpResponse.py

52 lines
1.4 KiB
Python

from typing import Generic, TypeVar, Optional, List
# from fastapi import FastAPI, HTTPException, status
from fastapi.responses import JSONResponse
from fastapi.encoders import jsonable_encoder
from pydantic import BaseModel, Field
from pydantic.generics import GenericModel
# 定义泛型类型
T = TypeVar('T')
class BaseResponse(GenericModel, Generic[T]):
code: int = Field(..., description="状态码")
msg: str = Field(..., description="描述信息")
data: Optional[T] = Field(None, description="响应数据")
class Config:
json_encoders = {
# 如果有需要自定义类型编码可以在这里添加
}
def response_format(*, code=200, message="success", data=None):
return JSONResponse(
status_code=code,
content=jsonable_encoder({
"code": code,
"msg": message,
"data": data
})
)
# 可以继承BaseResponse类来扩展字段
class PaginatedResponse(BaseResponse[List[T]]):
total: int
page: int
page_size: int
# # 使用示例
# @router.get("/paginated", response_model=PaginatedResponse[UserSchema])
# async def get_paginated_users():
# users, total = get_paginated_users()
# return PaginatedResponse(
# code=200,
# msg="success",
# data=users,
# total=total,
# page=1,
# page_size=20
# )