fix: 重写异常处理逻辑代码
This commit is contained in:
parent
cc6faebddc
commit
722488be7b
|
|
@ -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!"
|
||||
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))
|
||||
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:
|
||||
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):
|
||||
|
|
|
|||
Loading…
Reference in New Issue