<reponame>nmacambira/DjangoStudies<filename>DjangoTutorials/RestFrameworkTutorial/snippets/views.py
# 1)
#
# from django.http import Http404
# from rest_framework.views import APIView
# from rest_framework.response import Response
# from rest_framework import status
#
# from .models import Snippet
# from .serializers import SnippetSerializer
#
#
# # Create your views here.
#
#
# class SnippetList(APIView):
#     """
#     List all code snippets, or create a new snippet.
#     """
#     def get(self, request, format=None):
#         snippets = Snippet.objects.all()
#         serializer = SnippetSerializer(snippets, many=True)
#         return Response(serializer.data)
#
#     def post(self, request, format=None):
#         serializer = SnippetSerializer(data=request.data)
#         if serializer.is_valid():
#             serializer.save()
#             return Response(serializer.data, status=status.HTTP_201_CREATED)
#         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
#
#
# class SnippetDetail(APIView):
#     """
#     Retrieve, update or delete a code snippet.
#     """
#     def get_object(self, pk):
#         try:
#             return Snippet.objects.get(pk=pk)
#         except Snippet.DoesNotExist:
#             raise Http404
#
#     def get(self, request, pk, format=None):
#         snippet = self.get_object(pk)
#         serializer = SnippetSerializer(snippet)
#         return Response(serializer.data)
#
#     def put(self, request, pk, format=None):
#         snippet = self.get_object(pk)
#         serializer = SnippetSerializer(snippet, data=request.data)
#         if serializer.is_valid():
#             serializer.save()
#             return Response(serializer.data)
#         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
#
#     def delete(self, request, pk, format=None):
#         snippet = self.get_object(pk)
#         snippet.delete()
#         return Response(status=status.HTTP_204_NO_CONTENT)


#  2)
#
# from django.contrib.auth.models import User
# from rest_framework import generics, permissions, renderers
# from rest_framework.decorators import api_view
# from rest_framework.response import Response
# from rest_framework.reverse import reverse
#
# from .models import Snippet
# from .serializers import SnippetSerializer, UserSerializer
# from .permissions import IsOwnerOrReadOnly
#
#
# @api_view(['GET'])
# def api_root(request, format=None):
#     return Response({
#         'users': reverse('user-list', request=request, format=format),
#         'snippets': reverse('snippet-list', request=request, format=format)
#     })
#
#
# class SnippetList(generics.ListCreateAPIView):
#     queryset = Snippet.objects.all()
#     serializer_class = SnippetSerializer
#     permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
#
#     def perform_create(self, serializer):
#         serializer.save(owner=self.request.user)
#
#
# class SnippetDetail(generics.RetrieveUpdateDestroyAPIView):
#     queryset = Snippet.objects.all()
#     serializer_class = SnippetSerializer
#     permission_classes = (permissions.IsAuthenticatedOrReadOnly,
#                           IsOwnerOrReadOnly,)
#
#
# class SnippetHighlight(generics.GenericAPIView):
#     queryset = Snippet.objects.all()
#     renderer_classes = (renderers.StaticHTMLRenderer,)
#
#     def get(self, request, *args, **kwargs):
#         snippet = self.get_object()
#         return Response(snippet.highlighted)
#
#
# class UserList(generics.ListAPIView):
#     queryset = User.objects.all()
#     serializer_class = UserSerializer
#
#
# class UserDetail(generics.RetrieveAPIView):
#     queryset = User.objects.all()
#     serializer_class = UserSerializer


from django.contrib.auth.models import User
from rest_framework import permissions, renderers, viewsets
from rest_framework.decorators import detail_route
from rest_framework.response import Response

from .models import Snippet
from .serializers import SnippetSerializer, UserSerializer
from .permissions import IsOwnerOrReadOnly


class SnippetViewSet(viewsets.ModelViewSet):
    """
    This viewset automatically provides 'list', 'create', 'retrieve', 'update' and 'destroy' actions.
    Additionally we also provide an extra 'highlight' action.
    """
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,
                          IsOwnerOrReadOnly,)

    @detail_route(renderer_classes=[renderers.StaticHTMLRenderer])
    def highlight(self, request, *args, **kwargs):
        snippet = self.get_object()
        return Response(snippet.highlighted)

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)


class UserViewSet(viewsets.ReadOnlyModelViewSet):
    """
    This viewset automatically provides 'list' and 'detail' actions.
    """
    queryset = User.objects.all()
    serializer_class = UserSerializer

# 1)
#
# from django.http import Http404
# from rest_framework.views import APIView
# from rest_framework.response import Response
# from rest_framework import status
#
# from .models import Snippet
# from .serializers import SnippetSerializer
#
#
# # Create your views here.
#
#
# class SnippetList(APIView):
#     """
#     List all code snippets, or create a new snippet.
#     """
#     def get(self, request, format=None):
#         snippets = Snippet.objects.all()
#         serializer = SnippetSerializer(snippets, many=True)
#         return Response(serializer.data)
#
#     def post(self, request, format=None):
#         serializer = SnippetSerializer(data=request.data)
#         if serializer.is_valid():
#             serializer.save()
#             return Response(serializer.data, status=status.HTTP_201_CREATED)
#         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
#
#
# class SnippetDetail(APIView):
#     """
#     Retrieve, update or delete a code snippet.
#     """
#     def get_object(self, pk):
#         try:
#             return Snippet.objects.get(pk=pk)
#         except Snippet.DoesNotExist:
#             raise Http404
#
#     def get(self, request, pk, format=None):
#         snippet = self.get_object(pk)
#         serializer = SnippetSerializer(snippet)
#         return Response(serializer.data)
#
#     def put(self, request, pk, format=None):
#         snippet = self.get_object(pk)
#         serializer = SnippetSerializer(snippet, data=request.data)
#         if serializer.is_valid():
#             serializer.save()
#             return Response(serializer.data)
#         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
#
#     def delete(self, request, pk, format=None):
#         snippet = self.get_object(pk)
#         snippet.delete()
#         return Response(status=status.HTTP_204_NO_CONTENT)


#  2)
#
# from django.contrib.auth.models import User
# from rest_framework import generics, permissions, renderers
# from rest_framework.decorators import api_view
# from rest_framework.response import Response
# from rest_framework.reverse import reverse
#
# from .models import Snippet
# from .serializers import SnippetSerializer, UserSerializer
# from .permissions import IsOwnerOrReadOnly
#
#
# @api_view(['GET'])
# def api_root(request, format=None):
#     return Response({
#         'users': reverse('user-list', request=request, format=format),
#         'snippets': reverse('snippet-list', request=request, format=format)
#     })
#
#
# class SnippetList(generics.ListCreateAPIView):
#     queryset = Snippet.objects.all()
#     serializer_class = SnippetSerializer
#     permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
#
#     def perform_create(self, serializer):
#         serializer.save(owner=self.request.user)
#
#
# class SnippetDetail(generics.RetrieveUpdateDestroyAPIView):
#     queryset = Snippet.objects.all()
#     serializer_class = SnippetSerializer
#     permission_classes = (permissions.IsAuthenticatedOrReadOnly,
#                           IsOwnerOrReadOnly,)
#
#
# class SnippetHighlight(generics.GenericAPIView):
#     queryset = Snippet.objects.all()
#     renderer_classes = (renderers.StaticHTMLRenderer,)
#
#     def get(self, request, *args, **kwargs):
#         snippet = self.get_object()
#         return Response(snippet.highlighted)
#
#
# class UserList(generics.ListAPIView):
#     queryset = User.objects.all()
#     serializer_class = UserSerializer
#
#
# class UserDetail(generics.RetrieveAPIView):
#     queryset = User.objects.all()
#     serializer_class = UserSerializer


from django.contrib.auth.models import User
from rest_framework import permissions, renderers, viewsets
from rest_framework.decorators import detail_route
from rest_framework.response import Response

from .models import Snippet
from .serializers import SnippetSerializer, UserSerializer
from .permissions import IsOwnerOrReadOnly


class SnippetViewSet(viewsets.ModelViewSet):
    """
    This viewset automatically provides 'list', 'create', 'retrieve', 'update' and 'destroy' actions.
    Additionally we also provide an extra 'highlight' action.
    """
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,
                          IsOwnerOrReadOnly,)

    @detail_route(renderer_classes=[renderers.StaticHTMLRenderer])
    def highlight(self, request, *args, **kwargs):
        snippet = self.get_object()
        return Response(snippet.highlighted)

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)


class UserViewSet(viewsets.ReadOnlyModelViewSet):
    """
    This viewset automatically provides 'list' and 'detail' actions.
    """
    queryset = User.objects.all()
    serializer_class = UserSerializer
# 1) # # from django.http import Http404 # from rest_framework.views import APIView # from rest_framework.response import Response # from rest_framework import status # # from .models import Snippet # from .serializers import SnippetSerializer # # # # Create your views here. # # # class SnippetList(APIView): #     """ #     List all code snippets, or create a new snippet. #     """ #     def get(self, request, format=None): #         snippets = Snippet.objects.all() #         serializer = SnippetSerializer(snippets, many=True) #         return Response(serializer.data) # #     def post(self, request, format=None): #         serializer = SnippetSerializer(data=request.data) #         if serializer.is_valid(): #             serializer.save() #             return Response(serializer.data, status=status.HTTP_201_CREATED) #         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) # # # class SnippetDetail(APIView): #     """ #     Retrieve, update or delete a code snippet. #     """ #     def get_object(self, pk): #         try: #             return Snippet.objects.get(pk=pk) #         except Snippet.DoesNotExist: #             raise Http404 # #     def get(self, request, pk, format=None): #         snippet = self.get_object(pk) #         serializer = SnippetSerializer(snippet) #         return Response(serializer.data) # #     def put(self, request, pk, format=None): #         snippet = self.get_object(pk) #         serializer = SnippetSerializer(snippet, data=request.data) #         if serializer.is_valid(): #             serializer.save() #             return Response(serializer.data) #         return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) # #     def delete(self, request, pk, format=None): #         snippet = self.get_object(pk) #         snippet.delete() #         return Response(status=status.HTTP_204_NO_CONTENT) #  2) # # from django.contrib.auth.models import User # from rest_framework import generics, permissions, renderers # from rest_framework.decorators import api_view # from rest_framework.response import Response # from rest_framework.reverse import reverse # # from .models import Snippet # from .serializers import SnippetSerializer, UserSerializer # from .permissions import IsOwnerOrReadOnly # # # @api_view(['GET']) # def api_root(request, format=None): #     return Response({ #         'users': reverse('user-list', request=request, format=format), #         'snippets': reverse('snippet-list', request=request, format=format) #     }) # # # class SnippetList(generics.ListCreateAPIView): #     queryset = Snippet.objects.all() #     serializer_class = SnippetSerializer #     permission_classes = (permissions.IsAuthenticatedOrReadOnly,) # #     def perform_create(self, serializer): #         serializer.save(owner=self.request.user) # # # class SnippetDetail(generics.RetrieveUpdateDestroyAPIView): #     queryset = Snippet.objects.all() #     serializer_class = SnippetSerializer #     permission_classes = (permissions.IsAuthenticatedOrReadOnly, #                           IsOwnerOrReadOnly,) # # # class SnippetHighlight(generics.GenericAPIView): #     queryset = Snippet.objects.all() #     renderer_classes = (renderers.StaticHTMLRenderer,) # #     def get(self, request, *args, **kwargs): #         snippet = self.get_object() #         return Response(snippet.highlighted) # # # class UserList(generics.ListAPIView): #     queryset = User.objects.all() #     serializer_class = UserSerializer # # # class UserDetail(generics.RetrieveAPIView): #     queryset = User.objects.all() #     serializer_class = UserSerializer This viewset automatically provides 'list', 'create', 'retrieve', 'update' and 'destroy' actions.     Additionally we also provide an extra 'highlight' action. This viewset automatically provides 'list' and 'detail' actions.