```python
# Import necessary modules
from django.contrib import admin
from django.db import models
from django.http import HttpResponse, JsonResponse
from django.views.decorators.http import require_http_methods
from django.urls import path, include
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import Student, Branch, Section, Attendance, Marks, Feedback
from .serializers import StudentSerializer, BranchSerializer, SectionSerializer, AttendanceSerializer, MarksSerializer, FeedbackSerializer
from django.db.models import Q
# MySQL Database Configuration
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.mysql',
# 'NAME': 'aditya_polytechnic',
# 'USER': 'your_username',
# 'PASSWORD': 'your_password',
# 'HOST': 'your_host',
# 'PORT': 'your_port',
# }
# }
# Define models
class Branch(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Section(models.Model):
branch = models.ForeignKey(Branch, on_delete=models.CASCADE)
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class Student(models.Model):
pin = models.CharField(max_length=255, primary_key=True)
name = models.CharField(max_length=255)
branch = models.ForeignKey(Branch, on_delete=models.CASCADE)
section = models.ForeignKey(Section, on_delete=models.CASCADE)
def __str__(self):
return self.name
class Attendance(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
date = models.DateField()
status = models.CharField(max_length=255)
def __str__(self):
return f"{self.student.name} - {self.date}"
class Marks(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
subject = models.CharField(max_length=255)
marks = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return f"{self.student.name} - {self.subject}"
class Feedback(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
feedback_type = models.CharField(max_length=255)
message = models.TextField()
rating = models.IntegerField()
def __str__(self):
return f"{self.student.name} - {self.feedback_type}"
# Define serializers
class BranchSerializer(serializers.ModelSerializer):
class Meta:
model = Branch
fields = ['id', 'name']
class SectionSerializer(serializers.ModelSerializer):
class Meta:
model = Section
fields = ['id', 'branch', 'name']
class StudentSerializer(serializers.ModelSerializer):
class Meta:
model = Student
fields = ['pin', 'name', 'branch', 'section']
class AttendanceSerializer(serializers.ModelSerializer):
class Meta:
model = Attendance
fields = ['id', 'student', 'date', 'status']
class MarksSerializer(serializers.ModelSerializer):
class Meta:
model = Marks
fields = ['id', 'student', 'subject', 'marks']
class FeedbackSerializer(serializers.ModelSerializer):
class Meta:
model = Feedback
fields = ['id', 'student', 'feedback_type', 'message', 'rating']
# API Endpoints
urlpatterns = [
path('branches/', APIView.as_view({
'get': 'get_branches'
})),
path('sections/', APIView.as_view({
'get': 'get_sections'
})),
path('students/', APIView.as_view({
'get': 'get_students',
'post': 'create_student'
})),
path('attendance/', APIView.as_view({
'get': 'get_attendance',
'post': 'create_attendance'
})),
path('marks/', APIView.as_view({
'get': 'get_marks',
'post': 'create_marks'
})),
path('feedback/', APIView.as_view({
'get': 'get_feedback',
'post': 'create_feedback'
})),
]
class BranchView(APIView):
def get_branches(self, request):
branches = Branch.objects.all()
serializer = BranchSerializer(branches, many=True)
return Response(serializer.data)
class SectionView(APIView):
def get_sections(self, request):
sections = Section.objects.all()
serializer = SectionSerializer(sections, many=True)
return Response(serializer.data)
class StudentView(APIView):
def get_students(self, request):
students = Student.objects.all()
serializer = StudentSerializer(students, many=True)
return Response(serializer.data)
def create_student(self, 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)
class AttendanceView(APIView):
def get_attendance(self, request):
attendance = Attendance.objects.all()
serializer = AttendanceSerializer(attendance, many=True)
return Response(serializer.data)
def create_attendance(self, request):
serializer = AttendanceSerializer(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 MarksView(APIView):
def get_marks(self, request):
marks = Marks.objects.all()
serializer = MarksSerializer(marks, many=True)
return Response(serializer.data)
def create_marks(self, request):
serializer = MarksSerializer(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 FeedbackView(APIView):
def get_feedback(self, request):
feedback = Feedback.objects.all()
serializer = FeedbackSerializer(feedback, many=True)
return Response(serializer.data)
def create_feedback(self, request):
serializer = FeedbackSerializer(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)
```