django restframework 如何自定义统一 响应 和 异常 的返回格式

工作中有需要统一 drf 的json返回 正常响应 和 异常响应的格式

如正常响应统一为

{
  'code': 200,
  'msg': msg,
  'data': data
}

异常响应统一为

{
  'code': 0,
  'msg': msg
}

解决方案

自定义异常处理类
from rest_framework.response import Response
from rest_framework.views import exception_handler
from rest_framework import status


def custom_exception_handler(exc, context):
    res = exception_handler(exc, context)
    if res:
        # 说明是drf的异常,它处理了
        if isinstance(res.data, dict):
            detail = res.data.pop('detail', 'error')
        else:
            detail = res.data[0]
        return Response({'code': 0, 'msg': detail}, status=res.status_code)
    # 说明是其它异常,它没有处理
    return Response({
        'code': 0,
        'msg': str(exc)
    }, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
自定义json渲染器来统一响应格式

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值