Created
December 8, 2018 08:41
-
-
Save shivanshs9/1373fa58719ddccafb824a19a0360b83 to your computer and use it in GitHub Desktop.
Mixin for Django Rest Framework View/Viewsets to use different response data/serializers without unnecessary hacks.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class UnsafeResponseSerializerMixin(object): | |
""" | |
Apply this mixin to any view or viewset to automatically use a different response | |
serializer on POST, PUT or PATCH requests. | |
Override 'get_response_data' method to return back the desired data, or | |
'get_response' method to also provide additional changs to the returned Response. | |
""" | |
def get_response_data(self, request): | |
pass | |
def get_response(self, request, response): | |
data = self.get_response_data(request) | |
if data: | |
response.data = data | |
return response | |
def __init__(self, **kwargs): | |
super(UnsafeResponseSerializerMixin, self).__init__(**kwargs) | |
if hasattr(self, 'post'): | |
self.post = self._post | |
if hasattr(self, 'put'): | |
self.put = self._put | |
if hasattr(self, 'patch'): | |
self.patch = self._patch | |
def _post(self, request, *args, **kwargs): | |
response = super(UnsafeResponseSerializerMixin, self).post(request, *args, **kwargs) | |
return self.get_response(request, response) | |
def _put(self, request, *args, **kwargs): | |
response = super(UnsafeResponseSerializerMixin, self).put(request, *args, **kwargs) | |
return self.get_response(request, response) | |
def _patch(self, request, *args, **kwargs): | |
response = super(UnsafeResponseSerializerMixin, self).patch(request, *args, **kwargs) | |
return self.get_response(request, response) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment