44 lines
1.3 KiB
Python
44 lines
1.3 KiB
Python
#!/usr/bin/env python
|
|
# -*- encoding: utf-8 -*-
|
|
|
|
from typing import Optional, Any
|
|
from fastapi import Response
|
|
from pydantic import BaseModel
|
|
|
|
|
|
class ResponseModel(BaseModel):
|
|
"""
|
|
统一返回模型
|
|
"""
|
|
code: int = 200
|
|
msg: str = "Success"
|
|
data: Optional[Any] = None
|
|
|
|
|
|
class ApiResponse:
|
|
@staticmethod
|
|
def __response(code: int, msg: str, data: Optional[Any] = None) -> ResponseModel:
|
|
return ResponseModel(code=code, msg=msg, data=data)
|
|
|
|
@classmethod
|
|
def success(cls, *, code: int = 200, msg: str = 'Success', data: Optional[Any] = None) -> Response:
|
|
response_model = cls.__response(code=code, msg=msg, data=data)
|
|
return cls(content=response_model.model_dump())
|
|
|
|
@classmethod
|
|
def fail(cls, *, code: int = 400, msg: str = 'Bad Request', data: Optional[Any] = None) -> Response:
|
|
response_model = cls.__response(code=code, msg=msg, data=data)
|
|
return cls(content=response_model.model_dump())
|
|
|
|
response_api = ApiResponse()
|
|
|
|
""" 示例
|
|
@app.get("/example-success")
|
|
async def example_success():
|
|
return response_api.success(data={"key": "value"})
|
|
|
|
@app.get("/example-fail")
|
|
async def example_fail():
|
|
return response_api.fail(msg="Something went wrong", data={"error": "details"})
|
|
"""
|