通常對于一個請求俊嗽,無論是否成功,我們都應該返回一些東西來告知其請求的結(jié)果铃彰,對于上面的這種如果沒有數(shù)據(jù)绍豁,那么返回的便是一個空列表,因此我們需要自定義JSONRenderer牙捉。
自定義JSONRenderer的方法很簡單竹揍,通過創(chuàng)建一個類去繼承JSONRenderer,并重構(gòu)其render方法鹃共,然后在settings.py文件中修改默認使用的renderer類為我們自定義的類即可鬼佣。
我之前的做法是使用APIView來編寫,自己定義返回json結(jié)構(gòu)霜浴,比較麻煩晶衷,每次都需要自己構(gòu)造重復的data結(jié)構(gòu)
image.png
參考了http://www.reibang.com/p/ef8f5bc8ab46 博文,這樣做更省力阴孟。
1. 在項目目錄下創(chuàng)建文件夾utils晌纫,在utils目錄下創(chuàng)建rendererresponse.py文件,添加如下代碼自定義返回的json數(shù)據(jù):
# 導入控制返回的JSON格式的類
from rest_framework.renderers import JSONRenderer
class customrenderer(JSONRenderer):
# 重構(gòu)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
# 重新構(gòu)建返回的JSON字典
ret = {
'msg': msg,
'code': code,
'data': data,
}
# 返回JSON數(shù)據(jù)
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
3.postman 進行測試
image.png