From 62a28014bbe5e0935a5b18cc15d70186d5be0e80 Mon Sep 17 00:00:00 2001 From: aaron <> Date: Fri, 14 Feb 2025 22:14:36 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E6=A0=BC=E5=BC=8F=E5=8C=96?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E7=9A=84=E6=97=B6=E9=97=B4=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/core/response.py | 40 +++++++++++++++++++++++++++++++++------- app/main.py | 6 ++++-- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/app/core/response.py b/app/core/response.py index 21165fe..4adcfa8 100644 --- a/app/core/response.py +++ b/app/core/response.py @@ -1,21 +1,47 @@ from typing import Any, Optional from fastapi.responses import JSONResponse -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict +from datetime import datetime +from typing import TypeVar, Generic +from fastapi import status +import json + +class CustomJSONEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, datetime): + return obj.strftime('%Y-%m-%d %H:%M:%S') + return super().default(obj) + +class CustomJSONResponse(JSONResponse): + def render(self, content) -> bytes: + return json.dumps( + content, + ensure_ascii=False, + allow_nan=False, + indent=None, + separators=(",", ":"), + cls=CustomJSONEncoder + ).encode("utf-8") + class ResponseModel(BaseModel): - code: int = 200 + code: int = status.HTTP_200_OK message: str = "success" data: Optional[Any] = None -def success_response(*, data: Any = None, message: str = "success") -> dict: + def json_response(self): + return CustomJSONResponse(content=self.model_dump()) + + +def success_response(*, data: Any = None, message: str = "success") -> CustomJSONResponse: return ResponseModel( - code=200, + code=status.HTTP_200_OK, message=message, data=data - ).model_dump() + ).json_response() -def error_response(*, code: int = 400, message: str) -> dict: +def error_response(*, code: int = 400, message: str) -> CustomJSONResponse: return ResponseModel( code=code, message=message - ).model_dump() \ No newline at end of file + ).json_response() \ No newline at end of file diff --git a/app/main.py b/app/main.py index c09505f..0c2cccf 100644 --- a/app/main.py +++ b/app/main.py @@ -7,6 +7,7 @@ from fastapi.responses import JSONResponse from app.core.response import error_response from fastapi import HTTPException from app.middleware.request_logger import RequestLoggerMiddleware +from app.core.response import CustomJSONResponse # 创建数据库表 Base.metadata.create_all(bind=engine) @@ -14,8 +15,9 @@ Base.metadata.create_all(bind=engine) app = FastAPI( title="Beefast 蜂快到家", description="API 文档", - version="1.0.0" -) + version="1.0.0") + +app.default_response_class = CustomJSONResponse # 配置 CORS app.add_middleware(