1. 程式人生 > 其它 >drf中serializer通過self.context['request']獲取request物件的原因

drf中serializer通過self.context['request']獲取request物件的原因

在檢視類中可通過self.request來獲取request物件,是因為原始碼中的dispatch將其封裝到類中
    def dispatch(self, request, *args, **kwargs):
        """
        `.dispatch()` is pretty much the same as Django's regular dispatch,
        but with extra hooks for startup, finalize, and exception handling.
        """
        self.args = args
        self.kwargs = kwargs
        request = self.initialize_request(request, *args, **kwargs)
        self.request 
= request self.headers = self.default_response_headers # deprecate?

在獲取serializer類時,原始碼中的get_serializer_context將其封裝到類中

def get_serializer(self, *args, **kwargs):
"""
Return the serializer instance that should be used for validating and
deserializing input, and for serializing output.
"""
serializer_class = self.get_serializer_class()
kwargs.setdefault('context', self.get_serializer_context())
return serializer_class(*args, **kwargs)




def get_serializer(self, *args, **kwargs): """ Return the serializer instance that should be used for validating and deserializing input, and for serializing output. """ serializer_class = self.get_serializer_class() kwargs.setdefault('context', self.get_serializer_context())
return serializer_class(*args, **kwargs)