0% found this document useful (0 votes)
16 views20 pages

5th FSD PGM

sdasdfaf

Uploaded by

Sushant K
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views20 pages

5th FSD PGM

sdasdfaf

Uploaded by

Sushant K
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 20

5.1 .

Develop a registration page for student enrolment as done in Module 2 but


without page refresh using AJAX.

basicTemplate.html

<!DOCTYPE html>

<html>

<head>

<title>Student Registration</title>

<!-- Include jQuery library -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

</head>

<body>

<h2>Student Registration Form</h2>

<form id="registrationForm">

<label for="studentName">Name:</label><br>

<input type="text" id="studentName" name="studentName"><br>

<label for="studentEmail">Email:</label><br>

<input type="email" id="studentEmail" name="studentEmail"><br>

<label for="course">Course:</label><br>

<select id="course" name="course">

<option value="Course A">Course A</option>

<option value="Course B">Course B</option>

<!-- Add more options as needed -->

</select><br><br>

<button type="button" onclick="submitForm()">Submit</button>

</form>
<div id="responseMessage"></div>

<script>

function submitForm() {

// Serialize the form data

var formData = $('#registrationForm').serialize();

// Make AJAX POST request

$.ajax({

type: 'POST',

url: '/submit_registration/', // Replace with your server-side endpoint

data: formData,

success: function(response) {

$('#responseMessage').html('<span style="color: green;">' + response + '</span>');

// Clear form fields

$('#registrationForm')[0].reset();

},

error: function(xhr, status, error) {

$('#responseMessage').html('<span style="color: red;">Error: ' + xhr.responseText +


'</span>');

});

</script>

</body>

</html>
models.py

from django.db import models

from django.forms import ModelForm

class course(models.Model):

courseCode = models.CharField(max_length=10)

courseName = models.CharField(max_length=50)

courseCredits = models.IntegerField()

def __str__(self):

return f'{self.courseCode} {self.courseName} {self.courseCredits}'

class student(models.Model):

usn = models.CharField(max_length=10)

name = models.CharField(max_length=40)

sem = models.IntegerField()

courses = models.ManyToManyField(course, related_name='student_set')

def __str__(self):

return f'{self.usn} {self.name} {self.sem}'

class projectReg(models.Model):

student = models.ForeignKey(student, on_delete=models.CASCADE)

ptitle = models.CharField(max_length=30)

planguage = models.CharField(max_length=30)

pduration = models.IntegerField()

def __str__(self):

return f'{self.student} {self.ptitle} {self.planguage} {self.pduration}'

class projectForm(ModelForm):

required_css_class = "required"
class Meta:

model = projectReg

fields = ['student', 'ptitle', 'planguage', 'pduration']

After writing models.py run the below commands in VS code terminal. python
manage.py makemigrations python manage.py migrate

views.py

from django.http import HttpResponse

from django.shortcuts import render

from studCourseRegApp.models import student, course, projectForm

from django.views import generic

import csv

from reportlab.lib.pagesizes import letter

from reportlab.platypus import SimpleDocTemplate, Table

# Home Page View

def home(request):

return render(request, 'home.html')

# Student List View

def studentlist(request):

s = student.objects.all()

return render(request, 'studentlist.html', {'student_list': s})

# Course List View

def courselist(request):

c = course.objects.all()

return render(request, 'courselist.html', {'course_list': c})

# Student Registration View


def register(request):

if request.method == "POST":

sid = request.POST.get("student")

cid = request.POST.get("course")

studentobj = student.objects.get(id=sid)

courseobj = course.objects.get(id=cid)

# Check if student is already enrolled in the course

res = studentobj.courses.filter(id=cid)

if res:

resp = "<h1>Student with USN %s has already enrolled for the course %s</h1>" %
(studentobj.usn, courseobj.courseCode)

return HttpResponse(resp)

# Add the course to the student's enrolled courses

studentobj.courses.add(courseobj)

resp = "<h1>Student with USN %s successfully enrolled for the course with course
code %s</h1>" % (studentobj.usn, courseobj.courseCode)

return HttpResponse(resp)

else:

studentlist = student.objects.all()

courselist = course.objects.all()

return render(request, 'register.html', {'student_list': studentlist, 'course_list':


courselist})

# Enrolled Students View

def enrolledStudents(request):

if request.method == "POST":

cid = request.POST.get("course")
courseobj = course.objects.get(id=cid)

studentlistobj = courseobj.student_set.all()

return render(request, 'enrolledlist.html', {'course': courseobj, 'student_list':


studentlistobj})

else:

courselist = course.objects.all()

return render(request, 'enrolledlist.html', {'Course_List': courselist})

# Add Project View

def add_project(request):

if request.method == "POST":

form = projectForm(request.POST)

if form.is_valid():

form.save()

return HttpResponse("<h1>Project Data Successfully saved</h1>")

else:

return HttpResponse("<h1>Project details not saved</h1>")

else:

form = projectForm()

return render(request, "projectReg.html", {'form': form})

# Generic Student List View using Django's generic.ListView

class StudentListView(generic.ListView):

model = student

template_name = "GenericListViewStudent.html"

# Student Detail View using Django's generic.DetailView


class StudentDetailView(generic.DetailView):

model = student

template_name = "GenericDetailedViewStudent.html"

# Generate CSV View

def generateCSV(request):

courses = course.objects.all()

resp = HttpResponse(content_type="text/csv")

resp['Content-Disposition'] = 'attachment; filename=course_data.csv'

writer = csv.writer(resp)

writer.writerow(['Course Code', 'Course Name', 'Course Credits'])

for c in courses:

writer.writerow([c.courseCode, c.courseName, c.courseCredits])

return resp

# Generate PDF View

def generatePDF(request):

courses = course.objects.all()

resp = HttpResponse(content_type="application/pdf")

resp['Content-Disposition'] = 'attachment; filename=course_data.pdf'

pdf = SimpleDocTemplate(resp, pagesize=letter)

table_data = [['Course Code', 'Course Name', 'Course Credits']]

for c in courses:

table_data.append([c.courseCode, c.courseName, str(c.courseCredits)])

table = Table(table_data)

pdf.build([table])

return resp
urls.py

from django.contrib import admin

from django.urls import path

from studCourseRegApp.views import enrolledStudentsUsingAjax, generateCSV, home,


registerAjax, studentlist, courselist, register, enrolledStudents, add_project,
StudentListView, StudentDetailView, generatePDF

urlpatterns = [

path('secretadmin/', admin.site.urls), # Admin URL

path('', home), # Home URL

path('home/', home), # Home URL (alternative)

path('studentlist/', studentlist), # Student List URL

path('courselist/', courselist), # Course List URL

path('register/', register), # Student Registration URL

path('enrolledlist/', enrolledStudents),# Enrolled Students URL

path('addproject/', add_project), # Add Project URL

path('genericlistviewstudent/', StudentListView.as_view()), # Generic Student List URL

path('genericdetailedviewstudent/<int:pk>/', StudentDetailView.as_view()), # Student


Detail URL

path('download_course_table_as_csv/', generateCSV), # Generate CSV URL

path('download_course_table_as_pdf/', generatePDF), # Generate PDF URL

path('courseRegUsingAjax/', registerAjax), # Register using AJAX URL (not defined in


provided views)

]
Output:
5.2 . Develop a search application in Django using AJAX that displays courses
enrolled by a student being searched.

basicTemplate.html

<!DOCTYPE html>

<html>

<head>

<style>

/* Styling for the navigation bar */

nav {

background-color: lightblue;

padding: 15px;

nav a {

color: #fff; /* Text color */

text-decoration: none; /* Remove underline */

padding: 10px 20px; /* Padding around each link */

margin: 0px 10px; /* Spacing between links */

border-radius: 5px; /* Rounded corners */

background-color: #555;

flex-wrap: wrap; /* Flexbox property */

nav a:hover {

background-color: aqua; /* Background color on hover */

/* Styling for the unordered list (menu items) */


ul {

list-style: none; /* Remove default list styles */

margin: 0;

padding: 0;

display: flex; /* Use flexbox for layout */

flex-wrap: wrap; /* Allow items to wrap */

flex-direction: row; /* Display items in a row */

li {

margin-right: 20px; /* Margin between list items */

margin-bottom: 25px; /* Margin at the bottom of each list item */

</style>

<title>

{% block title %} {% endblock %}

</title>

</head>

<body>

<!-- Header section with centered h1 -->

<center>

<h1 style="background-color: blue; color: yellow;">STUDENT COURSE REGISTRATION


PORTAL</h1>

</center>

<!-- Navigation bar -->

<nav>
<ul>

<li><a href="/home/">HOME</a></li>

<li><a href="/studentlist/">STUDENT LIST</a></li>

<li><a href="/courselist/">COURSE LIST</a></li>

<li><a href="/register/">REGISTER</a></li>

<li><a href="/enrolledlist/">ENROLLED LIST</a></li>

<li><a href="/addproject/">ADD PROJECT</a></li>

<li><a href="/genericlistviewstudent/">GENERIC STUDENT LIST VIEW</a></li>

<li><a href="/download_course_table_as_csv/">DOWNLOAD COURSE AS


CSV</a></li>

<li><a href="/download_course_table_as_pdf/">DOWNLOAD COURSE AS


PDF</a></li>

</ul>

</nav>

<!-- Main content section -->

<section>

{% block content %} {% endblock %}

</section>

<!-- Footer section -->

<footer>

<hr/>

<center>

&copy; Designed and Developed by Dr. Harish Kumar B T, Dept. of CSE, BIT,
Bangalore-04

<br/>

21CS62 Full Stack Development Laboratory


<br/>

Dept. of Computer Science and Engineering, BIT 2023-2024

</center>

</footer>

</body>

</html>

models.py

from django.db import models

from django.forms import ModelForm

# Course model

class Course(models.Model):

courseCode = models.CharField(max_length=10)

courseName = models.CharField(max_length=50)

courseCredits = models.IntegerField()

def __str__(self):

return f"{self.courseCode} {self.courseName} {self.courseCredits}"

# Student model

class Student(models.Model):

usn = models.CharField(max_length=10)

name = models.CharField(max_length=40)

sem = models.IntegerField()

courses = models.ManyToManyField(Course, related_name='students')

def __str__(self):

return f"{self.usn} {self.name} {self.sem}"

# Project registration model


class ProjectRegistration(models.Model):

student = models.ForeignKey(Student, on_delete=models.CASCADE)

ptitle = models.CharField(max_length=30)

planguage = models.CharField(max_length=30)

pduration = models.IntegerField()

def __str__(self):

return f"{self.student.name} - {self.ptitle}"

# Form for project registration

class ProjectForm(ModelForm):

required_css_class = "required"

class Meta:

model = ProjectRegistration

fields = ['student', 'ptitle', 'planguage', 'pduration']

After writing models.py run the below commands in VS code terminal. python
manage.py makemigrations python manage.py migrate

views.py

from django.http import HttpResponse

from django.shortcuts import render

from studCourseRegApp.models import student, course, projectForm

from django.views import generic

import csv

from reportlab.lib.pagesizes import letter

from reportlab.platypus import SimpleDocTemplate, Table

# View function for rendering the home page

def home(request):
return render(request, 'home.html')

# View function for rendering the student list page

def studentlist(request):

s = student.objects.all()

return render(request, 'studentlist.html', {'student_list': s})

# View function for rendering the course list page

def courselist(request):

c = course.objects.all()

return render(request, 'courselist.html', {'course_list': c})

# View function for handling student registration for courses

def register(request):

if request.method == "POST":

sid = request.POST.get("student")

cid = request.POST.get("course")

studentobj = student.objects.get(id=sid)

courseobj = course.objects.get(id=cid)

# Check if the student is already enrolled in the selected course

res = studentobj.courses.filter(id=cid)

if res:

resp = "<h1>Student with USN %s has already enrolled for the course with code
%s</h1>" % (studentobj.usn, courseobj.courseCode)

return HttpResponse(resp)

# If not enrolled, add the course to the student's courses

studentobj.courses.add(courseobj)
resp = "<h1>Student with USN %s successfully enrolled for the course with code
%s</h1>" % (studentobj.usn, courseobj.courseCode)

return HttpResponse(resp)

else:

studentlist = student.objects.all()

courselist = course.objects.all()

return render(request, 'register.html', {'student_list': studentlist, 'course_list':


courselist})

# View function for handling the display of enrolled students for a specific course

def enrolledStudents(request):

if request.method == "POST":

cid = request.POST.get("course")

courseobj = course.objects.get(id=cid)

studentlistobj = courseobj.students.all() # Accessing related_name 'students' from


course model

return render(request, 'enrolledlist.html', {'course': courseobj, 'student_list':


studentlistobj})

else:

courselist = course.objects.all()

return render(request, 'enrolledlist.html', {'Course_List': courselist})

# View function for adding a student project

def add_project(request):

if request.method == "POST":

form = projectForm(request.POST)

if form.is_valid():

form.save()
return HttpResponse("<h1>Project Data Successfully saved</h1>")

else:

return HttpResponse("<h1>Project details not saved</h1>")

else:

form = projectForm()

return render(request, "projectReg.html", {'form': form})

# Generic ListView using Django's class-based views

class StudentListView(generic.ListView):

model = student

template_name = "GenericListViewStudent.html"

# Generic DetailView using Django's class-based views

class StudentDetailView(generic.DetailView):

model = student

template_name = "GenericDetailedViewStudent.html"

# View function for generating CSV file of course data

def generateCSV(request):

courses = course.objects.all()

resp = HttpResponse(content_type="text/csv")

resp['Content-Disposition'] = 'attachment; filename=course_data.csv'

writer = csv.writer(resp)

writer.writerow(['Course Code', 'Course Name', 'Course Credits'])

for c in courses:

writer.writerow([c.courseCode, c.courseName, c.courseCredits])

return resp

# View function for generating PDF file of course data


def generatePDF(request):

courses = course.objects.all()

resp = HttpResponse(content_type="application/pdf")

resp['Content-Disposition'] = 'attachment; filename=course_data.pdf'

pdf = SimpleDocTemplate(resp, pagesize=letter)

table_data = [['Course Code', 'Course Name', 'Course Credits']]

for c in courses:

table_data.append([c.courseCode, c.courseName, str(c.courseCredits)])

table = Table(table_data)

pdf.build([table])

return resp

urls.py

from django.contrib import admin

from django.urls import path

from studCourseRegApp.views import enrolledStudentsUsingAjax, generateCSV, home,


registerAjax, studentlist, courselist, register, enrolledStudents, add_project,
StudentListView, StudentDetailView, generatePDF

urlpatterns = [

path('secretadmin/', admin.site.urls), # Admin site URL

path('', home), # Default home page URL

path('home/', home), # Home page URL

path('studentlist/', studentlist), # Student list page URL

path('courselist/', courselist), # Course list page URL

path('register/', register), # Student course registration URL

path('enrolledlist/', enrolledStudents), # Enrolled students list URL


path('addproject/', add_project), # Add project URL

path('genericlistviewstudent/', StudentListView.as_view()), # Generic list view for


students URL

path('genericdetailedviewstudent/<int:pk>/', StudentDetailView.as_view()), # Generic


detailed view for students URL with primary key

path('download_course_table_as_csv/', generateCSV), # Generate CSV file for course data


URL

path('download_course_table_as_pdf/', generatePDF), # Generate PDF file for course


data URL

path('courseRegUsingAjax/', registerAjax), # URL for AJAX course registration


(assuming it's defined in views)

path('course_search_ajax/', enrolledStudentsUsingAjax), # URL for AJAX course search


(assuming it's defined in views)

OUTPUT:

You might also like