mirror of
https://github.com/fastapi-practices/fastapi_best_architecture.git
synced 2025-08-18 06:42:51 +08:00
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
from datetime import datetime
|
|
from typing import Any, Union, Set, Dict
|
|
|
|
from fastapi.encoders import jsonable_encoder
|
|
from pydantic import validate_arguments, BaseModel
|
|
|
|
_JsonEncoder = Union[Set[int | str], Dict[int | str, Any]]
|
|
|
|
__all__ = ['ResponseModel', 'response_base']
|
|
|
|
|
|
class ResponseModel(BaseModel):
|
|
"""
|
|
统一返回模型, 可在 FastAPI 接口请求中指定 response_model 及更多操作
|
|
"""
|
|
|
|
code: int = 200
|
|
msg: str = 'Success'
|
|
data: Any | None = None
|
|
|
|
class Config:
|
|
json_encoders = {datetime: lambda x: x.strftime('%Y-%m-%d %H:%M:%S')}
|
|
|
|
|
|
class ResponseBase:
|
|
@staticmethod
|
|
def __encode_json(data: Any):
|
|
return jsonable_encoder(data, custom_encoder={datetime: lambda x: x.strftime('%Y-%m-%d %H:%M:%S')})
|
|
|
|
@staticmethod
|
|
@validate_arguments
|
|
def success(*, code: int = 200, msg: str = 'Success', data: Any | None = None, exclude: _JsonEncoder | None = None):
|
|
"""
|
|
请求成功返回通用方法
|
|
|
|
:param code: 返回状态码
|
|
:param msg: 返回信息
|
|
:param data: 返回数据
|
|
:param exclude: 排除返回数据(data)字段
|
|
:return:
|
|
"""
|
|
data = data if data is None else ResponseBase.__encode_json(data)
|
|
return ResponseModel(code=code, msg=msg, data=data).dict(exclude={'data': exclude})
|
|
|
|
@staticmethod
|
|
@validate_arguments
|
|
def fail(*, code: int = 400, msg: str = 'Bad Request', data: Any = None, exclude: _JsonEncoder | None = None):
|
|
data = data if data is None else ResponseBase.__encode_json(data)
|
|
return ResponseModel(code=code, msg=msg, data=data).dict(exclude={'data': exclude})
|
|
|
|
|
|
response_base = ResponseBase()
|