后台response和异常处理封装

打印 上一主题 下一主题

主题 897|帖子 897|积分 2691

我们自己封装的一些东西,往往放在一个utils文件夹内,以后也方便管理和导入

后台response封装
  1. # 自己封装的Response对象
  2. from rest_framework.response import Response
  3. class APIResponse(Response):
  4.     def __init__(self,code=1,msg='成功',result=None,status=None,headers=None,content_type=None,**kwargs):
  5.         dic = {
  6.             'code':code,
  7.             'msg':msg
  8.         }
  9.         if result:
  10.             dic['result']=result
  11.         dic.update(kwargs)
  12.         super().__init__(data=dic,status=status,headers=headers,content_type=content_type)
复制代码
自己封装的异常处理
  1. # 这里用来放全局异常
  2. # 这个方法可以从rest_framework里的settings.py里找到它的配置,然后导入就行,重写该方法
  3. from rest_framework.views import exception_handler
  4. from . import response # 导入自己定义的响应对象
  5. from .logger import log  #导入自己定义的日志对象
  6. def common_exception_handler(exc, context):
  7.     # 记录以下报错信息到日志中
  8.     # context['view']可以取到具体是哪个视图出了错
  9.     log.error('view是:%s,错误是:%s' %(context['view'].__class__.__name__,str(exc)))
  10.     # 先调用一下原来的exception_handler方法
  11.     ret = exception_handler(exc, context) # ret是一个Response对象,其内部有一个data属性,放的就是错误信息
  12.     # 这个表示如果drf处理不了的异常(交给django处理的异常),我们进行处理一下
  13.     if not ret:
  14.         # 这里面也可以放更多其他逻辑,具体对于会出现的异常进行分类处理
  15.         # 比如下面这样
  16.         # if isinstance(exc,KeyError):
  17.         return response.APIResponse(code=0,msg='error',result=str(exc))
  18.     else:
  19.         # ret.data是一个字典,字典里是drf处理的异常信息
  20.         return response.APIResponse(code=0,msg='error',result=ret.data)
复制代码
封装完毕之后,还需要在settings里配置一下,告诉drf采用我们封装的异常处理
  1. # 放自己的全局异常
  2. REST_FRAMEWORK = {
  3.     'EXCEPTION_HANDLER': 'luffyapi.utils.exceptions.common_exception_handler',
  4. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表