Django?RestFramework?全局異常處理詳解
更新時間:2022年02月28日 09:40:41 作者:桔子檸檬水
這篇文章主要為大家詳細介紹了Django?RestFramework?全局異常處理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
REST framework定義的異常
APIException所有異常的父類ParseError解析錯誤AuthenticationFailed認證失敗NotAuthenticated尚未認證PermissionDenied權(quán)限決絕NotFound未找到MethodNotAllowed請求方式不支持NotAcceptable要獲取的數(shù)據(jù)格式不支持Throttled超過限流次數(shù)ValidationError校驗失敗
一、定義異常處理類
from django.http import JsonResponse
from rest_framework.views import exception_handler as drf_exception_handler
import logging
from django.db import DatabaseError
from redis.exceptions import RedisError
import traceback
# 獲取在配置文件中定義的logger,用來記錄日志
logger = logging.getLogger('django')
def exception_handler(exc, context):
"""
自定義異常處理
:param exc: 異常
:param context: 拋出異常的上下文(包含request請求對象和view視圖對象)
:return: Response響應(yīng)對象
"""
# 調(diào)用drf框架原生的異常處理方法
response = drf_exception_handler(exc, context)
if response is not None:
logger.info('REST_FRAMEWORK處理異常')
# 使用自定義封裝好的方法處理數(shù)據(jù)格式并返回給前端
return response_util.success(response)
view = context['view']
# 打印異常類以及異常的文本信息
logger.error('[%s] %s' % (view, exc))
returnData = {
'code': 500,
'msg': '服務(wù)器錯誤',
'data': ""
}
# 捕獲其他異常,直接返回 500
if isinstance(exc, DatabaseError) or isinstance(exc, RedisError):
# 數(shù)據(jù)庫異常,使用traceback.format_exc()可以像系統(tǒng)報錯沒攔截那樣子打印詳細錯誤信息又不會導(dǎo)致程序停止
logger.error(f'其他未知錯誤:{traceback.format_exc()}')
# 使用django原生的響應(yīng)對象返回,不能用DRF框架的響應(yīng)對象
return JsonResponse(data=returnData, status=500)
else:
# 打印錯誤詳細信息
logger.error(f'其他未知錯誤:{traceback.format_exc()}')
# 使用django原生的響應(yīng)對象返回,不能用DRF框架的響應(yīng)對象
return JsonResponse(data=returnData, status=500)
二、注冊DRF框架中默認的錯誤處理為自己定義的類
在settings.py文件中定義
REST_FRAMEWORK = {
# 異常處理
'EXCEPTION_HANDLER': 'meiduo_service.utils.excepitons.exception_handler',
}
修改django默認處理了錯誤對象類似,將錯誤處理對象改為用中間件即可,處理的邏輯思路一樣,不過類以及設(shè)置方法不一樣而已
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
pycharm自定義TODO類注釋以及高亮顏色的設(shè)置方法
這篇文章主要介紹了pycharm自定義TODO類注釋以及高亮顏色的設(shè)置方法,文中通過圖文結(jié)合的方式給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下2024-03-03
ansible動態(tài)Inventory主機清單配置遇到的坑
這篇文章主要介紹了ansible動態(tài)Inventory主機清單配置遇到的坑,需要的朋友可以參考下2020-01-01
Python基礎(chǔ)之循環(huán)語句相關(guān)知識總結(jié)
今天給大家?guī)淼氖顷P(guān)于Python基礎(chǔ)的相關(guān)知識,文章圍繞著Python循環(huán)語句展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下2021-06-06
Python中使用NumPy進行數(shù)據(jù)處理方式
這篇文章主要介紹了Python中使用NumPy進行數(shù)據(jù)處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02

