Perfect for a DataOps, Cloud, or AI Startup
Memorable. Brandable. Ready to launch.
Sample Code Snippet
# serializers.py
from rest_framework import serializers
from .models import User, Role, Ticket
from rest_framework import fields
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'userName', 'email']
class TicketSerializer(serializers.ModelSerializer):
createdAt = serializers.DateTimeField(format="%Y-%m-%d") # Ensure correct date format
class Meta:
model = Ticket
fields = '__all__'
# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework_simplejwt.authentication import JWTAuthentication
from django.contrib.auth.hashers import check_password
from django.shortcuts import get_object_or_404
from .models import User, Ticket
from .serializers import UserSerializer, TicketSerializer
from rest_framework.exceptions import ValidationError # Import ValidationError
from rest_framework_simplejwt.tokens import RefreshToken
class LoginView(APIView):
def post(self, request):
email = request.data.get('email')
password = request.data.get('password')
try:
user = User.objects.get(email=email)
except User.DoesNotExist:
return Response({"msg": "incorrect email or password"}, status=400) # Changed "message" to "msg"
# Use check_password to verify the password
if not check_password(password, user.password):
return Response({"msg": "incorrect email or password"}, status=400) # Changed "message" to "msg"
refresh = RefreshToken.for_user(user)
return Response({
"username": user.userName,
"token": str(refresh.access_token)
}, status=201)
class TicketListView(APIView):
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request):
status = request.query_params.get("ticketStatus")
if not status:
return Response({"msg": "ticket status needs to filter data"}, status=400) # Changed "message" to "msg"
tickets = Ticket.objects.filter(ticketStatus=status)
serializer = TicketSerializer(tickets, many=True)
return Response(serializer.data, status=200)
class TicketAddView(APIView):
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
def post(self, request):
user = request.user
if user.roleObj.roleName != "client":
return Response({"msg": "you don't have permission to perform this operation"},
status=403) # Changed "message" to "msg"
ticketId = request.data.get("ticketId")
if Ticket.objects.filter(ticketId=ticketId).exists():
return Response({"msg": "ticketId already exists"}, status=400) # Changed "message" to "msg"
data = request.data.copy()
data["clientObj"] = user.id
serializer = TicketSerializer(data=data)
if serializer.is_valid():
serializer.save()
# Populate the response with all the fields.
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)
class TicketUpdateView(APIView):
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
def patch(self, request, id):
user = request.user
if user.roleObj.roleName != "admin":
return Response({"msg": "you don't have permission to perform this operation"},
status=403) # Changed "message" to "msg"
ticket = Ticket.objects.filter(id=id).first()
if not ticket:
return Response({"msg": "ticket object not found"}, status=404) # Changed "message" to "msg"
ticketStatus = request.data.get("ticketStatus")
if not ticketStatus:
return Response({"msg": "no data provided to update"}, status=400) # Changed "message" to "msg"
ticket.ticketStatus = ticketStatus
ticket.save()
serializer = TicketSerializer(ticket)
return Response(serializer.data, status=200)
class TicketDeleteView(APIView):
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
def delete(self, request, id):
user = request.user
ticket = Ticket.objects.filter(id=id).first()
if not ticket:
return Response({"msg": "ticket object not found"}, status=404) # Changed "message" to "msg"
if user.roleObj.roleName != "client" or ticket.clientObj.id != user.id:
return Response({"msg": "you don't have permission to perform this operation"},
status=403) # Changed "message" to "msg"
ticket.delete()
return Response(status=204)
# urls.py
from django.urls import path
from .views import LoginView, TicketListView, TicketAddView, TicketUpdateView, TicketDeleteView
urlpatterns = [
path('user/login', LoginView.as_view()),
path('ticket/list', TicketListView.as_view()),
path('ticket/add', TicketAddView.as_view()),
path('ticket/update/', TicketUpdateView.as_view()),
path('ticket/delete/', TicketDeleteView.as_view()),
]
Contact: meeranisonline@gmail.com