前言
有時候我們使用drf
的Response
,會發現預設返回的格式不太友好,每次我們都需要寫入以下的格式
return Response({
"status": 0,
"message": "成功",
"results": serializer.data
})
這樣會非常麻煩,我們想預設就有status
和message
,所以我們可以二次封裝response
二次封裝Response
我們在專案的目錄中新建一個response.py
檔案
from rest_framework.response import Response
class APIResponse(Response):
def __init__(self, data_status=0, data_msg='ok', results=None, http_status=None, headers=None, exception=False, **kwargs):
# data的初始狀態
data = {
'statusCode': data_status,
'message': data_msg
}
# data的響應資料體
if results is not None:
data['results'] = results
# data的其他資料
if kwargs is not None:
for k, v in kwargs.items():
self[k] = v
# 或者 setattr(kwargs, k, v)
super().__init__(data=data, status=http_status, headers=headers, exception=exception)
上述程式碼對data
欄位復了初始值,statusCode
值為0,message
值為ok
,然後判斷返回的內容中是否有results
欄位,有的話data
資料中再返回一個results
,最後判斷是否有額外的引數,比如我們要返回一個token
給前端,這樣以後我們返回資料的時候,如果預設是成功的型別,只需要寫return APIResponse(results=serializer.data)
即可