You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
194 lines
7.0 KiB
194 lines
7.0 KiB
7 months ago
|
from datetime import datetime
|
||
1 year ago
|
from fastapi import status
|
||
|
from fastapi.encoders import jsonable_encoder
|
||
7 months ago
|
from fastapi.responses import JSONResponse, Response, StreamingResponse
|
||
1 year ago
|
from pydantic import BaseModel
|
||
7 months ago
|
from typing import Any, Dict, Optional
|
||
7 months ago
|
from config.constant import HttpStatusConstant
|
||
1 year ago
|
|
||
|
|
||
|
class ResponseUtil:
|
||
|
"""
|
||
|
响应工具类
|
||
|
"""
|
||
|
|
||
|
@classmethod
|
||
7 months ago
|
def success(
|
||
|
cls,
|
||
|
msg: str = '操作成功',
|
||
|
data: Optional[Any] = None,
|
||
|
rows: Optional[Any] = None,
|
||
|
dict_content: Optional[Dict] = None,
|
||
|
model_content: Optional[BaseModel] = None,
|
||
|
) -> Response:
|
||
1 year ago
|
"""
|
||
|
成功响应方法
|
||
7 months ago
|
|
||
1 year ago
|
:param msg: 可选,自定义成功响应信息
|
||
|
:param data: 可选,成功响应结果中属性为data的值
|
||
|
:param rows: 可选,成功响应结果中属性为rows的值
|
||
|
:param dict_content: 可选,dict类型,成功响应结果中自定义属性的值
|
||
|
:param model_content: 可选,BaseModel类型,成功响应结果中自定义属性的值
|
||
|
:return: 成功响应结果
|
||
|
"""
|
||
7 months ago
|
result = {'code': HttpStatusConstant.SUCCESS, 'msg': msg}
|
||
1 year ago
|
|
||
|
if data is not None:
|
||
|
result['data'] = data
|
||
|
if rows is not None:
|
||
|
result['rows'] = rows
|
||
|
if dict_content is not None:
|
||
|
result.update(dict_content)
|
||
|
if model_content is not None:
|
||
|
result.update(model_content.model_dump(by_alias=True))
|
||
|
|
||
|
result.update({'success': True, 'time': datetime.now()})
|
||
|
|
||
7 months ago
|
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder(result))
|
||
1 year ago
|
|
||
|
@classmethod
|
||
7 months ago
|
def failure(
|
||
|
cls,
|
||
|
msg: str = '操作失败',
|
||
|
data: Optional[Any] = None,
|
||
|
rows: Optional[Any] = None,
|
||
|
dict_content: Optional[Dict] = None,
|
||
|
model_content: Optional[BaseModel] = None,
|
||
|
) -> Response:
|
||
1 year ago
|
"""
|
||
|
失败响应方法
|
||
7 months ago
|
|
||
1 year ago
|
:param msg: 可选,自定义失败响应信息
|
||
|
:param data: 可选,失败响应结果中属性为data的值
|
||
|
:param rows: 可选,失败响应结果中属性为rows的值
|
||
|
:param dict_content: 可选,dict类型,失败响应结果中自定义属性的值
|
||
|
:param model_content: 可选,BaseModel类型,失败响应结果中自定义属性的值
|
||
|
:return: 失败响应结果
|
||
|
"""
|
||
7 months ago
|
result = {'code': HttpStatusConstant.WARN, 'msg': msg}
|
||
1 year ago
|
|
||
|
if data is not None:
|
||
|
result['data'] = data
|
||
|
if rows is not None:
|
||
|
result['rows'] = rows
|
||
|
if dict_content is not None:
|
||
|
result.update(dict_content)
|
||
|
if model_content is not None:
|
||
|
result.update(model_content.model_dump(by_alias=True))
|
||
|
|
||
|
result.update({'success': False, 'time': datetime.now()})
|
||
|
|
||
7 months ago
|
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder(result))
|
||
1 year ago
|
|
||
|
@classmethod
|
||
7 months ago
|
def unauthorized(
|
||
|
cls,
|
||
|
msg: str = '登录信息已过期,访问系统资源失败',
|
||
|
data: Optional[Any] = None,
|
||
|
rows: Optional[Any] = None,
|
||
|
dict_content: Optional[Dict] = None,
|
||
|
model_content: Optional[BaseModel] = None,
|
||
|
) -> Response:
|
||
1 year ago
|
"""
|
||
|
未认证响应方法
|
||
7 months ago
|
|
||
1 year ago
|
:param msg: 可选,自定义未认证响应信息
|
||
|
:param data: 可选,未认证响应结果中属性为data的值
|
||
|
:param rows: 可选,未认证响应结果中属性为rows的值
|
||
|
:param dict_content: 可选,dict类型,未认证响应结果中自定义属性的值
|
||
|
:param model_content: 可选,BaseModel类型,未认证响应结果中自定义属性的值
|
||
|
:return: 未认证响应结果
|
||
|
"""
|
||
7 months ago
|
result = {'code': HttpStatusConstant.UNAUTHORIZED, 'msg': msg}
|
||
1 year ago
|
|
||
|
if data is not None:
|
||
|
result['data'] = data
|
||
|
if rows is not None:
|
||
|
result['rows'] = rows
|
||
|
if dict_content is not None:
|
||
|
result.update(dict_content)
|
||
|
if model_content is not None:
|
||
|
result.update(model_content.model_dump(by_alias=True))
|
||
|
|
||
|
result.update({'success': False, 'time': datetime.now()})
|
||
|
|
||
7 months ago
|
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder(result))
|
||
1 year ago
|
|
||
|
@classmethod
|
||
7 months ago
|
def forbidden(
|
||
|
cls,
|
||
|
msg: str = '该用户无此接口权限',
|
||
|
data: Optional[Any] = None,
|
||
|
rows: Optional[Any] = None,
|
||
|
dict_content: Optional[Dict] = None,
|
||
|
model_content: Optional[BaseModel] = None,
|
||
|
) -> Response:
|
||
1 year ago
|
"""
|
||
7 months ago
|
未授权响应方法
|
||
|
|
||
|
:param msg: 可选,自定义未授权响应信息
|
||
|
:param data: 可选,未授权响应结果中属性为data的值
|
||
|
:param rows: 可选,未授权响应结果中属性为rows的值
|
||
|
:param dict_content: 可选,dict类型,未授权响应结果中自定义属性的值
|
||
|
:param model_content: 可选,BaseModel类型,未授权响应结果中自定义属性的值
|
||
|
:return: 未授权响应结果
|
||
1 year ago
|
"""
|
||
7 months ago
|
result = {'code': HttpStatusConstant.FORBIDDEN, 'msg': msg}
|
||
1 year ago
|
|
||
|
if data is not None:
|
||
|
result['data'] = data
|
||
|
if rows is not None:
|
||
|
result['rows'] = rows
|
||
|
if dict_content is not None:
|
||
|
result.update(dict_content)
|
||
|
if model_content is not None:
|
||
|
result.update(model_content.model_dump(by_alias=True))
|
||
|
|
||
|
result.update({'success': False, 'time': datetime.now()})
|
||
|
|
||
7 months ago
|
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder(result))
|
||
1 year ago
|
|
||
|
@classmethod
|
||
7 months ago
|
def error(
|
||
|
cls,
|
||
|
msg: str = '接口异常',
|
||
|
data: Optional[Any] = None,
|
||
|
rows: Optional[Any] = None,
|
||
|
dict_content: Optional[Dict] = None,
|
||
|
model_content: Optional[BaseModel] = None,
|
||
|
) -> Response:
|
||
1 year ago
|
"""
|
||
|
错误响应方法
|
||
7 months ago
|
|
||
1 year ago
|
:param msg: 可选,自定义错误响应信息
|
||
|
:param data: 可选,错误响应结果中属性为data的值
|
||
|
:param rows: 可选,错误响应结果中属性为rows的值
|
||
|
:param dict_content: 可选,dict类型,错误响应结果中自定义属性的值
|
||
|
:param model_content: 可选,BaseModel类型,错误响应结果中自定义属性的值
|
||
|
:return: 错误响应结果
|
||
|
"""
|
||
7 months ago
|
result = {'code': HttpStatusConstant.ERROR, 'msg': msg}
|
||
1 year ago
|
|
||
|
if data is not None:
|
||
|
result['data'] = data
|
||
|
if rows is not None:
|
||
|
result['rows'] = rows
|
||
|
if dict_content is not None:
|
||
|
result.update(dict_content)
|
||
|
if model_content is not None:
|
||
|
result.update(model_content.model_dump(by_alias=True))
|
||
|
|
||
|
result.update({'success': False, 'time': datetime.now()})
|
||
|
|
||
7 months ago
|
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder(result))
|
||
1 year ago
|
|
||
|
@classmethod
|
||
|
def streaming(cls, *, data: Any = None):
|
||
|
"""
|
||
|
流式响应方法
|
||
7 months ago
|
|
||
1 year ago
|
:param data: 流式传输的内容
|
||
|
:return: 流式响应结果
|
||
|
"""
|
||
7 months ago
|
return StreamingResponse(status_code=status.HTTP_200_OK, content=data)
|