feat: 初始化项目架构
This commit is contained in:
301
ruoyi-fastapi-backend/utils/response_util.py
Normal file
301
ruoyi-fastapi-backend/utils/response_util.py
Normal file
@@ -0,0 +1,301 @@
|
||||
from fastapi import status
|
||||
from fastapi.responses import JSONResponse, Response, StreamingResponse
|
||||
from fastapi.encoders import jsonable_encoder
|
||||
from typing import Any, Dict, Optional
|
||||
from pydantic import BaseModel
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
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': 200,
|
||||
'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': 601,
|
||||
'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': 401,
|
||||
'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': 403,
|
||||
'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': 500,
|
||||
'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
|
||||
)
|
||||
|
||||
|
||||
def response_200(*, data: Any = None, message="获取成功") -> Response:
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_200_OK,
|
||||
content=jsonable_encoder(
|
||||
{
|
||||
'code': 200,
|
||||
'message': message,
|
||||
'data': data,
|
||||
'success': 'true',
|
||||
'time': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def response_400(*, data: Any = None, message: str = "获取失败") -> Response:
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
content=jsonable_encoder(
|
||||
{
|
||||
'code': 400,
|
||||
'message': message,
|
||||
'data': data,
|
||||
'success': 'false',
|
||||
'time': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def response_401(*, data: Any = None, message: str = "获取失败") -> Response:
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
content=jsonable_encoder(
|
||||
{
|
||||
'code': 401,
|
||||
'message': message,
|
||||
'data': data,
|
||||
'success': 'false',
|
||||
'time': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def response_403(*, data: Any = None, message: str = "获取失败") -> Response:
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_403_FORBIDDEN,
|
||||
content=jsonable_encoder(
|
||||
{
|
||||
'code': 403,
|
||||
'message': message,
|
||||
'data': data,
|
||||
'success': 'false',
|
||||
'time': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def response_500(*, data: Any = None, message: str = "接口异常") -> Response:
|
||||
return JSONResponse(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
content=jsonable_encoder(
|
||||
{
|
||||
'code': 500,
|
||||
'message': message,
|
||||
'data': data,
|
||||
'success': 'false',
|
||||
'time': datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def streaming_response_200(*, data: Any = None):
|
||||
return StreamingResponse(
|
||||
status_code=status.HTTP_200_OK,
|
||||
content=data,
|
||||
)
|
||||
|
||||
|
||||
class AuthException(Exception):
|
||||
"""
|
||||
自定义令牌异常AuthException
|
||||
"""
|
||||
|
||||
def __init__(self, data: str = None, message: str = None):
|
||||
self.data = data
|
||||
self.message = message
|
||||
|
||||
|
||||
class PermissionException(Exception):
|
||||
"""
|
||||
自定义权限异常PermissionException
|
||||
"""
|
||||
|
||||
def __init__(self, data: str = None, message: str = None):
|
||||
self.data = data
|
||||
self.message = message
|
||||
|
||||
|
||||
class LoginException(Exception):
|
||||
"""
|
||||
自定义登录异常LoginException
|
||||
"""
|
||||
|
||||
def __init__(self, data: str = None, message: str = None):
|
||||
self.data = data
|
||||
self.message = message
|
Reference in New Issue
Block a user