from django.shortcuts import render, redirect, get_object_or_404 from django.contrib import messages from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response from .models import Student from .serializers import StudentSerializer @api_view(['GET']) def student_list(request): students = Student.objects.all() serializer = StudentSerializer(students, many=True) return Response(serializer.data) @api_view(['POST']) def student_create(request): serializer = StudentSerializer(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) @api_view(['GET', 'PUT', 'PATCH']) def student_detail(request, pk): try: student = Student.objects.get(pk=pk) except Student.DoesNotExist: return Response({'error': 'Student not found'}, status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': serializer = StudentSerializer(student) return Response(serializer.data) elif request.method in ['PUT', 'PATCH']: serializer = StudentSerializer(student, data=request.data, partial=(request.method == 'PATCH')) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @api_view(['DELETE']) def student_delete(request, pk): try: student = Student.objects.get(pk=pk) except Student.DoesNotExist: return Response({'error': 'Student not found'}, status=status.HTTP_404_NOT_FOUND) student.delete() return Response(status=status.HTTP_204_NO_CONTENT) def student_list_ui(request): students = Student.objects.all() return render(request, 'students/student_list.html', {'students': students}) def student_create_ui(request): if request.method == 'POST': name = request.POST.get('name') email = request.POST.get('email') age = request.POST.get('age') course = request.POST.get('course') try: Student.objects.create(name=name, email=email, age=int(age), course=course) messages.success(request, 'Student added successfully.') return redirect('students:student-list-ui') except Exception as e: messages.error(request, f'Error: {e}') return render(request, 'students/student_form.html', {'title': 'Add Student'}) def student_update_ui(request, pk): student = get_object_or_404(Student, pk=pk) if request.method == 'POST': student.name = request.POST.get('name') student.email = request.POST.get('email') student.age = int(request.POST.get('age')) student.course = request.POST.get('course') try: student.save() messages.success(request, 'Student updated successfully.') return redirect('students:student-list-ui') except Exception as e: messages.error(request, f'Error: {e}') return render(request, 'students/student_form.html', {'title': 'Edit Student', 'student': student}) def student_delete_ui(request, pk): student = get_object_or_404(Student, pk=pk) if request.method == 'POST': student.delete() messages.success(request, 'Student deleted successfully.') return redirect('students:student-list-ui') return render(request, 'students/student_confirm_delete.html', {'student': student})