fix: 重写异常处理逻辑代码

This commit is contained in:
chenwj 2023-01-16 16:41:06 +08:00
parent cc6faebddc
commit 722488be7b
1 changed files with 34 additions and 23 deletions

View File

@ -1,9 +1,12 @@
import logging
from fastapi import Request, status
from fastapi.exceptions import HTTPException, RequestValidationError
from fastapi.responses import JSONResponse
from src.dtos import BaseResponse, ErrorModel
logger = logging.getLogger("uvicorn.error")
class HttpCodeMsg:
REGISTER_USER_ALREADY_EXISTS = "REGISTER_USER_ALREADY_EXISTS"
@ -24,30 +27,38 @@ class HttpCodeMsg:
HTTP_503 = "SERVICE_UNAVAILABLE"
HTTP_504 = "GATEWAY_TIMEOUT"
def request_validation_error_handler(request: Request, exc: RequestValidationError):
def request_validation_error_handler(req: Request, exc: RequestValidationError):
"""
请求响应校验错误处理
:param req:
:param exc:
:return:
"""
errors = exc.errors()
print(errors)
details = []
for error in errors:
err_type = error["type"].split(".")
if len(err_type) == 2:
if err_type[0] == "value_error":
if err_type[1] == "missing":
if len(error["loc"]) == 2:
msg = f"{error['loc'][0]}: '{error['loc'][1]}' is required!"
logger.error(f"{req.method} {req.url} , errors: {errors}")
response_errors = [error for error in errors if error["loc"][0] == "response"]
if len(response_errors) > 0:
message = "接口响应异常 "
else:
msg = "value is missing!"
else:
msg = error["msg"].replace("this value", f"'{error['loc'][1]}' value")
else:
msg = error["msg"]
details.append(msg)
else:
details.append(error["msg"])
err = dict(code=status.HTTP_400_BAD_REQUEST, messages=HttpCodeMsg.HTTP_400, details="; ".join(details))
message = "接口请求异常 "
json_err = [err["msg"] for err in errors if "value_error.jsondecode" == err["type"]]
if json_err:
message += "请求参数JSON编码有误;"
value_err = [err["msg"] for err in errors if "value_error" == err["type"]]
if value_err:
message += "; ".join(value_err)
missing_err = [err["loc"][-1] for err in errors if "value_error.missing" == err["type"]]
if missing_err:
message += "缺少字段:{} ".format(", ".join(missing_err))
type_err = [err["msg"].replace("value", f"{err['loc'][1]}") for err in errors if "type_error" == err["type"]]
if type_err:
message += "; ".join(type_err)
not_none_err = [err["loc"][-1] for err in errors if "type_error.none.not_allowed" == err["type"]]
if not_none_err:
message += "字段:{} 不能为空".format(", ".join(not_none_err))
err = dict(code=status.HTTP_400_BAD_REQUEST, message=message, details=message)
res = BaseResponse(**dict(result=None, error=err))
return JSONResponse(status_code=status.HTTP_400_BAD_REQUEST, content=res.dict())
return JSONResponse(status_code=200, content=res.dict())
def http_exception_handler(request: Request, exc: HTTPException):