我們自己封裝的一些東西,往往放在一個utils檔案夾內,以后也方便管理和匯入

后臺response封裝
# 自己封裝的Response物件
from rest_framework.response import Response
class APIResponse(Response):
def __init__(self,code=1,msg='成功',result=None,status=None,headers=None,content_type=None,**kwargs):
dic = {
'code':code,
'msg':msg
}
if result:
dic['result']=result
dic.update(kwargs)
super().__init__(data=https://www.cnblogs.com/suncolor/p/dic,status=status,headers=headers,content_type=content_type)
自己封裝的例外處理
# 這里用來放全域例外
# 這個方法可以從rest_framework里的settings.py里找到它的配置,然后匯入就行,重寫該方法
from rest_framework.views import exception_handler
from . import response # 匯入自己定義的回應物件
from .logger import log #匯入自己定義的日志物件
def common_exception_handler(exc, context):
# 記錄以下報錯資訊到日志中
# context['view']可以取到具體是哪個視圖出了錯
log.error('view是:%s,錯誤是:%s' %(context['view'].__class__.__name__,str(exc)))
# 先呼叫一下原來的exception_handler方法
ret = exception_handler(exc, context) # ret是一個Response物件,其內部有一個data屬性,放的就是錯誤資訊
# 這個表示如果drf處理不了的例外(交給django處理的例外),我們進行處理一下
if not ret:
# 這里面也可以放更多其他邏輯,具體對于會出現的例外進行分類處理
# 比如下面這樣
# if isinstance(exc,KeyError):
return response.APIResponse(code=0,msg='error',result=str(exc))
else:
# ret.data是一個字典,字典里是drf處理的例外資訊
return response.APIResponse(code=0,msg='error',result=ret.data)
封裝完畢之后,還需要在settings里配置一下,告訴drf采用我們封裝的例外處理
# 放自己的全域例外
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'luffyapi.utils.exceptions.common_exception_handler',
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/525867.html
標籤:Python
