!!使用ViewSet自定义JSON返回

通常对于一个请求,无论是否成功,我们都应该返回一些东西来告知其请求的结果,对于上面的这种如果没有数据,那么返回的便是一个空列表,因此我们需要自定义JSONRenderer。
自定义JSONRenderer的方法很简单,通过创建一个类去继承JSONRenderer,并重构其render方法,然后在settings.py文件中修改默认使用的renderer类为我们自定义的类即可。

我之前的做法是使用APIView来编写,自己定义返回json结构,比较麻烦,每次都需要自己构造重复的data结构

!!使用ViewSet自定义JSON返回_第1张图片
image.png

参考了https://www.jianshu.com/p/ef8f5bc8ab46 博文,这样做更省力。

1. 在项目目录下创建文件夹utils,在utils目录下创建rendererresponse.py文件,添加如下代码自定义返回的json数据:

# 导入控制返回的JSON格式的类
from rest_framework.renderers import JSONRenderer
class customrenderer(JSONRenderer):
    # 重构render方法
    def render(self, data, accepted_media_type=None, renderer_context=None):
        if renderer_context:
            # 获取需要返回的msg和code信息
            if isinstance(data, dict):
                msg = data.pop('msg', 'success')
                code = data.pop('code', 0)
            else:
                msg = 'success'
                code = 0
            # 重新构建返回的JSON字典
            ret = {
                'msg': msg,
                'code': code,
                'data': data,
            }
            # 返回JSON数据
            return super().render(ret, accepted_media_type, renderer_context)
        else:
            return super().render(data, accepted_media_type, renderer_context)

!!使用ViewSet自定义JSON返回_第2张图片
image.png

2. settings.py文件中,修改默认renderer类:

rest framework基本配置

REST_FRAMEWORK = {

# 修改默认返回JSON的renderer的类
'DEFAULT_RENDERER_CLASSES': (
    'utils.rendererresponse.customrenderer',
),

}

!!使用ViewSet自定义JSON返回_第3张图片
image.png

3.postman 进行测试

!!使用ViewSet自定义JSON返回_第4张图片
image.png

参考文章:https://www.jianshu.com/p/ef8f5bc8ab46

你可能感兴趣的:(!!使用ViewSet自定义JSON返回)