drf源碼save以及response

drf源碼save以及response

一.save

其中蠻重要的一段python

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方法rest

咱們也能夠不用save,能夠自定義create 方法和updata方法由於他本質就是調用create和updata方法code

注意點:咱們自定義優先級必須大於drf自帶的方法的優先級,全部咱們把這兩個方法建立在模型中比較合適繼承

二.response

其中的參數token

#傳入的參數
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)
相關文章
相關標籤/搜索