@@ -50,42 +50,55 @@ def http_exception_handler(request: Request, exc: HTTPException):
5050 headers = exc .headers ,
5151 )
5252
53+ @app .exception_handler (RequestValidationError )
54+ def validation_exception_handler (request : Request , exc : RequestValidationError ):
55+ """
56+ 数据验证异常处理
57+
58+ :param request:
59+ :param exc:
60+ :return:
61+ """
62+ message = ''
63+ data = {}
64+ for raw_error in exc .raw_errors :
65+ if isinstance (raw_error .exc , ValidationError ):
66+ exc = raw_error .exc
67+ if hasattr (exc , 'model' ):
68+ fields = exc .model .__dict__ .get ('__fields__' )
69+ for field_key in fields .keys ():
70+ field_title = fields .get (field_key ).field_info .title
71+ data [field_key ] = field_title if field_title else field_key
72+ errors_len = len (exc .errors ())
73+ for error in exc .errors ():
74+ field = str (error .get ('loc' )[- 1 ])
75+ _msg = error .get ('msg' )
76+ errors_len = errors_len - 1
77+ message += (
78+ f'{ data .get (field , field )} { _msg } ' + ', '
79+ if errors_len > 0
80+ else f'{ data .get (field , field )} { _msg } '
81+ )
82+ elif isinstance (raw_error .exc , json .JSONDecodeError ):
83+ message += 'json解析失败'
84+ return JSONResponse (
85+ status_code = 422 ,
86+ content = response_base .fail (
87+ code = 422 ,
88+ msg = '请求参数非法' if len (message ) == 0 else f'请求参数非法: { message [:- 1 ]} ' ,
89+ data = {'errors' : exc .errors ()} if message == '' and settings .UVICORN_RELOAD is True else None ,
90+ ),
91+ )
92+
5393 @app .exception_handler (Exception )
54- def all_exception_handler (request : Request , exc ):
94+ def all_exception_handler (request : Request , exc : Exception ):
5595 """
5696 全局异常处理
5797
5898 :param request:
5999 :param exc:
60100 :return:
61101 """
62- # 常规
63- if isinstance (exc , RequestValidationError ):
64- message = ''
65- data = {}
66- for raw_error in exc .raw_errors :
67- if isinstance (raw_error .exc , ValidationError ):
68- exc = raw_error .exc
69- if hasattr (exc , 'model' ):
70- fields = exc .model .__dict__ .get ('__fields__' )
71- for field_key in fields .keys ():
72- field_title = fields .get (field_key ).field_info .title
73- data [field_key ] = field_title if field_title else field_key
74- for error in exc .errors ():
75- field = str (error .get ('loc' )[- 1 ])
76- _msg = error .get ('msg' )
77- message += f'{ data .get (field , field )} { _msg } ,'
78- elif isinstance (raw_error .exc , json .JSONDecodeError ):
79- message += 'json解析失败'
80- return JSONResponse (
81- status_code = 422 ,
82- content = response_base .fail (
83- msg = '请求参数非法' if len (message ) == 0 else f'请求参数非法:{ message [:- 1 ]} ' ,
84- data = {'errors' : exc .errors ()} if message == '' and settings .UVICORN_RELOAD is True else None ,
85- ),
86- )
87-
88- # 自定义
89102 if isinstance (exc , BaseExceptionMixin ):
90103 return JSONResponse (
91104 status_code = _get_exception_code (exc .code ),
0 commit comments