drf中serializer通過self.context['request']獲取request物件的原因
阿新 • • 發佈:2022-05-07
在檢視類中可通過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)