A comprehensive Django-based Student Management System with modern features and robust architecture. π
- π User Authentication and Authorization
- π¨βπ Student Information Management
- π Course Management
- π Attendance Tracking
- π Grade Management
- π¨βπ©βπ§βπ¦ Parent Portal
- π± Admin Dashboard
- π₯ Firebase Integration
- π± SMS Notifications
- π§ Email Notifications
- πΎ Caching System
- π Security Features
- π¨ Responsive UI with Jazzmin Admin Theme
- Python 3.8 or higher
- Redis Server
- PostgreSQL (recommended) or SQLite
- Firebase Account (for Firebase features)
- SMS Gateway Account (for SMS features)
-
Create a Firebase Project:
- Go to Firebase Console
- Click "Add project" and follow the setup wizard
- Give your project a name and enable Google Analytics (optional)
-
Get Firebase Configuration:
- In Firebase Console, click on the gear icon (βοΈ) next to "Project Overview"
- Select "Project settings"
- Scroll down to "Your apps" section
- Click the web icon (</>)
- Register your app with a nickname
- Copy the configuration object that looks like this:
const firebaseConfig = { apiKey: "xxx", authDomain: "xxx", projectId: "xxx", storageBucket: "xxx", messagingSenderId: "xxx", appId: "xxx", measurementId: "xxx" };
-
Set up Firebase configuration files:
# Copy and rename the example files cp static/firebase-messaging-sw.example.js static/firebase-messaging-sw.js cp static/js/firebase-config.example.js static/js/firebase-config.js # Update the configuration in both files with your Firebase credentials # - In firebase-messaging-sw.js: Update the firebaseConfig object # - In firebase-config.js: Update both firebaseConfig and vapidKey
-
Get Service Account Key:
- In Project Settings, go to "Service accounts" tab
- Click "Generate new private key"
- Save the downloaded JSON file as
firebase-key.json
in your project root - Add this file to
.gitignore
to keep it secure
-
Update Environment Variables:
- Copy the values from your Firebase configuration to your
.env
file:
FIREBASE_API_KEY=your-api-key FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com FIREBASE_PROJECT_ID=your-project-id FIREBASE_STORAGE_BUCKET=your-project.appspot.com FIREBASE_MESSAGING_SENDER_ID=your-sender-id FIREBASE_APP_ID=your-app-id FIREBASE_MEASUREMENT_ID=your-measurement-id
- Copy the values from your Firebase configuration to your
-
Clone the repository:
git clone https://github.com/S4NKALP/Student-Management-System-In-Django.git cd Student-Management-System-In-Django
-
Choose your installation method:
Using UV (Recommended, faster):
# Install UV if not already installed curl -LsSf https://astral.sh/uv/install.sh | sh # UV will automatically: # - Create and manage virtual environment # - Install all dependencies # - Handle package versions # - Optimize installation process
Using pip (Traditional method):
# Create and activate virtual environment python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate # Install dependencies pip install -r requirements.txt
-
Set up environment variables: Create a
.env
file in the project root with the following variables:DEBUG=True SECRET_KEY=your-secret-key ALLOWED_HOSTS=localhost,127.0.0.1 DATABASE_URL=your-database-url # Email Configuration EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend DEFAULT_FROM_EMAIL=your-email@example.com EMAIL_HOST=smtp.gmail.com EMAIL_PORT=587 EMAIL_HOST_USER=your-email@gmail.com EMAIL_HOST_PASSWORD=your-app-password EMAIL_USE_TLS=True # Firebase Configuration FIREBASE_API_KEY=your-api-key FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com FIREBASE_PROJECT_ID=your-project-id FIREBASE_STORAGE_BUCKET=your-project.appspot.com FIREBASE_MESSAGING_SENDER_ID=your-sender-id FIREBASE_APP_ID=your-app-id FIREBASE_MEASUREMENT_ID=your-measurement-id # SMS Configuration SMS_API_KEY=your-sms-api-key SMS_SENDER_ID=your-sender-id
-
Run migrations:
# Create database migrations python manage.py makemigrations # Apply migrations python manage.py migrate
-
Create a superuser:
python manage.py createsuperuser
-
Collect static files:
python manage.py collectstatic
python manage.py runserver
Visit http://localhost:8000 to access the application.
For production deployment, it's recommended to:
- Set
DEBUG=False
in your environment variables - Use a production-grade database (PostgreSQL recommended)
- Set up proper SSL/TLS certificates
- Configure a production-grade web server (Nginx/Apache)
- Use Gunicorn as the WSGI server:
gunicorn student_management_system.wsgi:application
student_management_system/
βββ app/ # Main application directory
βββ static/ # Static files (CSS, JS, images)
βββ templates/ # HTML templates
βββ student_management_system/ # Project settings
βββ manage.py # Django management script
βββ requirements.txt # Project dependencies
βββ README.md # This file
- CSRF Protection
- XSS Protection
- SQL Injection Protection
- Secure Password Hashing
- Session Security
- HTTPS Enforcement
- Security Headers
- Rate Limiting
The system provides various AJAX endpoints for data exchange between the frontend and backend:
POST /login/
- User loginPOST /logout/
- User logoutPOST /password-reset/
- Password reset optionsPOST /password-reset/phone/
- Phone-based password resetPOST /password-reset/email/
- Email-based password resetPOST /password-reset/set/
- Set new password
GET /app/dashboard/
- Main dashboardGET /app/student-dashboard/
- Student dashboardGET /app/teacher-dashboard/
- Teacher dashboardGET /app/parent-dashboard/
- Parent dashboardGET /app/admission-officer-dashboard/
- Admission officer dashboardGET /app/hodDashboard/
- HOD dashboard
GET /app/get-students/
- Get all studentsGET /app/get-student/<int:student_id>/
- Get student detailsPOST /app/add-student/
- Add new studentPUT /app/edit-student/<int:student_id>/
- Edit studentDELETE /app/delete-student/<int:student_id>/
- Delete student
GET /app/get-subjects/
- Get all subjectsGET /app/get-courses/
- Get all coursesPOST /app/add-subject/
- Add new subjectPUT /app/edit-subject/<int:subject_id>/
- Edit subjectDELETE /app/delete-subject/<int:subject_id>/
- Delete subjectGET /app/get-course-duration/
- Get course durationGET /app/get-subject-schedule/
- Get subject schedule
GET /app/get-teachers/
- Get all teachersPOST /app/add-staff/
- Add new staffGET /app/staff/<int:staff_id>/
- Get staff detailsPUT /app/edit-staff/<int:staff_id>/
- Edit staffDELETE /app/delete-staff/<int:staff_id>/
- Delete staff
GET /app/api/meetings/<int:meeting_id>/
- Get meeting detailsPOST /app/api/meetings/add/
- Create new meetingPUT /app/api/meetings/<int:meeting_id>/edit/
- Update meetingPOST /app/api/meetings/<int:meeting_id>/cancel/
- Cancel meetingGET /app/api/meetings/<int:meeting_id>/notes/
- Get meeting notesGET /app/api/meetings/<int:meeting_id>/agenda/
- Get meeting agenda
GET /app/api/hod/routines/<int:routine_id>/
- Get routine detailsPOST /app/api/hod/routines/
- Create new routinePUT /app/api/hod/routines/<int:routine_id>/edit/
- Update routineDELETE /app/api/hod/routines/<int:routine_id>/delete/
- Delete routine
POST /app/request-leave/
- Request student leavePOST /app/request-staff-leave/
- Request staff leavePOST /app/approve-student-leave/<int:leave_id>/
- Approve student leavePOST /app/approve-staff-leave/<int:leave_id>/
- Approve staff leavePOST /app/reject-student-leave/<int:leave_id>/
- Reject student leavePOST /app/reject-staff-leave/<int:leave_id>/
- Reject staff leaveGET /app/get-student-leaves/
- Get student leavesGET /app/get-staff-leaves/
- Get staff leaves
POST /app/submit-feedback/
- Submit student feedbackPOST /app/submit-institute-feedback/
- Submit institute feedbackPOST /app/submit-staff-institute-feedback/
- Submit staff institute feedbackPOST /app/parent/feedback/submit/
- Submit parent feedbackPOST /app/parent/feedback/institute/submit/
- Submit parent institute feedback
POST /app/update-profile/
- Update user profilePOST /app/change-password/
- Change passwordPOST /app/teacher-update-profile-picture/
- Update teacher profile picturePOST /app/teacher-change-password/
- Change teacher password
POST /app/saveFCMToken/
- Save Firebase Cloud Messaging tokenGET /firebase-messaging-sw.js
- Firebase service worker
POST /app/add-notice/
- Add new noticeDELETE /app/delete-notice/<int:notice_id>/
- Delete noticePOST /app/hod/add-notice/
- Add HOD noticeGET /app/notice/<int:notice_id>/
- View notice
POST /app/save-attendance/
- Save attendanceGET /app/get-attendance-form/
- Get attendance form
GET /app/api/get-student-progress/
- Get student progressGET /app/api/get-progress/<int:progress_id>/
- Get specific progressPUT /app/api/edit-progress/<int:progress_id>/
- Edit progress
This project is licensed under the GNU General Public License v3.0 (GPL-3.0) - see the LICENSE file for details.
For support, please open an issue in the GitHub repository or contact the maintainers.