drf源码save以及response

前端之家收集整理的这篇文章主要介绍了drf源码save以及response前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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)

猜你在找的Django相关文章