# from django.shortcuts import render # Import custom model and serializer from .models import DemoUsers from .serializers import DemoUsersSerializer # Import for GCBV from rest_framework import generics from rest_framework.permissions import IsAuthenticated from django.http import Http404 # Import for CBV from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status # Import for custom permission from my_app.permissions import CustomPermission from my_app import permissions from rest_framework.permissions import IsAuthenticated, AllowAny # Import for FBV from rest_framework.decorators import api_view, permission_classes from drf_yasg.utils import swagger_auto_schema """ FBV - Function based views """ @swagger_auto_schema(method='post', request_body=DemoUsersSerializer) @api_view(['GET', 'POST']) @permission_classes([CustomPermission]) def demo_user_list(request, format=None): if request.method == 'GET': demoUser = DemoUsers.objects.all() serializer = DemoUsersSerializer(demoUser, many=True) return Response(serializer.data, status=status.HTTP_200_OK) elif request.method == 'POST': serializer = DemoUsersSerializer(data=request.data) if serializer.is_valid(): serializer.save(created_by=request.user) # TODO return Response(serializer.data, status=status.HTTP_201_CREATED) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @swagger_auto_schema(methods=['put'], request_body=DemoUsersSerializer) @api_view(['GET', 'PUT', 'DELETE']) @permission_classes([CustomPermission]) def demo_user_detail(request, pk, format=None): try: demoUser = DemoUsers.objects.get(pk=pk) except DemoUsers.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': serializer = DemoUsersSerializer(demoUser) return Response(serializer.data) elif request.method == 'PUT': serializer = DemoUsersSerializer(demoUser, request.data) if serializer.is_valid: serializer.save(last_updated_by=request.user) return Response(serializer.data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': demoUser.delete() return Response(status=status.HTTP_204_NO_CONTENT) """ CBV - Class based views """ # Used to query multiple items or create new item class DemoUserList(APIView): permission_classes = [CustomPermission] # Query all items def get(self, request, format=None): demo_users = DemoUsers.objects.all() serializer = DemoUsersSerializer(demo_users, many=True) return Response(serializer.data) # Create new item def post(self, request, format=None): serializer = DemoUsersSerializer(data=request.data) if serializer.is_valid(): serializer.save(created_by=self.request.user.username) return Response(serializer.data, status=status.HTTP_201_CREATED) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) # Override get_serializer to show correct payload in API document def get_serializer(self): return DemoUsersSerializer() # Used to query/update/delete single item class DemoUserDetail(APIView): permission_classes = [IsAuthenticated] # Implementation of get single item def get_object(self, pk): try: return DemoUsers.objects.get(pk=pk) except DemoUsers.DoesNotExist: raise Http404 # Get single item def get(self, request, pk, format=None): demoUser = self.get_object(pk) serializer = DemoUsersSerializer(demoUser) return Response(serializer.data) # Update single item def put(self, request, pk, format=None): demoUser = self.get_object(pk) serializer = DemoUsersSerializer(demoUser, data=request.data) if serializer.is_valid(): serializer.save(last_updated_by=self.request.user.username) return Response(serializer.data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) # Update partial single item def patch(self, request, pk, format=None): demoUser = self.get_object(pk) serializer = DemoUsersSerializer(demoUser, data=request.data, partial=True) if serializer.is_valid(): serializer.save(last_updated_by=self.request.user.username) return Response(serializer.data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) # Delete single item def delete(self, request, pk, format=None): demoUser = self.get_object(pk) demoUser.delete() return Response(status=status.HTTP_204_NO_CONTENT) # Override get_serializer to show correct payload in API document def get_serializer(self): return DemoUsersSerializer() class DemoUsersListCreateView(generics.ListCreateAPIView): queryset = DemoUsers.objects.all() serializer_class = DemoUsersSerializer permission_classes = (IsAuthenticated,) def perform_create(self, serializer): serializer.save(created_by=self.request.user.username) class DemoUsersRetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView): queryset = DemoUsers.objects.all() serializer_class = DemoUsersSerializer permission_classes = (IsAuthenticated,) def perform_update(self, serializer): serializer.save(last_updated_by=self.request.user.username)