Files
RuoYi-Vue3-FastAPI/ruoyi-fastapi-backend/utils/response_util.py
2024-07-13 18:15:35 +08:00

194 lines
7.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from datetime import datetime
from fastapi import status
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse, Response, StreamingResponse
from pydantic import BaseModel
from typing import Any, Dict, Optional
from config.constant import HttpStatusConstant
class ResponseUtil:
"""
响应工具类
"""
@classmethod
def success(
cls,
msg: str = '操作成功',
data: Optional[Any] = None,
rows: Optional[Any] = None,
dict_content: Optional[Dict] = None,
model_content: Optional[BaseModel] = None,
) -> Response:
"""
成功响应方法
:param msg: 可选,自定义成功响应信息
:param data: 可选成功响应结果中属性为data的值
:param rows: 可选成功响应结果中属性为rows的值
:param dict_content: 可选dict类型成功响应结果中自定义属性的值
:param model_content: 可选BaseModel类型成功响应结果中自定义属性的值
:return: 成功响应结果
"""
result = {'code': HttpStatusConstant.SUCCESS, 'msg': msg}
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()})
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder(result))
@classmethod
def failure(
cls,
msg: str = '操作失败',
data: Optional[Any] = None,
rows: Optional[Any] = None,
dict_content: Optional[Dict] = None,
model_content: Optional[BaseModel] = None,
) -> Response:
"""
失败响应方法
:param msg: 可选,自定义失败响应信息
:param data: 可选失败响应结果中属性为data的值
:param rows: 可选失败响应结果中属性为rows的值
:param dict_content: 可选dict类型失败响应结果中自定义属性的值
:param model_content: 可选BaseModel类型失败响应结果中自定义属性的值
:return: 失败响应结果
"""
result = {'code': HttpStatusConstant.WARN, 'msg': msg}
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()})
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder(result))
@classmethod
def unauthorized(
cls,
msg: str = '登录信息已过期,访问系统资源失败',
data: Optional[Any] = None,
rows: Optional[Any] = None,
dict_content: Optional[Dict] = None,
model_content: Optional[BaseModel] = None,
) -> Response:
"""
未认证响应方法
:param msg: 可选,自定义未认证响应信息
:param data: 可选未认证响应结果中属性为data的值
:param rows: 可选未认证响应结果中属性为rows的值
:param dict_content: 可选dict类型未认证响应结果中自定义属性的值
:param model_content: 可选BaseModel类型未认证响应结果中自定义属性的值
:return: 未认证响应结果
"""
result = {'code': HttpStatusConstant.UNAUTHORIZED, 'msg': msg}
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()})
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder(result))
@classmethod
def forbidden(
cls,
msg: str = '该用户无此接口权限',
data: Optional[Any] = None,
rows: Optional[Any] = None,
dict_content: Optional[Dict] = None,
model_content: Optional[BaseModel] = None,
) -> Response:
"""
未授权响应方法
:param msg: 可选,自定义未授权响应信息
:param data: 可选未授权响应结果中属性为data的值
:param rows: 可选未授权响应结果中属性为rows的值
:param dict_content: 可选dict类型未授权响应结果中自定义属性的值
:param model_content: 可选BaseModel类型未授权响应结果中自定义属性的值
:return: 未授权响应结果
"""
result = {'code': HttpStatusConstant.FORBIDDEN, 'msg': msg}
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()})
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder(result))
@classmethod
def error(
cls,
msg: str = '接口异常',
data: Optional[Any] = None,
rows: Optional[Any] = None,
dict_content: Optional[Dict] = None,
model_content: Optional[BaseModel] = None,
) -> Response:
"""
错误响应方法
:param msg: 可选,自定义错误响应信息
:param data: 可选错误响应结果中属性为data的值
:param rows: 可选错误响应结果中属性为rows的值
:param dict_content: 可选dict类型错误响应结果中自定义属性的值
:param model_content: 可选BaseModel类型错误响应结果中自定义属性的值
:return: 错误响应结果
"""
result = {'code': HttpStatusConstant.ERROR, 'msg': msg}
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()})
return JSONResponse(status_code=status.HTTP_200_OK, content=jsonable_encoder(result))
@classmethod
def streaming(cls, *, data: Any = None):
"""
流式响应方法
:param data: 流式传输的内容
:return: 流式响应结果
"""
return StreamingResponse(status_code=status.HTTP_200_OK, content=data)