48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
import os
|
||
from fastapi import Request, status
|
||
from fastapi.exceptions import HTTPException, RequestValidationError
|
||
from fastapi.responses import JSONResponse
|
||
from .logs import getLogger
|
||
|
||
logger = getLogger(os.environ.get('APP_NAME'))
|
||
|
||
|
||
def global_http_exception_handler(request: Request, exc):
|
||
"""
|
||
全局HTTP请求处理异常
|
||
:param request: HTTP请求对象
|
||
:param exc: 本次发生的异常对象
|
||
:return:
|
||
"""
|
||
|
||
# 使用日志记录异常
|
||
logger.error(f"发生异常:{exc.detail}")
|
||
|
||
# 直接返回JSONResponse,避免重新抛出异常导致循环
|
||
return JSONResponse(
|
||
status_code=exc.status_code,
|
||
content={
|
||
'err_msg': exc.detail,
|
||
'status': False
|
||
},
|
||
headers=getattr(exc, 'headers', None)
|
||
)
|
||
|
||
|
||
def global_request_exception_handler(request: Request, exc):
|
||
"""
|
||
全局请求校验异常处理函数
|
||
:param request: HTTP请求对象
|
||
:param exc: 本次发生的异常对象
|
||
:return:
|
||
"""
|
||
|
||
# 直接返回JSONResponse,避免重新抛出异常
|
||
return JSONResponse(
|
||
status_code=status.HTTP_400_BAD_REQUEST,
|
||
content={
|
||
'err_msg': exc.errors()[0],
|
||
'status': False
|
||
}
|
||
)
|