Movatterモバイル変換


[0]ホーム

URL:


Open In App
Next Article:
Create Word Counter App using Django
Next article icon

In this article, we are going to build College Management System usingDjangoand will be usingdbsqlitedatabase. In the times of covid, when education has totally become digital, there comes a need for a system that can connect teachers, students, and HOD and that was the motivation behind building this project.

This project allows HOD, staff, and students to register themselves. This project has three interfaces.

1. For Head Of Department(HOD):

The below image shows the interface for the Head of Departments of the College:

HOD Interface

2. For Staff:

The below image shows the interface for the Staff of the College:

Staff Interface

3. For Students:

The below image shows the interface for the Students of the College:

Student Interface

Tools and Technologies Used in the Project:

  1. HTML
  2. CSS
  3. JAVASCRIPT
  4. JQUERY
  5. BOOTSTRAP
  6. DJANGO

Required Skillset to Build the Project:

Step By Step Implementation

Follow the below steps to implement the discussed project:

Step 1:Install Django.

Step 2: Create a folder with the nameCollege_Management_Systemand open it with VS Code.

Step 3: Open the terminal and create a new project "student_management_project" using the below command.

django-admin startproject student_management_project

Step 4:Enter inside the folder "student_management_project" and create the app "student_management_app".

python manage.py startapp student_management_app

Step 5: Go to student_management_project -> settings.py -> INSTALLED_APPS and add our app'student_management_app'.

App successfully added

Step 6: Go to urls.py of student_management_projectand add the below path inurlpatterns. (Note - Import include asfrom django.urls import path, include)

path('', include('student_management_app.urls'))

Step 7:Now enter theviews that are going to use inviews.py ofstudent_management_app.

Python
fromdjango.shortcutsimportrender,redirect,HttpResponseRedirectfromdjango.contrib.authimportlogout,loginfrom.modelsimportCustomUser,Staffs,Students,AdminHODfromdjango.contribimportmessagesfromdjango.contrib.auth.hashersimportcheck_passworddefhome(request):returnrender(request,'home.html')defcontact(request):returnrender(request,'contact.html')defloginUser(request):returnrender(request,'login_page.html')defdoLogin(request):email_id=request.GET.get('email')password=request.GET.get('password')ifnot(email_idandpassword):messages.error(request,"Please provide all the details!!")returnrender(request,'login_page.html')user=CustomUser.objects.filter(email=email_id).last()ifnotuserornotcheck_password(password,user.password):messages.error(request,'Invalid Login Credentials!!')returnrender(request,'login_page.html')login(request,user)ifuser.user_type==CustomUser.STUDENT:returnredirect('student_home/')elifuser.user_type==CustomUser.STAFF:returnredirect('staff_home/')elifuser.user_type==CustomUser.HOD:returnredirect('admin_home/')returnrender(request,'home.html')defregistration(request):returnrender(request,'registration.html')defdoRegistration(request):first_name=request.GET.get('first_name')last_name=request.GET.get('last_name')email_id=request.GET.get('email')password=request.GET.get('password')confirm_password=request.GET.get('confirmPassword')ifnot(email_idandpasswordandconfirm_password):messages.error(request,'Please provide all the details!!')returnrender(request,'registration.html')ifpassword!=confirm_password:messages.error(request,'Both passwords should match!!')returnrender(request,'registration.html')ifCustomUser.objects.filter(email=email_id).exists():messages.error(request,'User with this email already exists. Please login.')returnrender(request,'registration.html')user_type=get_user_type_from_email(email_id)ifuser_typeisNone:messages.error(request,"Email must be like: 'john.student@college.com', 'rahul.staff@institute.edu' or 'principal.hod@university.org'")returnrender(request,'registration.html')username=email_id.split('@')[0].split('.')[0]ifCustomUser.objects.filter(username=username).exists():messages.error(request,'User with this username already exists. Please choose a different email.')returnrender(request,'registration.html')user=CustomUser()user.username=usernameuser.email=email_iduser.first_name=first_nameuser.last_name=last_nameuser.user_type=user_typeuser.set_password(password)user.save()ifuser_type==CustomUser.STAFF:Staffs.objects.create(admin=user)elifuser_type==CustomUser.STUDENT:Students.objects.create(admin=user)elifuser_type==CustomUser.HOD:AdminHOD.objects.create(admin=user)messages.success(request,"Registration successful. Please log in.")returnrender(request,'login_page.html')deflogout_user(request):logout(request)returnHttpResponseRedirect('/')defget_user_type_from_email(email_id):try:email_user_type=email_id.split('@')[0].split('.')[1]returnCustomUser.EMAIL_TO_USER_TYPE_MAP[email_user_type]except:returnNone

Step 8: Create or Go tourls.py of student_management_appand add the following URLs.

Python
fromdjango.contribimportadminfromdjango.urlsimportpath,includefrom.importviewsfrom.importHodViews,StaffViews,StudentViewsurlpatterns=[path('admin/',admin.site.urls),path('',views.home,name="home"),path('contact',views.contact,name="contact"),path('login',views.loginUser,name="login"),path('logout_user',views.logout_user,name="logout_user"),path('registration',views.registration,name="registration"),path('doLogin',views.doLogin,name="doLogin"),path('doRegistration',views.doRegistration,name="doRegistration"),# URLS for Studentpath('student_home/',StudentViews.student_home,name="student_home"),path('student_view_attendance/',StudentViews.student_view_attendance,name="student_view_attendance"),path('student_view_attendance_post/',StudentViews.student_view_attendance_post,name="student_view_attendance_post"),path('student_apply_leave/',StudentViews.student_apply_leave,name="student_apply_leave"),path('student_apply_leave_save/',StudentViews.student_apply_leave_save,name="student_apply_leave_save"),path('student_feedback/',StudentViews.student_feedback,name="student_feedback"),path('student_feedback_save/',StudentViews.student_feedback_save,name="student_feedback_save"),path('student_profile/',StudentViews.student_profile,name="student_profile"),path('student_profile_update/',StudentViews.student_profile_update,name="student_profile_update"),path('student_view_result/',StudentViews.student_view_result,name="student_view_result"),# URLS for Staffpath('staff_home/',StaffViews.staff_home,name="staff_home"),path('staff_take_attendance/',StaffViews.staff_take_attendance,name="staff_take_attendance"),path('get_students/',StaffViews.get_students,name="get_students"),path('save_attendance_data/',StaffViews.save_attendance_data,name="save_attendance_data"),path('staff_update_attendance/',StaffViews.staff_update_attendance,name="staff_update_attendance"),path('get_attendance_dates/',StaffViews.get_attendance_dates,name="get_attendance_dates"),path('get_attendance_student/',StaffViews.get_attendance_student,name="get_attendance_student"),path('update_attendance_data/',StaffViews.update_attendance_data,name="update_attendance_data"),path('staff_apply_leave/',StaffViews.staff_apply_leave,name="staff_apply_leave"),path('staff_apply_leave_save/',StaffViews.staff_apply_leave_save,name="staff_apply_leave_save"),path('staff_feedback/',StaffViews.staff_feedback,name="staff_feedback"),path('staff_feedback_save/',StaffViews.staff_feedback_save,name="staff_feedback_save"),path('staff_profile/',StaffViews.staff_profile,name="staff_profile"),path('staff_profile_update/',StaffViews.staff_profile_update,name="staff_profile_update"),path('staff_add_result/',StaffViews.staff_add_result,name="staff_add_result"),path('staff_add_result_save/',StaffViews.staff_add_result_save,name="staff_add_result_save"),# URL for Adminpath('admin_home/',HodViews.admin_home,name="admin_home"),path('add_staff/',HodViews.add_staff,name="add_staff"),path('add_staff_save/',HodViews.add_staff_save,name="add_staff_save"),path('manage_staff/',HodViews.manage_staff,name="manage_staff"),path('edit_staff/<staff_id>/',HodViews.edit_staff,name="edit_staff"),path('edit_staff_save/',HodViews.edit_staff_save,name="edit_staff_save"),path('delete_staff/<staff_id>/',HodViews.delete_staff,name="delete_staff"),path('add_course/',HodViews.add_course,name="add_course"),path('add_course_save/',HodViews.add_course_save,name="add_course_save"),path('manage_course/',HodViews.manage_course,name="manage_course"),path('edit_course/<course_id>/',HodViews.edit_course,name="edit_course"),path('edit_course_save/',HodViews.edit_course_save,name="edit_course_save"),path('delete_course/<course_id>/',HodViews.delete_course,name="delete_course"),path('manage_session/',HodViews.manage_session,name="manage_session"),path('add_session/',HodViews.add_session,name="add_session"),path('add_session_save/',HodViews.add_session_save,name="add_session_save"),path('edit_session/<session_id>',HodViews.edit_session,name="edit_session"),path('edit_session_save/',HodViews.edit_session_save,name="edit_session_save"),path('delete_session/<session_id>/',HodViews.delete_session,name="delete_session"),path('add_student/',HodViews.add_student,name="add_student"),path('add_student_save/',HodViews.add_student_save,name="add_student_save"),path('edit_student/<student_id>',HodViews.edit_student,name="edit_student"),path('edit_student_save/',HodViews.edit_student_save,name="edit_student_save"),path('manage_student/',HodViews.manage_student,name="manage_student"),path('delete_student/<student_id>/',HodViews.delete_student,name="delete_student"),path('add_subject/',HodViews.add_subject,name="add_subject"),path('add_subject_save/',HodViews.add_subject_save,name="add_subject_save"),path('manage_subject/',HodViews.manage_subject,name="manage_subject"),path('edit_subject/<subject_id>/',HodViews.edit_subject,name="edit_subject"),path('edit_subject_save/',HodViews.edit_subject_save,name="edit_subject_save"),path('delete_subject/<subject_id>/',HodViews.delete_subject,name="delete_subject"),path('check_email_exist/',HodViews.check_email_exist,name="check_email_exist"),path('check_username_exist/',HodViews.check_username_exist,name="check_username_exist"),path('student_feedback_message/',HodViews.student_feedback_message,name="student_feedback_message"),path('student_feedback_message_reply/',HodViews.student_feedback_message_reply,name="student_feedback_message_reply"),path('staff_feedback_message/',HodViews.staff_feedback_message,name="staff_feedback_message"),path('staff_feedback_message_reply/',HodViews.staff_feedback_message_reply,name="staff_feedback_message_reply"),path('student_leave_view/',HodViews.student_leave_view,name="student_leave_view"),path('student_leave_approve/<leave_id>/',HodViews.student_leave_approve,name="student_leave_approve"),path('student_leave_reject/<leave_id>/',HodViews.student_leave_reject,name="student_leave_reject"),path('staff_leave_view/',HodViews.staff_leave_view,name="staff_leave_view"),path('staff_leave_approve/<leave_id>/',HodViews.staff_leave_approve,name="staff_leave_approve"),path('staff_leave_reject/<leave_id>/',HodViews.staff_leave_reject,name="staff_leave_reject"),path('admin_view_attendance/',HodViews.admin_view_attendance,name="admin_view_attendance"),path('admin_get_attendance_dates/',HodViews.admin_get_attendance_dates,name="admin_get_attendance_dates"),path('admin_get_attendance_student/',HodViews.admin_get_attendance_student,name="admin_get_attendance_student"),path('admin_profile/',HodViews.admin_profile,name="admin_profile"),path('admin_profile_update/',HodViews.admin_profile_update,name="admin_profile_update"),]

Step 9: Now create a fileStudentViews.py. It contains the views that are used on the student Interface.

Python
fromdjango.shortcutsimportrender,redirectfromdjango.httpimportHttpResponse,HttpResponseRedirectfromdjango.contribimportmessagesfromdjango.core.files.storageimportFileSystemStoragefromdjango.urlsimportreverseimportdatetimefrom.modelsimportCustomUser,Staffs,Courses,Subjects,Students,Attendance,AttendanceReport,LeaveReportStudent,FeedBackStudent,StudentResultdefstudent_home(request):student_obj=Students.objects.get(admin=request.user.id)total_attendance=AttendanceReport.objects.filter(student_id=student_obj).count()attendance_present=AttendanceReport.objects.filter(student_id=student_obj,status=True).count()attendance_absent=AttendanceReport.objects.filter(student_id=student_obj,status=False).count()course_obj=Courses.objects.get(id=student_obj.course_id.id)total_subjects=Subjects.objects.filter(course_id=course_obj).count()subject_name=[]data_present=[]data_absent=[]subject_data=Subjects.objects.filter(course_id=student_obj.course_id)forsubjectinsubject_data:attendance=Attendance.objects.filter(subject_id=subject.id)attendance_present_count=AttendanceReport.objects.filter(attendance_id__in=attendance,status=True,student_id=student_obj.id).count()attendance_absent_count=AttendanceReport.objects.filter(attendance_id__in=attendance,status=False,student_id=student_obj.id).count()subject_name.append(subject.subject_name)data_present.append(attendance_present_count)data_absent.append(attendance_absent_count)context={"total_attendance":total_attendance,"attendance_present":attendance_present,"attendance_absent":attendance_absent,"total_subjects":total_subjects,"subject_name":subject_name,"data_present":data_present,"data_absent":data_absent}returnrender(request,"student_template/student_home_template.html")defstudent_view_attendance(request):# Getting Logged in Student Datastudent=Students.objects.get(admin=request.user.id)# Getting Course Enrolled of LoggedIn Studentcourse=student.course_id# Getting the Subjects of Course Enrolledsubjects=Subjects.objects.filter(course_id=course)context={"subjects":subjects}returnrender(request,"student_template/student_view_attendance.html",context)defstudent_view_attendance_post(request):ifrequest.method!="POST":messages.error(request,"Invalid Method")returnredirect('student_view_attendance')else:# Getting all the Input Datasubject_id=request.POST.get('subject')start_date=request.POST.get('start_date')end_date=request.POST.get('end_date')# Parsing the date data into Python objectstart_date_parse=datetime.datetime.strptime(start_date,'%Y-%m-%d').date()end_date_parse=datetime.datetime.strptime(end_date,'%Y-%m-%d').date()# Getting all the Subject Data based on Selected Subjectsubject_obj=Subjects.objects.get(id=subject_id)# Getting Logged In User Datauser_obj=CustomUser.objects.get(id=request.user.id)# Getting Student Data Based on Logged in Datastud_obj=Students.objects.get(admin=user_obj)# Now Accessing Attendance Data based on the Range of Date# Selected and Subject Selectedattendance=Attendance.objects.filter(attendance_date__range=(start_date_parse,end_date_parse),subject_id=subject_obj)# Getting Attendance Report based on the attendance# details obtained aboveattendance_reports=AttendanceReport.objects.filter(attendance_id__in=attendance,student_id=stud_obj)context={"subject_obj":subject_obj,"attendance_reports":attendance_reports}returnrender(request,'student_template/student_attendance_data.html',context)defstudent_apply_leave(request):student_obj=Students.objects.get(admin=request.user.id)leave_data=LeaveReportStudent.objects.filter(student_id=student_obj)context={"leave_data":leave_data}returnrender(request,'student_template/student_apply_leave.html',context)defstudent_apply_leave_save(request):ifrequest.method!="POST":messages.error(request,"Invalid Method")returnredirect('student_apply_leave')else:leave_date=request.POST.get('leave_date')leave_message=request.POST.get('leave_message')student_obj=Students.objects.get(admin=request.user.id)try:leave_report=LeaveReportStudent(student_id=student_obj,leave_date=leave_date,leave_message=leave_message,leave_status=0)leave_report.save()messages.success(request,"Applied for Leave.")returnredirect('student_apply_leave')except:messages.error(request,"Failed to Apply Leave")returnredirect('student_apply_leave')defstudent_feedback(request):student_obj=Students.objects.get(admin=request.user.id)feedback_data=FeedBackStudent.objects.filter(student_id=student_obj)context={"feedback_data":feedback_data}returnrender(request,'student_template/student_feedback.html',context)defstudent_feedback_save(request):ifrequest.method!="POST":messages.error(request,"Invalid Method.")returnredirect('student_feedback')else:feedback=request.POST.get('feedback_message')student_obj=Students.objects.get(admin=request.user.id)try:add_feedback=FeedBackStudent(student_id=student_obj,feedback=feedback,feedback_reply="")add_feedback.save()messages.success(request,"Feedback Sent.")returnredirect('student_feedback')except:messages.error(request,"Failed to Send Feedback.")returnredirect('student_feedback')defstudent_profile(request):user=CustomUser.objects.get(id=request.user.id)student=Students.objects.get(admin=user)context={"user":user,"student":student}returnrender(request,'student_template/student_profile.html',context)defstudent_profile_update(request):ifrequest.method!="POST":messages.error(request,"Invalid Method!")returnredirect('student_profile')else:first_name=request.POST.get('first_name')last_name=request.POST.get('last_name')password=request.POST.get('password')address=request.POST.get('address')try:customuser=CustomUser.objects.get(id=request.user.id)customuser.first_name=first_namecustomuser.last_name=last_nameifpassword!=Noneandpassword!="":customuser.set_password(password)customuser.save()student=Students.objects.get(admin=customuser.id)student.address=addressstudent.save()messages.success(request,"Profile Updated Successfully")returnredirect('student_profile')except:messages.error(request,"Failed to Update Profile")returnredirect('student_profile')defstudent_view_result(request):student=Students.objects.get(admin=request.user.id)student_result=StudentResult.objects.filter(student_id=student.id)context={"student_result":student_result,}returnrender(request,"student_template/student_view_result.html",context)

Step 10: Now add theStaffViews.py. It contains the views of the staff interface.

Python
fromdjango.shortcutsimportrender,redirectfromdjango.httpimportHttpResponse,HttpResponseRedirect,JsonResponsefromdjango.contribimportmessagesfromdjango.core.files.storageimportFileSystemStoragefromdjango.urlsimportreversefromdjango.views.decorators.csrfimportcsrf_exemptfromdjango.coreimportserializersimportjsonfrom.modelsimportCustomUser,Staffs,Courses,Subjects,Students,SessionYearModel,Attendance,AttendanceReport,LeaveReportStaff,FeedBackStaffs,StudentResultdefstaff_home(request):# Fetching All Students under Staffprint(request.user.id)subjects=Subjects.objects.filter(staff_id=request.user.id)print(subjects)course_id_list=[]forsubjectinsubjects:course=Courses.objects.get(id=subject.course_id.id)course_id_list.append(course.id)final_course=[]# Removing Duplicate Course Idforcourse_idincourse_id_list:ifcourse_idnotinfinal_course:final_course.append(course_id)print(final_course)students_count=Students.objects.filter(course_id__in=final_course).count()subject_count=subjects.count()print(subject_count)print(students_count)# Fetch All Attendance Countattendance_count=Attendance.objects.filter(subject_id__in=subjects).count()# Fetch All Approve Leave# print(request.user)print(request.user.user_type)staff=Staffs.objects.get(admin=request.user.id)leave_count=LeaveReportStaff.objects.filter(staff_id=staff.id,leave_status=1).count()# Fetch Attendance Data by Subjectssubject_list=[]attendance_list=[]forsubjectinsubjects:attendance_count1=Attendance.objects.filter(subject_id=subject.id).count()subject_list.append(subject.subject_name)attendance_list.append(attendance_count1)students_attendance=Students.objects.filter(course_id__in=final_course)student_list=[]student_list_attendance_present=[]student_list_attendance_absent=[]forstudentinstudents_attendance:attendance_present_count=AttendanceReport.objects.filter(status=True,student_id=student.id).count()attendance_absent_count=AttendanceReport.objects.filter(status=False,student_id=student.id).count()student_list.append(student.admin.first_name+" "+student.admin.last_name)student_list_attendance_present.append(attendance_present_count)student_list_attendance_absent.append(attendance_absent_count)context={"students_count":students_count,"attendance_count":attendance_count,"leave_count":leave_count,"subject_count":subject_count,"subject_list":subject_list,"attendance_list":attendance_list,"student_list":student_list,"attendance_present_list":student_list_attendance_present,"attendance_absent_list":student_list_attendance_absent}returnrender(request,"staff_template/staff_home_template.html",context)defstaff_take_attendance(request):subjects=Subjects.objects.filter(staff_id=request.user.id)session_years=SessionYearModel.objects.all()context={"subjects":subjects,"session_years":session_years}returnrender(request,"staff_template/take_attendance_template.html",context)defstaff_apply_leave(request):print(request.user.id)staff_obj=Staffs.objects.get(admin=request.user.id)leave_data=LeaveReportStaff.objects.filter(staff_id=staff_obj)context={"leave_data":leave_data}returnrender(request,"staff_template/staff_apply_leave_template.html",context)defstaff_apply_leave_save(request):ifrequest.method!="POST":messages.error(request,"Invalid Method")returnredirect('staff_apply_leave')else:leave_date=request.POST.get('leave_date')leave_message=request.POST.get('leave_message')staff_obj=Staffs.objects.get(admin=request.user.id)try:leave_report=LeaveReportStaff(staff_id=staff_obj,leave_date=leave_date,leave_message=leave_message,leave_status=0)leave_report.save()messages.success(request,"Applied for Leave.")returnredirect('staff_apply_leave')except:messages.error(request,"Failed to Apply Leave")returnredirect('staff_apply_leave')defstaff_feedback(request):returnrender(request,"staff_template/staff_feedback_template.html")defstaff_feedback_save(request):ifrequest.method!="POST":messages.error(request,"Invalid Method.")returnredirect('staff_feedback')else:feedback=request.POST.get('feedback_message')staff_obj=Staffs.objects.get(admin=request.user.id)try:add_feedback=FeedBackStaffs(staff_id=staff_obj,feedback=feedback,feedback_reply="")add_feedback.save()messages.success(request,"Feedback Sent.")returnredirect('staff_feedback')except:messages.error(request,"Failed to Send Feedback.")returnredirect('staff_feedback')@csrf_exemptdefget_students(request):subject_id=request.POST.get("subject")session_year=request.POST.get("session_year")# Students enroll to Course, Course has Subjects# Getting all data from subject model based on subject_idsubject_model=Subjects.objects.get(id=subject_id)session_model=SessionYearModel.objects.get(id=session_year)students=Students.objects.filter(course_id=subject_model.course_id,session_year_id=session_model)# Only Passing Student Id and Student Name Onlylist_data=[]forstudentinstudents:data_small={"id":student.admin.id,"name":student.admin.first_name+" "+student.admin.last_name}list_data.append(data_small)returnJsonResponse(json.dumps(list_data),content_type="application/json",safe=False)@csrf_exemptdefsave_attendance_data(request):# Get Values from Staf Take Attendance form via AJAX (JavaScript)# Use getlist to access HTML Array/List Input Datastudent_ids=request.POST.get("student_ids")subject_id=request.POST.get("subject_id")attendance_date=request.POST.get("attendance_date")session_year_id=request.POST.get("session_year_id")subject_model=Subjects.objects.get(id=subject_id)session_year_model=SessionYearModel.objects.get(id=session_year_id)json_student=json.loads(student_ids)try:# First Attendance Data is Saved on Attendance Modelattendance=Attendance(subject_id=subject_model,attendance_date=attendance_date,session_year_id=session_year_model)attendance.save()forstudinjson_student:# Attendance of Individual Student saved on AttendanceReport Modelstudent=Students.objects.get(admin=stud['id'])attendance_report=AttendanceReport(student_id=student,attendance_id=attendance,status=stud['status'])attendance_report.save()returnHttpResponse("OK")except:returnHttpResponse("Error")defstaff_update_attendance(request):subjects=Subjects.objects.filter(staff_id=request.user.id)session_years=SessionYearModel.objects.all()context={"subjects":subjects,"session_years":session_years}returnrender(request,"staff_template/update_attendance_template.html",context)@csrf_exemptdefget_attendance_dates(request):# Getting Values from Ajax POST 'Fetch Student'subject_id=request.POST.get("subject")session_year=request.POST.get("session_year_id")# Students enroll to Course, Course has Subjects# Getting all data from subject model based on subject_idsubject_model=Subjects.objects.get(id=subject_id)session_model=SessionYearModel.objects.get(id=session_year)attendance=Attendance.objects.filter(subject_id=subject_model,session_year_id=session_model)# Only Passing Student Id and Student Name Onlylist_data=[]forattendance_singleinattendance:data_small={"id":attendance_single.id,"attendance_date":str(attendance_single.attendance_date),"session_year_id":attendance_single.session_year_id.id}list_data.append(data_small)returnJsonResponse(json.dumps(list_data),content_type="application/json",safe=False)@csrf_exemptdefget_attendance_student(request):# Getting Values from Ajax POST 'Fetch Student'attendance_date=request.POST.get('attendance_date')attendance=Attendance.objects.get(id=attendance_date)attendance_data=AttendanceReport.objects.filter(attendance_id=attendance)# Only Passing Student Id and Student Name Onlylist_data=[]forstudentinattendance_data:data_small={"id":student.student_id.admin.id,"name":student.student_id.admin.first_name+" "+student.student_id.admin.last_name,"status":student.status}list_data.append(data_small)returnJsonResponse(json.dumps(list_data),content_type="application/json",safe=False)@csrf_exemptdefupdate_attendance_data(request):student_ids=request.POST.get("student_ids")attendance_date=request.POST.get("attendance_date")attendance=Attendance.objects.get(id=attendance_date)json_student=json.loads(student_ids)try:forstudinjson_student:# Attendance of Individual Student saved on AttendanceReport Modelstudent=Students.objects.get(admin=stud['id'])attendance_report=AttendanceReport.objects.get(student_id=student,attendance_id=attendance)attendance_report.status=stud['status']attendance_report.save()returnHttpResponse("OK")except:returnHttpResponse("Error")defstaff_profile(request):user=CustomUser.objects.get(id=request.user.id)staff=Staffs.objects.get(admin=user)context={"user":user,"staff":staff}returnrender(request,'staff_template/staff_profile.html',context)defstaff_profile_update(request):ifrequest.method!="POST":messages.error(request,"Invalid Method!")returnredirect('staff_profile')else:first_name=request.POST.get('first_name')last_name=request.POST.get('last_name')password=request.POST.get('password')address=request.POST.get('address')try:customuser=CustomUser.objects.get(id=request.user.id)customuser.first_name=first_namecustomuser.last_name=last_nameifpassword!=Noneandpassword!="":customuser.set_password(password)customuser.save()staff=Staffs.objects.get(admin=customuser.id)staff.address=addressstaff.save()messages.success(request,"Profile Updated Successfully")returnredirect('staff_profile')except:messages.error(request,"Failed to Update Profile")returnredirect('staff_profile')defstaff_add_result(request):subjects=Subjects.objects.filter(staff_id=request.user.id)session_years=SessionYearModel.objects.all()context={"subjects":subjects,"session_years":session_years,}returnrender(request,"staff_template/add_result_template.html",context)defstaff_add_result_save(request):ifrequest.method!="POST":messages.error(request,"Invalid Method")returnredirect('staff_add_result')else:student_admin_id=request.POST.get('student_list')assignment_marks=request.POST.get('assignment_marks')exam_marks=request.POST.get('exam_marks')subject_id=request.POST.get('subject')student_obj=Students.objects.get(admin=student_admin_id)subject_obj=Subjects.objects.get(id=subject_id)try:# Check if Students Result Already Exists or notcheck_exist=StudentResult.objects.filter(subject_id=subject_obj,student_id=student_obj).exists()ifcheck_exist:result=StudentResult.objects.get(subject_id=subject_obj,student_id=student_obj)result.subject_assignment_marks=assignment_marksresult.subject_exam_marks=exam_marksresult.save()messages.success(request,"Result Updated Successfully!")returnredirect('staff_add_result')else:result=StudentResult(student_id=student_obj,subject_id=subject_obj,subject_exam_marks=exam_marks,subject_assignment_marks=assignment_marks)result.save()messages.success(request,"Result Added Successfully!")returnredirect('staff_add_result')except:messages.error(request,"Failed to Add Result!")returnredirect('staff_add_result')

Step 11: Now add theHodViews.py. It contains the views of the HOD interface.

Python
fromdjango.shortcutsimportrender,redirectfromdjango.httpimportHttpResponse,HttpResponseRedirect,JsonResponsefromdjango.contribimportmessagesfromdjango.core.files.storageimportFileSystemStoragefromdjango.urlsimportreversefromdjango.views.decorators.csrfimportcsrf_exemptimportjsonfrom.formsimportAddStudentForm,EditStudentFormfrom.modelsimportCustomUser,Staffs,Courses,Subjects,Students,SessionYearModel,FeedBackStudent,FeedBackStaffs,LeaveReportStudent,LeaveReportStaff,Attendance,AttendanceReportdefadmin_home(request):all_student_count=Students.objects.all().count()subject_count=Subjects.objects.all().count()course_count=Courses.objects.all().count()staff_count=Staffs.objects.all().count()course_all=Courses.objects.all()course_name_list=[]subject_count_list=[]student_count_list_in_course=[]forcourseincourse_all:subjects=Subjects.objects.filter(course_id=course.id).count()students=Students.objects.filter(course_id=course.id).count()course_name_list.append(course.course_name)subject_count_list.append(subjects)student_count_list_in_course.append(students)subject_all=Subjects.objects.all()subject_list=[]student_count_list_in_subject=[]forsubjectinsubject_all:course=Courses.objects.get(id=subject.course_id.id)student_count=Students.objects.filter(course_id=course.id).count()subject_list.append(subject.subject_name)student_count_list_in_subject.append(student_count)# For Saffsstaff_attendance_present_list=[]staff_attendance_leave_list=[]staff_name_list=[]staffs=Staffs.objects.all()forstaffinstaffs:subject_ids=Subjects.objects.filter(staff_id=staff.admin.id)attendance=Attendance.objects.filter(subject_id__in=subject_ids).count()leaves=LeaveReportStaff.objects.filter(staff_id=staff.id,leave_status=1).count()staff_attendance_present_list.append(attendance)staff_attendance_leave_list.append(leaves)staff_name_list.append(staff.admin.first_name)# For Studentsstudent_attendance_present_list=[]student_attendance_leave_list=[]student_name_list=[]students=Students.objects.all()forstudentinstudents:attendance=AttendanceReport.objects.filter(student_id=student.id,status=True).count()absent=AttendanceReport.objects.filter(student_id=student.id,status=False).count()leaves=LeaveReportStudent.objects.filter(student_id=student.id,leave_status=1).count()student_attendance_present_list.append(attendance)student_attendance_leave_list.append(leaves+absent)student_name_list.append(student.admin.first_name)context={"all_student_count":all_student_count,"subject_count":subject_count,"course_count":course_count,"staff_count":staff_count,"course_name_list":course_name_list,"subject_count_list":subject_count_list,"student_count_list_in_course":student_count_list_in_course,"subject_list":subject_list,"student_count_list_in_subject":student_count_list_in_subject,"staff_attendance_present_list":staff_attendance_present_list,"staff_attendance_leave_list":staff_attendance_leave_list,"staff_name_list":staff_name_list,"student_attendance_present_list":student_attendance_present_list,"student_attendance_leave_list":student_attendance_leave_list,"student_name_list":student_name_list,}returnrender(request,"hod_template/home_content.html",context)defadd_staff(request):returnrender(request,"hod_template/add_staff_template.html")defadd_staff_save(request):ifrequest.method!="POST":messages.error(request,"Invalid Method ")returnredirect('add_staff')else:first_name=request.POST.get('first_name')last_name=request.POST.get('last_name')username=request.POST.get('username')email=request.POST.get('email')password=request.POST.get('password')address=request.POST.get('address')try:user=CustomUser.objects.create_user(username=username,password=password,email=email,first_name=first_name,last_name=last_name,user_type=2)user.staffs.address=addressuser.save()messages.success(request,"Staff Added Successfully!")returnredirect('add_staff')except:messages.error(request,"Failed to Add Staff!")returnredirect('add_staff')defmanage_staff(request):staffs=Staffs.objects.all()context={"staffs":staffs}returnrender(request,"hod_template/manage_staff_template.html",context)defedit_staff(request,staff_id):staff=Staffs.objects.get(admin=staff_id)context={"staff":staff,"id":staff_id}returnrender(request,"hod_template/edit_staff_template.html",context)defedit_staff_save(request):ifrequest.method!="POST":returnHttpResponse("<h2>Method Not Allowed</h2>")else:staff_id=request.POST.get('staff_id')username=request.POST.get('username')email=request.POST.get('email')first_name=request.POST.get('first_name')last_name=request.POST.get('last_name')address=request.POST.get('address')try:# INSERTING into Customuser Modeluser=CustomUser.objects.get(id=staff_id)user.first_name=first_nameuser.last_name=last_nameuser.email=emailuser.username=usernameuser.save()# INSERTING into Staff Modelstaff_model=Staffs.objects.get(admin=staff_id)staff_model.address=addressstaff_model.save()messages.success(request,"Staff Updated Successfully.")returnredirect('/edit_staff/'+staff_id)except:messages.error(request,"Failed to Update Staff.")returnredirect('/edit_staff/'+staff_id)defdelete_staff(request,staff_id):staff=Staffs.objects.get(admin=staff_id)try:staff.delete()messages.success(request,"Staff Deleted Successfully.")returnredirect('manage_staff')except:messages.error(request,"Failed to Delete Staff.")returnredirect('manage_staff')defadd_course(request):returnrender(request,"hod_template/add_course_template.html")defadd_course_save(request):ifrequest.method!="POST":messages.error(request,"Invalid Method!")returnredirect('add_course')else:course=request.POST.get('course')try:course_model=Courses(course_name=course)course_model.save()messages.success(request,"Course Added Successfully!")returnredirect('add_course')except:messages.error(request,"Failed to Add Course!")returnredirect('add_course')defmanage_course(request):courses=Courses.objects.all()context={"courses":courses}returnrender(request,'hod_template/manage_course_template.html',context)defedit_course(request,course_id):course=Courses.objects.get(id=course_id)context={"course":course,"id":course_id}returnrender(request,'hod_template/edit_course_template.html',context)defedit_course_save(request):ifrequest.method!="POST":HttpResponse("Invalid Method")else:course_id=request.POST.get('course_id')course_name=request.POST.get('course')try:course=Courses.objects.get(id=course_id)course.course_name=course_namecourse.save()messages.success(request,"Course Updated Successfully.")returnredirect('/edit_course/'+course_id)except:messages.error(request,"Failed to Update Course.")returnredirect('/edit_course/'+course_id)defdelete_course(request,course_id):course=Courses.objects.get(id=course_id)try:course.delete()messages.success(request,"Course Deleted Successfully.")returnredirect('manage_course')except:messages.error(request,"Failed to Delete Course.")returnredirect('manage_course')defmanage_session(request):session_years=SessionYearModel.objects.all()context={"session_years":session_years}returnrender(request,"hod_template/manage_session_template.html",context)defadd_session(request):returnrender(request,"hod_template/add_session_template.html")defadd_session_save(request):ifrequest.method!="POST":messages.error(request,"Invalid Method")returnredirect('add_course')else:session_start_year=request.POST.get('session_start_year')session_end_year=request.POST.get('session_end_year')try:sessionyear=SessionYearModel(session_start_year=session_start_year,session_end_year=session_end_year)sessionyear.save()messages.success(request,"Session Year added Successfully!")returnredirect("add_session")except:messages.error(request,"Failed to Add Session Year")returnredirect("add_session")defedit_session(request,session_id):session_year=SessionYearModel.objects.get(id=session_id)context={"session_year":session_year}returnrender(request,"hod_template/edit_session_template.html",context)defedit_session_save(request):ifrequest.method!="POST":messages.error(request,"Invalid Method!")returnredirect('manage_session')else:session_id=request.POST.get('session_id')session_start_year=request.POST.get('session_start_year')session_end_year=request.POST.get('session_end_year')try:session_year=SessionYearModel.objects.get(id=session_id)session_year.session_start_year=session_start_yearsession_year.session_end_year=session_end_yearsession_year.save()messages.success(request,"Session Year Updated Successfully.")returnredirect('/edit_session/'+session_id)except:messages.error(request,"Failed to Update Session Year.")returnredirect('/edit_session/'+session_id)defdelete_session(request,session_id):session=SessionYearModel.objects.get(id=session_id)try:session.delete()messages.success(request,"Session Deleted Successfully.")returnredirect('manage_session')except:messages.error(request,"Failed to Delete Session.")returnredirect('manage_session')defadd_student(request):form=AddStudentForm()context={"form":form}returnrender(request,'hod_template/add_student_template.html',context)defadd_student_save(request):ifrequest.method!="POST":messages.error(request,"Invalid Method")returnredirect('add_student')else:form=AddStudentForm(request.POST,request.FILES)ifform.is_valid():first_name=form.cleaned_data['first_name']last_name=form.cleaned_data['last_name']username=form.cleaned_data['username']email=form.cleaned_data['email']password=form.cleaned_data['password']address=form.cleaned_data['address']session_year_id=form.cleaned_data['session_year_id']course_id=form.cleaned_data['course_id']gender=form.cleaned_data['gender']iflen(request.FILES)!=0:profile_pic=request.FILES['profile_pic']fs=FileSystemStorage()filename=fs.save(profile_pic.name,profile_pic)profile_pic_url=fs.url(filename)else:profile_pic_url=Nonetry:user=CustomUser.objects.create_user(username=username,password=password,email=email,first_name=first_name,last_name=last_name,user_type=3)user.students.address=addresscourse_obj=Courses.objects.get(id=course_id)user.students.course_id=course_objsession_year_obj=SessionYearModel.objects.get(id=session_year_id)user.students.session_year_id=session_year_objuser.students.gender=genderuser.students.profile_pic=profile_pic_urluser.save()messages.success(request,"Student Added Successfully!")returnredirect('add_student')except:messages.error(request,"Failed to Add Student!")returnredirect('add_student')else:returnredirect('add_student')defmanage_student(request):students=Students.objects.all()context={"students":students}returnrender(request,'hod_template/manage_student_template.html',context)defedit_student(request,student_id):# Adding Student ID into Session Variablerequest.session['student_id']=student_idstudent=Students.objects.get(admin=student_id)form=EditStudentForm()# Filling the form with Data from Databaseform.fields['email'].initial=student.admin.emailform.fields['username'].initial=student.admin.usernameform.fields['first_name'].initial=student.admin.first_nameform.fields['last_name'].initial=student.admin.last_nameform.fields['address'].initial=student.addressform.fields['course_id'].initial=student.course_id.idform.fields['gender'].initial=student.genderform.fields['session_year_id'].initial=student.session_year_id.idcontext={"id":student_id,"username":student.admin.username,"form":form}returnrender(request,"hod_template/edit_student_template.html",context)defedit_student_save(request):ifrequest.method!="POST":returnHttpResponse("Invalid Method!")else:student_id=request.session.get('student_id')ifstudent_id==None:returnredirect('/manage_student')form=EditStudentForm(request.POST,request.FILES)ifform.is_valid():email=form.cleaned_data['email']username=form.cleaned_data['username']first_name=form.cleaned_data['first_name']last_name=form.cleaned_data['last_name']address=form.cleaned_data['address']course_id=form.cleaned_data['course_id']gender=form.cleaned_data['gender']session_year_id=form.cleaned_data['session_year_id']# Getting Profile Pic first# First Check whether the file is selected or not# Upload only if file is selectediflen(request.FILES)!=0:profile_pic=request.FILES['profile_pic']fs=FileSystemStorage()filename=fs.save(profile_pic.name,profile_pic)profile_pic_url=fs.url(filename)else:profile_pic_url=Nonetry:# First Update into Custom User Modeluser=CustomUser.objects.get(id=student_id)user.first_name=first_nameuser.last_name=last_nameuser.email=emailuser.username=usernameuser.save()# Then Update Students Tablestudent_model=Students.objects.get(admin=student_id)student_model.address=addresscourse=Courses.objects.get(id=course_id)student_model.course_id=coursesession_year_obj=SessionYearModel.objects.get(id=session_year_id)student_model.session_year_id=session_year_objstudent_model.gender=genderifprofile_pic_url!=None:student_model.profile_pic=profile_pic_urlstudent_model.save()# Delete student_id SESSION after the data is updateddelrequest.session['student_id']messages.success(request,"Student Updated Successfully!")returnredirect('/edit_student/'+student_id)except:messages.success(request,"Failed to Uupdate Student.")returnredirect('/edit_student/'+student_id)else:returnredirect('/edit_student/'+student_id)defdelete_student(request,student_id):student=Students.objects.get(admin=student_id)try:student.delete()messages.success(request,"Student Deleted Successfully.")returnredirect('manage_student')except:messages.error(request,"Failed to Delete Student.")returnredirect('manage_student')defadd_subject(request):courses=Courses.objects.all()staffs=CustomUser.objects.filter(user_type='2')context={"courses":courses,"staffs":staffs}returnrender(request,'hod_template/add_subject_template.html',context)defadd_subject_save(request):ifrequest.method!="POST":messages.error(request,"Method Not Allowed!")returnredirect('add_subject')else:subject_name=request.POST.get('subject')course_id=request.POST.get('course')course=Courses.objects.get(id=course_id)staff_id=request.POST.get('staff')staff=CustomUser.objects.get(id=staff_id)try:subject=Subjects(subject_name=subject_name,course_id=course,staff_id=staff)subject.save()messages.success(request,"Subject Added Successfully!")returnredirect('add_subject')except:messages.error(request,"Failed to Add Subject!")returnredirect('add_subject')defmanage_subject(request):subjects=Subjects.objects.all()context={"subjects":subjects}returnrender(request,'hod_template/manage_subject_template.html',context)defedit_subject(request,subject_id):subject=Subjects.objects.get(id=subject_id)courses=Courses.objects.all()staffs=CustomUser.objects.filter(user_type='2')context={"subject":subject,"courses":courses,"staffs":staffs,"id":subject_id}returnrender(request,'hod_template/edit_subject_template.html',context)defedit_subject_save(request):ifrequest.method!="POST":HttpResponse("Invalid Method.")else:subject_id=request.POST.get('subject_id')subject_name=request.POST.get('subject')course_id=request.POST.get('course')staff_id=request.POST.get('staff')try:subject=Subjects.objects.get(id=subject_id)subject.subject_name=subject_namecourse=Courses.objects.get(id=course_id)subject.course_id=coursestaff=CustomUser.objects.get(id=staff_id)subject.staff_id=staffsubject.save()messages.success(request,"Subject Updated Successfully.")returnHttpResponseRedirect(reverse("edit_subject",kwargs={"subject_id":subject_id}))except:messages.error(request,"Failed to Update Subject.")returnHttpResponseRedirect(reverse("edit_subject",kwargs={"subject_id":subject_id}))defdelete_subject(request,subject_id):subject=Subjects.objects.get(id=subject_id)try:subject.delete()messages.success(request,"Subject Deleted Successfully.")returnredirect('manage_subject')except:messages.error(request,"Failed to Delete Subject.")returnredirect('manage_subject')@csrf_exemptdefcheck_email_exist(request):email=request.POST.get("email")user_obj=CustomUser.objects.filter(email=email).exists()ifuser_obj:returnHttpResponse(True)else:returnHttpResponse(False)@csrf_exemptdefcheck_username_exist(request):username=request.POST.get("username")user_obj=CustomUser.objects.filter(username=username).exists()ifuser_obj:returnHttpResponse(True)else:returnHttpResponse(False)defstudent_feedback_message(request):feedbacks=FeedBackStudent.objects.all()context={"feedbacks":feedbacks}returnrender(request,'hod_template/student_feedback_template.html',context)@csrf_exemptdefstudent_feedback_message_reply(request):feedback_id=request.POST.get('id')feedback_reply=request.POST.get('reply')try:feedback=FeedBackStudent.objects.get(id=feedback_id)feedback.feedback_reply=feedback_replyfeedback.save()returnHttpResponse("True")except:returnHttpResponse("False")defstaff_feedback_message(request):feedbacks=FeedBackStaffs.objects.all()context={"feedbacks":feedbacks}returnrender(request,'hod_template/staff_feedback_template.html',context)@csrf_exemptdefstaff_feedback_message_reply(request):feedback_id=request.POST.get('id')feedback_reply=request.POST.get('reply')try:feedback=FeedBackStaffs.objects.get(id=feedback_id)feedback.feedback_reply=feedback_replyfeedback.save()returnHttpResponse("True")except:returnHttpResponse("False")defstudent_leave_view(request):leaves=LeaveReportStudent.objects.all()context={"leaves":leaves}returnrender(request,'hod_template/student_leave_view.html',context)defstudent_leave_approve(request,leave_id):leave=LeaveReportStudent.objects.get(id=leave_id)leave.leave_status=1leave.save()returnredirect('student_leave_view')defstudent_leave_reject(request,leave_id):leave=LeaveReportStudent.objects.get(id=leave_id)leave.leave_status=2leave.save()returnredirect('student_leave_view')defstaff_leave_view(request):leaves=LeaveReportStaff.objects.all()context={"leaves":leaves}returnrender(request,'hod_template/staff_leave_view.html',context)defstaff_leave_approve(request,leave_id):leave=LeaveReportStaff.objects.get(id=leave_id)leave.leave_status=1leave.save()returnredirect('staff_leave_view')defstaff_leave_reject(request,leave_id):leave=LeaveReportStaff.objects.get(id=leave_id)leave.leave_status=2leave.save()returnredirect('staff_leave_view')defadmin_view_attendance(request):subjects=Subjects.objects.all()session_years=SessionYearModel.objects.all()context={"subjects":subjects,"session_years":session_years}returnrender(request,"hod_template/admin_view_attendance.html",context)@csrf_exemptdefadmin_get_attendance_dates(request):subject_id=request.POST.get("subject")session_year=request.POST.get("session_year_id")# Students enroll to Course, Course has Subjects# Getting all data from subject model based on subject_idsubject_model=Subjects.objects.get(id=subject_id)session_model=SessionYearModel.objects.get(id=session_year)attendance=Attendance.objects.filter(subject_id=subject_model,session_year_id=session_model)# Only Passing Student Id and Student Name Onlylist_data=[]forattendance_singleinattendance:data_small={"id":attendance_single.id,"attendance_date":str(attendance_single.attendance_date),"session_year_id":attendance_single.session_year_id.id}list_data.append(data_small)returnJsonResponse(json.dumps(list_data),content_type="application/json",safe=False)@csrf_exemptdefadmin_get_attendance_student(request):# Getting Values from Ajax POST 'Fetch Student'attendance_date=request.POST.get('attendance_date')attendance=Attendance.objects.get(id=attendance_date)attendance_data=AttendanceReport.objects.filter(attendance_id=attendance)# Only Passing Student Id and Student Name Onlylist_data=[]forstudentinattendance_data:data_small={"id":student.student_id.admin.id,"name":student.student_id.admin.first_name+" "+student.student_id.admin.last_name,"status":student.status}list_data.append(data_small)returnJsonResponse(json.dumps(list_data),content_type="application/json",safe=False)defadmin_profile(request):user=CustomUser.objects.get(id=request.user.id)context={"user":user}returnrender(request,'hod_template/admin_profile.html',context)defadmin_profile_update(request):ifrequest.method!="POST":messages.error(request,"Invalid Method!")returnredirect('admin_profile')else:first_name=request.POST.get('first_name')last_name=request.POST.get('last_name')password=request.POST.get('password')try:customuser=CustomUser.objects.get(id=request.user.id)customuser.first_name=first_namecustomuser.last_name=last_nameifpassword!=Noneandpassword!="":customuser.set_password(password)customuser.save()messages.success(request,"Profile Updated Successfully")returnredirect('admin_profile')except:messages.error(request,"Failed to Update Profile")returnredirect('admin_profile')defstaff_profile(request):passdefstudent_profile(requtest):pass

Step 12: Now addmodels.py to our project. It stores all the models that will be used in our project. 

Python
fromdjango.contrib.auth.modelsimportAbstractUserfromdjango.dbimportmodelsfromdjango.db.models.signalsimportpost_savefromdjango.dispatchimportreceiverclassSessionYearModel(models.Model):id=models.AutoField(primary_key=True)session_start_year=models.DateField()session_end_year=models.DateField()objects=models.Manager()# Overriding the Default Django Auth# User and adding One More Field (user_type)classCustomUser(AbstractUser):HOD='1'STAFF='2'STUDENT='3'EMAIL_TO_USER_TYPE_MAP={'hod':HOD,'staff':STAFF,'student':STUDENT}user_type_data=((HOD,"HOD"),(STAFF,"Staff"),(STUDENT,"Student"))user_type=models.CharField(default=1,choices=user_type_data,max_length=10)classAdminHOD(models.Model):id=models.AutoField(primary_key=True)admin=models.OneToOneField(CustomUser,on_delete=models.CASCADE)created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)objects=models.Manager()classStaffs(models.Model):id=models.AutoField(primary_key=True)admin=models.OneToOneField(CustomUser,on_delete=models.CASCADE)address=models.TextField()created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)objects=models.Manager()classCourses(models.Model):id=models.AutoField(primary_key=True)course_name=models.CharField(max_length=255)created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)objects=models.Manager()classSubjects(models.Model):id=models.AutoField(primary_key=True)subject_name=models.CharField(max_length=255)# need to give default coursecourse_id=models.ForeignKey(Courses,on_delete=models.CASCADE,default=1)staff_id=models.ForeignKey(CustomUser,on_delete=models.CASCADE)created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)objects=models.Manager()classStudents(models.Model):id=models.AutoField(primary_key=True)admin=models.OneToOneField(CustomUser,on_delete=models.CASCADE)gender=models.CharField(max_length=50)profile_pic=models.FileField()address=models.TextField()course_id=models.ForeignKey(Courses,on_delete=models.DO_NOTHING,default=1)session_year_id=models.ForeignKey(SessionYearModel,null=True,on_delete=models.CASCADE)created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)objects=models.Manager()classAttendance(models.Model):# Subject Attendanceid=models.AutoField(primary_key=True)subject_id=models.ForeignKey(Subjects,on_delete=models.DO_NOTHING)attendance_date=models.DateField()session_year_id=models.ForeignKey(SessionYearModel,on_delete=models.CASCADE)created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)objects=models.Manager()classAttendanceReport(models.Model):# Individual Student Attendanceid=models.AutoField(primary_key=True)student_id=models.ForeignKey(Students,on_delete=models.DO_NOTHING)attendance_id=models.ForeignKey(Attendance,on_delete=models.CASCADE)status=models.BooleanField(default=False)created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)objects=models.Manager()classLeaveReportStudent(models.Model):id=models.AutoField(primary_key=True)student_id=models.ForeignKey(Students,on_delete=models.CASCADE)leave_date=models.CharField(max_length=255)leave_message=models.TextField()leave_status=models.IntegerField(default=0)created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)objects=models.Manager()classLeaveReportStaff(models.Model):id=models.AutoField(primary_key=True)staff_id=models.ForeignKey(Staffs,on_delete=models.CASCADE)leave_date=models.CharField(max_length=255)leave_message=models.TextField()leave_status=models.IntegerField(default=0)created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)objects=models.Manager()classFeedBackStudent(models.Model):id=models.AutoField(primary_key=True)student_id=models.ForeignKey(Students,on_delete=models.CASCADE)feedback=models.TextField()feedback_reply=models.TextField()created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)objects=models.Manager()classFeedBackStaffs(models.Model):id=models.AutoField(primary_key=True)staff_id=models.ForeignKey(Staffs,on_delete=models.CASCADE)feedback=models.TextField()feedback_reply=models.TextField()created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)objects=models.Manager()classNotificationStudent(models.Model):id=models.AutoField(primary_key=True)student_id=models.ForeignKey(Students,on_delete=models.CASCADE)message=models.TextField()created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)objects=models.Manager()classNotificationStaffs(models.Model):id=models.AutoField(primary_key=True)stafff_id=models.ForeignKey(Staffs,on_delete=models.CASCADE)message=models.TextField()created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)objects=models.Manager()classStudentResult(models.Model):id=models.AutoField(primary_key=True)student_id=models.ForeignKey(Students,on_delete=models.CASCADE)subject_id=models.ForeignKey(Subjects,on_delete=models.CASCADE,default=1)subject_exam_marks=models.FloatField(default=0)subject_assignment_marks=models.FloatField(default=0)created_at=models.DateTimeField(auto_now_add=True)updated_at=models.DateTimeField(auto_now=True)objects=models.Manager()#Creating Django Signals@receiver(post_save,sender=CustomUser)# Now Creating a Function which will# automatically insert data in HOD, Staff or Studentdefcreate_user_profile(sender,instance,created,**kwargs):# if Created is true (Means Data Inserted)ifcreated:# Check the user_type and insert the data in respective tablesifinstance.user_type==1:AdminHOD.objects.create(admin=instance)ifinstance.user_type==2:Staffs.objects.create(admin=instance)ifinstance.user_type==3:Students.objects.create(admin=instance,course_id=Courses.objects.get(id=1),session_year_id=SessionYearModel.objects.get(id=1),address="",profile_pic="",gender="")@receiver(post_save,sender=CustomUser)defsave_user_profile(sender,instance,**kwargs):ifinstance.user_type==1:instance.adminhod.save()ifinstance.user_type==2:instance.staffs.save()ifinstance.user_type==3:instance.students.save()

Step 13:Go to student_management_project -> setting and addAUTH_USER_MODEL = 'student_management_app.CustomUser'.

Custom user configured

Step 14: Now createforms.py

Python
fromdjangoimportformsfrom.modelsimportCourses,SessionYearModelclassDateInput(forms.DateInput):input_type="date"classAddStudentForm(forms.Form):email=forms.EmailField(label="Email",max_length=50,widget=forms.EmailInput(attrs={"class":"form-control"}))password=forms.CharField(label="Password",max_length=50,widget=forms.PasswordInput(attrs={"class":"form-control"}))first_name=forms.CharField(label="First Name",max_length=50,widget=forms.TextInput(attrs={"class":"form-control"}))last_name=forms.CharField(label="Last Name",max_length=50,widget=forms.TextInput(attrs={"class":"form-control"}))username=forms.CharField(label="Username",max_length=50,widget=forms.TextInput(attrs={"class":"form-control"}))address=forms.CharField(label="Address",max_length=50,widget=forms.TextInput(attrs={"class":"form-control"}))#For Displaying Coursestry:courses=Courses.objects.all()course_list=[]forcourseincourses:single_course=(course.id,course.course_name)course_list.append(single_course)except:print("here")course_list=[]#For Displaying Session Yearstry:session_years=SessionYearModel.objects.all()session_year_list=[]forsession_yearinsession_years:single_session_year=(session_year.id,str(session_year.session_start_year)+" to "+str(session_year.session_end_year))session_year_list.append(single_session_year)except:session_year_list=[]gender_list=(('Male','Male'),('Female','Female'))course_id=forms.ChoiceField(label="Course",choices=course_list,widget=forms.Select(attrs={"class":"form-control"}))gender=forms.ChoiceField(label="Gender",choices=gender_list,widget=forms.Select(attrs={"class":"form-control"}))session_year_id=forms.ChoiceField(label="Session Year",choices=session_year_list,widget=forms.Select(attrs={"class":"form-control"}))profile_pic=forms.FileField(label="Profile Pic",required=False,widget=forms.FileInput(attrs={"class":"form-control"}))classEditStudentForm(forms.Form):email=forms.EmailField(label="Email",max_length=50,widget=forms.EmailInput(attrs={"class":"form-control"}))first_name=forms.CharField(label="First Name",max_length=50,widget=forms.TextInput(attrs={"class":"form-control"}))last_name=forms.CharField(label="Last Name",max_length=50,widget=forms.TextInput(attrs={"class":"form-control"}))username=forms.CharField(label="Username",max_length=50,widget=forms.TextInput(attrs={"class":"form-control"}))address=forms.CharField(label="Address",max_length=50,widget=forms.TextInput(attrs={"class":"form-control"}))# For Displaying Coursestry:courses=Courses.objects.all()course_list=[]forcourseincourses:single_course=(course.id,course.course_name)course_list.append(single_course)except:course_list=[]# For Displaying Session Yearstry:session_years=SessionYearModel.objects.all()session_year_list=[]forsession_yearinsession_years:single_session_year=(session_year.id,str(session_year.session_start_year)+" to "+str(session_year.session_end_year))session_year_list.append(single_session_year)except:session_year_list=[]gender_list=(('Male','Male'),('Female','Female'))course_id=forms.ChoiceField(label="Course",choices=course_list,widget=forms.Select(attrs={"class":"form-control"}))gender=forms.ChoiceField(label="Gender",choices=gender_list,widget=forms.Select(attrs={"class":"form-control"}))session_year_id=forms.ChoiceField(label="Session Year",choices=session_year_list,widget=forms.Select(attrs={"class":"form-control"}))profile_pic=forms.FileField(label="Profile Pic",required=False,widget=forms.FileInput(attrs={"class":"form-control"}))

Step 15: Now register the models inadmin.py 

Python
fromdjango.contribimportadminfromdjango.contrib.auth.adminimportUserAdminfrom.modelsimportCustomUser,AdminHOD,Staffs,Courses,Subjects,Students,Attendance,AttendanceReport,LeaveReportStudent,LeaveReportStaff,FeedBackStudent,FeedBackStaffs,NotificationStudent,NotificationStaffs# Register your models here.classUserModel(UserAdmin):passadmin.site.register(CustomUser,UserModel)admin.site.register(AdminHOD)admin.site.register(Staffs)admin.site.register(Courses)admin.site.register(Subjects)admin.site.register(Students)admin.site.register(Attendance)admin.site.register(AttendanceReport)admin.site.register(LeaveReportStudent)admin.site.register(LeaveReportStaff)admin.site.register(FeedBackStudent)admin.site.register(FeedBackStaffs)admin.site.register(NotificationStudent)admin.site.register(NotificationStaffs)

Step 16: Now Create a new folder astemplateswhich includes Student_template, Hod_template, Staff_template folders. It contains the different templates used in each interface.
Create another folder asstatic which also includes some files. ( Note - All these folders must be in student_management_project ).

Folder structure initialized

Step 17:Add media, static URLs, and root path. 

import os

MEDIA_URL="/media/"
MEDIA_ROOT=os.path.join(BASE_DIR,"media")

STATIC_URL="/static/"
STATIC_ROOT=os.path.join(BASE_DIR,"static")
Static media configured

Step 18:Now create abase.htmlpage.

HTML
{% load static %}<!DOCTYPE html><html><head><metacharset="utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><title>College Management System | Dashboard</title><!-- Tell the browser to be responsive to screen width --><metaname="viewport"content="width=device-width, initial-scale=1"><metaname="viewport"content="width=device-width, initial-scale=1"><!-- Font Awesome --><linkrel="stylesheet"href="{% static "fontawesome-free/css/all.min.css"%}"><!-- Ionicons --><!-- Bootstrap CSS --><linkhref="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css"rel="stylesheet"integrity="sha384-eOJMYsd53ii+scO/bJGFsiCZc+5NDVN2yr8+0RDqr0Ql0h+rP48ckxlpbzKgwra6"crossorigin="anonymous"><linkrel="stylesheet"href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css"><!-- Tempusdominus Bbootstrap 4 --><linkrel="stylesheet"href="{% static 'tempusdominus-bootstrap-4/css/tempusdominus-bootstrap-4.min.css' %}"><!-- iCheck --><linkrel="stylesheet"href="{% static "icheck-bootstrap/icheck-bootstrap.min.css"%}"><!-- JQVMap --><linkrel="stylesheet"href="{% static "jqvmap/jqvmap.min.css"%}"><!-- Theme style --><linkrel="stylesheet"href="{% static 'dist/css/adminlte.min.css'  %}"><!-- overlayScrollbars --><linkrel="stylesheet"href="{% static "overlayScrollbars/css/OverlayScrollbars.min.css"%}"><!-- Daterange picker --><linkrel="stylesheet"href="{% static "daterangepicker/daterangepicker.css"%}"><!-- summernote --><linkrel="stylesheet"href="{% static "summernote/summernote-bs4.css"%}"><!-- Google Font: Source Sans Pro --><linkhref="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700"rel="stylesheet"></head>{% block content %}{% endblock content %}<!-- jQuery --><!-- Optional JavaScript --><!-- jQuery first, then Popper.js, then Bootstrap JS --><scriptsrc="https://code.jquery.com/jquery-3.4.1.slim.min.js"integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"crossorigin="anonymous"></script><scriptsrc="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"crossorigin="anonymous"></script><scriptsrc="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"crossorigin="anonymous"></script><scriptsrc="{% static "jquery/jquery.min.js"%}"></script><!-- jQuery UI 1.11.4 --><scriptsrc="{% static "jquery-ui/jquery-ui.min.js"%}"></script><!-- Resolve conflict in jQuery UI tooltip with Bootstrap tooltip --><script>$.widget.bridge('uibutton',$.ui.button)</script><!-- Bootstrap 4 --><scriptsrc="{% static "bootstrap/js/bootstrap.bundle.min.js"%}"></script><!-- ChartJS --><scriptsrc="{% static "chart.js/Chart.min.js"%}"></script><!-- Sparkline --><scriptsrc="{% static "sparklines/sparkline.js"%}"></script><!-- JQVMap --><scriptsrc="{% static "jqvmap/jquery.vmap.min.js"%}"></script><scriptsrc="{% static "jqvmap/maps/jquery.vmap.usa.js"%}"></script><!-- jQuery Knob Chart --><scriptsrc="{% static "jquery-knob/jquery.knob.min.js"%}"></script><!-- daterangepicker --><scriptsrc="{% static "moment/moment.min.js"%}"></script><scriptsrc="{% static "daterangepicker/daterangepicker.js"%}"></script><!-- Tempusdominus Bootstrap 4 --><scriptsrc="{% static "tempusdominus-bootstrap-4/js/tempusdominus-bootstrap-4.min.js"%}"></script><!-- Summernote --><scriptsrc="{% static "summernote/summernote-bs4.min.js"%}"></script><!-- overlayScrollbars --><scriptsrc="{% static "overlayScrollbars/js/jquery.overlayScrollbars.min.js"%}"></script><!-- AdminLTE App --><scriptsrc="{% static 'dist/js/adminlte.js'  %}"></script><!-- AdminLTE dashboard demo (This is only for demo purposes) --><scriptsrc="{% static 'dist/js/pages/dashboard.js'  %}"></script><!-- AdminLTE for demo purposes --><scriptsrc="{% static 'dist/js/demo.js'  %}"></script></body></html>

Step 19: Now create ahome.html page of our project in the student_management_app\templates folder.

HTML
{% extends 'base.html' %}{% load static %}{% block title %}Home{% endblock title %}{% block content %}<html><head><style>img{background-size:cover;}body{background-color:coral;}</style><linkrel="stylesheet"href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css"integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ"crossorigin="anonymous"><scriptsrc="https://code.jquery.com/jquery-3.1.1.slim.min.js"integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n"crossorigin="anonymous"></script><scriptsrc="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn"crossorigin="anonymous"></script><linkrel="stylesheet"href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"crossorigin="anonymous"><scriptsrc="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"crossorigin="anonymous"></script><scriptsrc="https://code.jquery.com/jquery-3.2.1.slim.min.js"integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"crossorigin="anonymous"></script><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"crossorigin="anonymous"></script></head><navclass="navbar navbar-expand-lg navbar-dark bg-dark"><aclass="navbar-brand"href=""><h3>WELCOME TO CMS</h3></a><buttonclass="navbar-toggler"type="button"data-toggle="collapse"data-target="#navbarSupportedContent"aria-controls="navbarSupportedContent"aria-expanded="false"aria-label="Toggle navigation"><spanclass="navbar-toggler-icon"></span></button><divclass="collapse navbar-collapse"id="navbarSupportedContent"><ulclass="navbar-nav mr-auto"></ul><formclass="form-inline my-2 my-lg-0"><!--<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">--><ahref="/logi"class="btn btn-outline-success my-1 mx-2">Login</a><!--<input class="form-control mr-sm-2" type="Register" placeholder="Register" aria-label="Register">--><ahref="/registration"class="btn btn-outline-success my-1 mx-2">Register</a><ahref="/contact"class="btn btn-outline-danger my-1 mx-2">Contact Us</a></form></div></nav><divid="carouselExampleIndicators"class="carousel slide"data-ride="carousel"><olclass="carousel-indicators"></ol><divclass="carousel-inner"><divclass="carousel-item active">      {% comment %}<imgclass="d-block w-100"src="https://images.unsplash.com/20/cambridge.JPG?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1030&q=80"alt="First slide"> {% endcomment %}<imgsrc="{% static 'dist/img/111.png' %}"class="d-block w-100 h-100 size-cover"alt="..."></div><divclass="carousel-item">      {% comment %}<imgclass="d-block w-100"src="https://images.unsplash.com/photo-1541339907198-e08756dedf3f?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1050&q=80"alt="Second slide"> {% endcomment %}<imgsrc="{% static 'dist/img/re.png' %}"class="d-block w-100 h-100 size-cover "alt="..."></div><divclass="carousel-item">      {% comment %}<imgclass="d-block w-100"src="https://images.unsplash.com/photo-1541339907198-e08756dedf3f?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1050&q=80"alt="Second slide"> {% endcomment %}<imgsrc="{% static 'dist/img/e.png' %}"class="d-block w-100 h-100 size-cover "alt="..."></div><divclass="carousel-item">      {% comment %}<imgclass="d-block w-100"src="https://images.unsplash.com/photo-1541339907198-e08756dedf3f?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1050&q=80"alt="Second slide"> {% endcomment %}<imgsrc="{% static 'dist/img/22.png' %}"class="d-block w-100 h-100 size-cover "alt="..."></div><divclass="carousel-item">      {% comment %}<imgclass="d-block w-100"src="https://images.unsplash.com/photo-1503676260728-1c00da094a0b?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1009&q=80"alt="Third slide"> {% endcomment %}<imgsrc="{% static 'dist/img/33.png' %}"class="d-block w-100 h-100 size-cover"alt="..."></div></div><aclass="carousel-control-prev"href="#carouselExampleIndicators"role="button"data-slide="prev"><spanclass="carousel-control-prev-icon"aria-hidden="true"></span><spanclass="sr-only">Previous</span></a><aclass="carousel-control-next"href="#carouselExampleIndicators"role="button"data-slide="next"><spanclass="carousel-control-next-icon"aria-hidden="true"></span><spanclass="sr-only">Next</span></a></div></html>{% endblock content %}

Output:

CMS_output
Snapshot of the Output

Step 20:Now create aregistration.html page where students, staff, HOD can register themselves.

HTML
{% extends 'base.html' %}{% load static %}{% block content %}<head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>Untitled</title><linkrel="stylesheet"href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css"><linkrel="stylesheet"href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css"><linkrel="stylesheet"href="assets/css/style.css"><style>body{height:1000px;background:#475d62;background-color:cover;font-family:sans-seriff;}.login-dark{max-width:320px;width:90%;background-color:#1e2833;padding:40px;border-radius:4px;transform:translate(-50%,-50%);position:absolute;top:50%;left:50%;color:#fff;box-shadow:3px3px4pxrgba(0,0,0,0.2);}.login-darkform{max-width:320px;width:90%;background-color:#1e2833;padding:40px;border-radius:4px;transform:translate(-50%,-50%);position:absolute;top:50%;left:50%;color:#fff;box-shadow:3px3px4pxrgba(0,0,0,0.2);}.login-dark.illustration{text-align:center;padding:15px020px;font-size:100px;color:#2980ef;}.login-darkform.form-control{background:none;border:none;border-bottom:1pxsolid#434a52;border-radius:0;box-shadow:none;outline:none;color:inherit;}.login-darkform.btn-primary{background:#214a80;border:none;border-radius:4px;padding:11px;box-shadow:none;margin-top:26px;text-shadow:none;outline:none;}.login-darkform.btn-primary:hover,.login-darkform.btn-primary:active{background:#214a80;outline:none;}.login-darkform.forgot{display:block;text-align:center;font-size:12px;color:#6f7a85;opacity:0.9;text-decoration:none;}.login-darkform.forgot:hover,.login-darkform.forgot:active{opacity:1;text-decoration:none;}.login-darkform.btn-primary:active{transform:translateY(1px);}</style></head><navclass="navbar navbar-expand-lg navbar-dark bg-dark"><aclass="navbar-brand"href="/ "><h4>BACK TO HOME</h4></a><buttonclass="navbar-toggler"type="button"data-toggle="collapse"data-target="#navbarSupportedContent"aria-controls="navbarSupportedContent"aria-expanded="false"aria-label="Toggle navigation"><spanclass="navbar-toggler-icon"></span></button><divclass="collapse navbar-collapse"id="navbarSupportedContent"><ulclass="navbar-nav mr-auto"></ul><formclass="form-inline my-2 my-lg-0"><!-- <input class="form-control mr-sm-2" type="login" placeholder="login" aria-label="login">--><!--<input class="form-control mr-sm-2" type="Register" placeholder="Register" aria-label="Register">--><ahref="/logi"class="btn btn-outline-success my-1 mx-2">Login Here</a><ahref="/contact"class="btn btn-outline-danger my-1 mx-2">Contact Us</a><!--<input class="form-control mr-sm-2" type="register" placeholder="register" aria-label="register">--></form></div></nav><divclass="login-dark form-inline py-0 mx-4 my-4 pl-4 pr-4"><formaction="{% url 'doRegistration' %}"method="get">{% csrf_token %}<h1class="text-center">Signup</h1><divclass="illustration"><iclass="icon ion-ios-locked-outline"></i></div><divclass="form-group"><inputclass="form-control mb-2"type="text"name="first_name"placeholder="First Name"></div><divclass="form-group"><inputclass="form-control mb-2"type="text"name="last_name"placeholder="Last Name"></div><divclass="form-group"><inputclass="form-control mb-2"type="email"name="email"placeholder="Email"></div><divclass="form-group"><inputclass="form-control mb-2"type="password"name="password"placeholder="Password"></div><divclass="form-group"><inputclass="form-control mb-2"type="password"name="confirmPassword"placeholder="Confirm Password"></div><divclass="form-group"><buttonclass="btn btn-primary btn-block mt-2 ml-2"type="submit">Register</button></div>{% comment %} Display Messages {% endcomment %}{% if messages %}<divclass="col-12">   {% for message in messages %}   {% if message.tags == "error" %}<divclass="alert alert-danger alert-dismissible fade show"role="alert"style="margin-top: 10px;"><b>{{ message }}</b><buttontype="button"class="btn-close"data-bs-dismiss="alert"aria-label="Close"></button></div>   {% endif %}   {% endfor %}</div>{% endif %}<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.bundle.min.js"></script>{% endblock content %}

Output:

REGISTRATION PAGE

Step 21: Now create alogin_page.html where students, staff, HOD can log in themselves.

HTML
{% extends 'base.html' %}{% load static %}{% block content %}<head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1; maximum-scale=1.0; user-scalable=0;"><title>Untitled</title><linkrel="stylesheet"href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css"><linkrel="stylesheet"href="https://cdnjs.cloudflare.com/ajax/libs/ionicons/2.0.1/css/ionicons.min.css"><linkrel="stylesheet"href="assets/css/style.css"><style>body{height:1000px;background:#475d62;background-color:cover;font-family:sans-seriff;}.login-dark{max-width:320px;width:90%;background-color:#1e2833;padding:40px;border-radius:4px;transform:translate(-50%,-50%);position:absolute;top:50%;left:50%;color:#fff;box-shadow:3px3px4pxrgba(0,0,0,0.2);}.login-darkform{max-width:320px;width:90%;background-color:#1e2833;padding:40px;border-radius:4px;transform:translate(-50%,-50%);position:absolute;top:50%;left:50%;color:#fff;box-shadow:3px3px4pxrgba(0,0,0,0.2);}.login-dark.illustration{text-align:center;padding:15px020px;font-size:100px;color:#2980ef;}.login-darkform.form-control{background:none;border:none;border-bottom:1pxsolid#434a52;border-radius:0;box-shadow:none;outline:none;color:inherit;}.login-darkform.btn-primary{background:#214a80;border:none;border-radius:4px;padding:11px;box-shadow:none;margin-top:26px;text-shadow:none;outline:none;}.login-darkform.btn-primary:hover,.login-darkform.btn-primary:active{background:#214a80;outline:none;}.login-darkform.forgot{display:block;text-align:center;font-size:12px;color:#6f7a85;opacity:0.9;text-decoration:none;}.login-darkform.forgot:hover,.login-darkform.forgot:active{opacity:1;text-decoration:none;}.login-darkform.btn-primary:active{transform:translateY(1px);}</style></head><navclass="navbar navbar-expand-lg navbar-dark bg-dark"><aclass="navbar-brand"href="/ ">BACK TO HOME</a><buttonclass="navbar-toggler"type="button"data-toggle="collapse"data-target="#navbarSupportedContent"aria-controls="navbarSupportedContent"aria-expanded="false"aria-label="Toggle navigation"><spanclass="navbar-toggler-icon"></span></button><divclass="collapse navbar-collapse"id="navbarSupportedContent"><ulclass="navbar-nav mr-auto"></ul><formclass="form-inline my-2 my-lg-0"><ahref="{% url 'contact' %}"class="btn btn-outline-danger my-1 mx-2">Contact Us</a></form><!--        <form class="form-inline my-2 my-lg-0">--></div></nav><divclass="login-dark form-inline py-0 mx-4 my-4 pl-4 pr-4"><formaction="{% url 'doLogin' %}"method="get">      {% csrf_token %}<h1class="text-center">Login</h1><divclass="illustration"><iclass="icon ion-ios-locked-outline"></i></div><divclass="form-group"><inputclass="form-control mb-2"type="email"name="email"placeholder="Email"></div><divclass="form-group"><inputclass="form-control mb-2"type="password"name="password"placeholder="Password"></div><divclass="form-group"><buttonclass="btn btn-primary btn-block mb-2 ml-2"type="submit">Log In</button></div><ahref="/registration"class="forgot">Not Registered Yet? Register Now</a></form></div>{% comment %} Display Messages {% endcomment %}{% if messages %}<divclass="col-12">   {% for message in messages %}   {% if message.tags == "error" %}   {% comment %}<divclass="alert alert-danger alert-dismissible fade show"role="alert"style="margin-top: 10px;"><b>{{ message }}</b><buttontype="button"class="btn-close"data-bs-dismiss="alert"aria-label="Close"></button></div>   {% endcomment %}<divclass="alert alert-danger alert-dismissible fade show"role="alert"><strong>Invalid Login Credentials!</strong><buttontype="button"class="close"data-dismiss="alert"aria-label="Close"><spanaria-hidden="true">&times;</span></button></div>   {% endif %}   {% endfor %}</div>{% endif %}<scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/js/bootstrap.bundle.min.js"></script>{% endblock content %}

Output:

LOGIN page

Step 22:Createcontact.html 

HTML
{% extends 'base.html' %}{% load static %}{% block content %}<navclass="navbar navbar-expand-lg navbar-dark bg-dark"><ahref="/ "class="btn btn-outline-primary my-1 mx-2">Go Back To Home</a><buttonclass="navbar-toggler"type="button"data-toggle="collapse"data-target="#navbarSupportedContent"aria-controls="navbarSupportedContent"aria-expanded="false"aria-label="Toggle navigation"><spanclass="navbar-toggler-icon"></span></button><divclass="collapse navbar-collapse"id="navbarSupportedContent"><ulclass="navbar-nav mr-auto"></ul><formclass="form-inline my-2 my-lg-0"><!-- <input class="form-control mr-sm-2" type="login" placeholder="login" aria-label="login">--><!--<input class="form-control mr-sm-2" type="Register" placeholder="Register" aria-label="Register">--><!--<input class="form-control mr-sm-2" type="register" placeholder="register" aria-label="register">--></form><formclass="form-inline my-2 my-lg-0"></div></nav><divclass="container-fluid px-0"><imgsrc="{% static 'dist/img/contact.jpg' %}"class="d-block w-100 mx-0"alt="..."height=450pxwidth=10px></div><divclass="container"><h1class="text-center my-3 display-2"><b>Contact Us</b></h1><formaction="/contact"method="post">{% csrf_token %}<divclass="mb-3 py-2"><labelfor="exampleFormControlInput1"class="form-label"><b>Name</b></label><inputtype="name"class="form-control"id="exampleFormControlInput1"name="name"placeholder="Enter your Name"></div><divclass="mb-3 py-2"><labelfor="exampleFormControlInput1"class="form-label"><b>Email id</b></label><inputtype="email"class="form-control"id="exampleFormControlInpu2"name="email"placeholder="Enter your Email"></div><divclass="mb-3 py-2"><labelfor="exampleFormControlInput1"class="form-label"><b>Phone number</b></label><inputtype="number"class="form-control"id="exampleFormControlInput3"name="phone"placeholder="Enter your Phone number"></div><divclass="mb-3 py-2"><labelfor="exampleFormControlTextarea1"class="form-label"><b>How can we help you ??</b></label><textareaclass="form-control"id="exampleFormControlTextarea1"rows="7"name="desc"></textarea></div><buttontype="submit"class="btn btn-primary btn-lg ">Submit</button></form></div>{% endblock content%}

Step 23:Run these commands to migrate your models into the database. When you successfully do all the steps you will get this type of output in CMD.

python manage.py makemigrations

python manage.py migrate

Project Overview:


Similar Reads

We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood ourCookie Policy &Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences

[8]ページ先頭

©2009-2025 Movatter.jp