Commit f36e7f0f authored by Administrator's avatar Administrator
Browse files

added CBV class-based views.

parent e2a6de98
from django.urls import path
from .views import DemoUsersListCreateView, DemoUsersRetrieveUpdateDestroyView
# from .views import DemoUsersListCreateView, DemoUsersRetrieveUpdateDestroyView
from my_app import views
urlpatterns = [
path('demo_user/', DemoUsersListCreateView.as_view(), name='list_demo_user'),
path('demo_user/<int:pk>/', DemoUsersRetrieveUpdateDestroyView.as_view(), name='edit_demo_user'),
# CBV
path('cbv/demo_user/', views.DemoUserList.as_view(), name='CBV List User'),
path('cbv/demo_user/<int:pk>/', views.DemoUserDetail.as_view(), name='CBV Detail User'),
# GCBV
path('gcbv/demo_user/', views.DemoUsersListCreateView.as_view(), name='list_demo_user'),
path('gcbv/demo_user/<int:pk>/', views.DemoUsersRetrieveUpdateDestroyView.as_view(), name='edit_demo_user'),
]
# from django.shortcuts import render
# Create your views here.
from rest_framework import generics
# 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
"""
CBV - Class based views
"""
# Used to query multiple items or create new item
class DemoUserList(APIView):
# 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):
# 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()
......@@ -13,7 +92,6 @@ class DemoUsersListCreateView(generics.ListCreateAPIView):
permission_classes = (IsAuthenticated,)
def perform_create(self, serializer):
print('user type in creation:', type(self.request.user))
serializer.save(created_by=self.request.user.username)
class DemoUsersRetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
......@@ -22,5 +100,4 @@ class DemoUsersRetrieveUpdateDestroyView(generics.RetrieveUpdateDestroyAPIView):
permission_classes = (IsAuthenticated,)
def perform_update(self, serializer):
print('user type in update:', type(self.request.user))
serializer.save(last_updated_by=self.request.user.username)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment