drf源碼save以及response 一.save python if self.instance is not None: self.instance = self.update(self.instance, validated_data) assert self.instance is not ...
drf源碼save以及response
一.save
其中蠻重要的一段
if self.instance is not None:
self.instance = self.update(self.instance, validated_data)
assert self.instance is not None, (
'`update()` did not return an object instance.'
)
else:
self.instance = self.create(validated_data)
assert self.instance is not None, (
'`create()` did not return an object instance.'
)
return self.instance
這裡呢很明顯就可以看出save
我們傳參instance
的由於決定了他後續是運行create
還是updata
方法
我們也可以不用save,可以自定義create 方法和updata方法因為他本質就是調用create和updata方法
註意點
:我們自定義優先順序必須大於drf自帶的方法的優先順序,所有我們把這兩個方法創建在模型中比較合適
二.response
其中的參數
#傳入的參數
def __init__(self, data=None, status=None,
template_name=None, headers=None,
exception=False, content_type=None):
#他對於參數進行的賦值
self.data = data
self.template_name = template_name
self.exception = exception
self.content_type = content_type
我們可以通過類的繼承來修改源碼
"""
返回值
Response({
'status': 0,
'msg': 'ok',
'results': [],
'token': ''
}, headers={}, status=200, content_type="")
"""
'''
比如說我們想要的效果
APIResponse(0, 'ok', results,其他數據)
'''
from rest_framework.response import Response
class APIResponse(Response):
def __init__(self, data_status, data_msg, results=None,
status=None, headers=None, content_type=None, **kwargs):
data = {
'status': data_status,
'msg': data_msg
}
if results is not None:
data['results'] = results
data.update(kwargs)
super().__init__(data=data, status=status, headers=headers, content_type=content_type)