前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DRF自定义响应数据格式

DRF自定义响应数据格式

作者头像
超级小的大杯柠檬水
发布2023-05-06 21:06:14
3730
发布2023-05-06 21:06:14
举报
文章被收录于专栏:CY

DRF自定义响应数据格式

我们经常需要自定义返回消息的格式 例如以下格式

代码语言:javascript
复制
{
    msg:"suc",
    err_code:0,
    data:[]
}

异常模块EXCEPTION_HANDLER

创建文件exception.py 在这里我们需要处理发生错误时响应的内容 因为DRF的报错种类比较多,所以当我取detail的内容或错误的最后一条信息为msg 这里将错误信息处理成返回

代码语言:javascript
复制
{
    msg:"错误信息",
    err_code:"状态码"
}
代码语言:javascript
复制
from rest_framework.views import exception_handler
from rest_framework.views import Response
from rest_framework import status
from django.conf import settings

# 错误处理(有错误)
def custom_handler(err,context: dict):
    # 先调用REST framework默认的异常处理方法获得标准错误响应对象
    response: Response = exception_handler(err, context)
    if response is None:
        # 在DEBUG模式下不处理系统异常,如果处理后错误页面将变成标准格式
        if settings.DEBUG:
            raise err
        res = {'msg': f'服务器错误:{err}','err_code':500}
        return Response(res, status=status.HTTP_500_INTERNAL_SERVER_ERROR, exception=True)
    else:
        msg = response.reason_phrase
        if "detail" in response.data:
            msg = response.data["detail"]
        else:
            for k,v in response.data.items():
                msg = v
                if isinstance(v,list):
                    msg = v[0]
        res = {}
        res.update(response.data)
        res["msg"] = msg
        res["err_code"] = response.status_code
        return Response(res, status=response.status_code, exception=True)

修改默认返回JSON的renderer的类

创建文件exception.py 这里设置响应数据的格式 注意设置之后所有通过Response`响应的数据都会经过这里

代码语言:javascript
复制
from rest_framework.renderers import JSONRenderer
class CustomRenderer(JSONRenderer):
    # 重构render方法
    def render(self, data, accepted_media_type=None, renderer_context=None):
        # 封装信息
        if isinstance(data, dict):
            msg = data.pop('msg', 'suc')
            err_code = data.pop('err_code',0)
        else:
            msg = 'suc'
            err_code = 0
        ret={'data':data,'err_code':err_code,'msg':msg}
        return super().render(ret, accepted_media_type, renderer_context)

设置DRF 返回错误的语言(默认为英语)(zh-Hans

settings.py中设置中文即可

代码语言:javascript
复制
LANGUAGE_CODE = 'zh-Hans'
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DRF自定义响应数据格式
    • 异常模块EXCEPTION_HANDLER
      • 修改默认返回JSON的renderer的类
        • 设置DRF 返回错误的语言(默认为英语)(zh-Hans)
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档