后台response和异常处理封装

我们自己封装的一些东西,往往放在一个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=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',
}

本文标题:后台response和异常处理封装
本文URL:http://hbruida.cn/article/dsogdjo.html