Skip to content
This repository has been archived by the owner on May 26, 2020. It is now read-only.

Some specialized serializers needs the request in context. #119

Merged
merged 2 commits into from
May 18, 2015
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 33 additions & 1 deletion rest_framework_jwt/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,40 @@ class JSONWebTokenAPIView(APIView):
parser_classes = (parsers.FormParser, parsers.JSONParser,)
renderer_classes = (renderers.JSONRenderer,)

def get_serializer_context(self):
"""
Extra context provided to the serializer class.
"""
return {
'request': self.request,
'view': self,
}

def get_serializer_class(self):
"""
Return the class to use for the serializer.
Defaults to using `self.serializer_class`.
You may want to override this if you need to provide different
serializations depending on the incoming request.
(Eg. admins get full serialization, others get basic serialization)
"""
assert self.serializer_class is not None, (
"'%s' should either include a `serializer_class` attribute, "
"or override the `get_serializer_class()` method."
% self.__class__.__name__)
return self.serializer_class

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['context'] = self.get_serializer_context()
return serializer_class(*args, **kwargs)

def post(self, request):
serializer = self.serializer_class(data=request.DATA)
serializer = self.get_serializer(data=request.DATA)

if serializer.is_valid():
user = serializer.object.get('user') or request.user
Expand Down