!!使用ViewSet自定义JSON返回
2019-02-26 本文已影响0人
whong736
通常对于一个请求,无论是否成功,我们都应该返回一些东西来告知其请求的结果,对于上面的这种如果没有数据,那么返回的便是一个空列表,因此我们需要自定义JSONRenderer。
自定义JSONRenderer的方法很简单,通过创建一个类去继承JSONRenderer,并重构其render方法,然后在settings.py文件中修改默认使用的renderer类为我们自定义的类即可。
我之前的做法是使用APIView来编写,自己定义返回json结构,比较麻烦,每次都需要自己构造重复的data结构
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)
image.png
2. settings.py文件中,修改默认renderer类:
rest framework基本配置
REST_FRAMEWORK = {
# 修改默认返回JSON的renderer的类
'DEFAULT_RENDERER_CLASSES': (
'utils.rendererresponse.customrenderer',
),
}
image.png