Created
August 12, 2015 08:55
-
-
Save pleasedontbelong/fda347cbc8054f07e170 to your computer and use it in GitHub Desktop.
Example of views for rest swagger 2.0
This file contains 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
# you must import it even if not used because the introspector of rest | |
# swagger will try to load the serializer class from the docstring | |
from user import serializers as user_serializers | |
class UserListCreateView(generics.ListCreateAPIView): | |
permission_classes = (IsAuthenticated,) | |
queryset = User.objects.all() | |
def get(self, request, *args, **kwargs): | |
""" | |
List of users | |
--- | |
tags: | |
- User | |
operationId: listUsers | |
serializer: user_serializers.PaginatedUsersSerializer | |
""" | |
return super(UserListCreateView, self).get(request, *args, **kwargs) | |
def post(self, request, *args, **kwargs): | |
""" | |
Create a new user | |
--- | |
tags: | |
- User | |
operationId: createUser | |
serializer: user_serializers.CreateUserSerializer | |
""" | |
return super(UserListCreateView, self).post(request, *args, **kwargs) | |
def get_serializer_class(self, *args, **kwargs): | |
""" | |
Rest swagger wont pass any arguments to this method so he wont be | |
able to get the correct serializer. You'll need to use the docstrings | |
on the `get` and `post` methods | |
""" | |
if self.request.method == "POST": | |
return user_serializers.CreateUserSerializer | |
else: | |
return user_serializers.PaginatedUsersSerializer | |
class UserRetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView): | |
permission_classes = (IsAuthenticated,) | |
queryset = User.objects.all() | |
def get(self, request, *args, **kwargs): | |
""" | |
Retrieve a single user | |
--- | |
tags: | |
- User | |
operationId: getUser | |
serializer: user_serializers.UserSerializer | |
""" | |
return super(UserListCreateView, self).get(request, *args, **kwargs) | |
def put(self, request, *args, **kwargs): | |
""" | |
Update User | |
--- | |
tags: | |
- User | |
operationId: updateUser | |
serializer: user_serializers.UpdateUserSerializer | |
""" | |
return super(UserListCreateView, self).put(request, *args, **kwargs) | |
def delete(self, request, *args, **kwargs): | |
""" | |
Delete one User | |
--- | |
tags: | |
- User | |
operationId: deleteUser | |
""" | |
return super(UserListCreateView, self).delete(request, *args, **kwargs) | |
def retrieve(self, request, *args, **kwargs): | |
""" | |
Sadly, Rest Framework Swagger will try to get the docstring from the `get`, | |
`put` and `delete` methods instead of the `retrieve`, `update` and `destroy` | |
methods. We should, however, place our logic inside this last methods or we'll | |
loose all the benefits of using a generic view | |
""" | |
try: | |
return super(UserRetrieveUpdateDestroyView, self).retrieve(request, *args, **kwargs) | |
except Http404: | |
raise HttpException(error_code=ErrorCodes.USER_NOT_FOUND) | |
def update(self, request, *args, **kwargs): | |
try: | |
return super(UserRetrieveUpdateDestroyView, self).retrieve(request, *args, **kwargs) | |
except Http404: | |
raise HttpException(error_code=ErrorCodes.USER_NOT_FOUND) | |
def destroy(self, request, *args, **kwargs): | |
try: | |
return super(UserRetrieveUpdateDestroyView, self).destroy(request, *args, **kwargs) | |
except Http404: | |
raise HttpException(error_code=ErrorCodes.USER_NOT_FOUND) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment