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,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)
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|