📚 Student Management System (SMS)
A comprehensive Student Management System built with Django, featuring multi-role access, real-time notifications, and secure authentication.
Note: This project was developed as part of an academic minor project. Ongoing maintenance or additional feature development may be limited.
📑 Table of Contents
- 💻 Tech Stack
- 👥 Role System
- ✨ Key Features
- 📸 Screenshots
- 🎯 Project Architecture
- 🌍 Feasibility
- 🚀 Getting Started
- 🔧 Configuration
- 📦 Dependencies
- 🔐 Security Features
- 📊 Database Schema
- 🔌 API Endpoints
- 📱 Frontend Features
- 🔍 Testing
- 📈 Performance
- 🤝 Contributing
- 📄 License
- 🙏 Credits
💻 Tech Stack
🔥 Core Technologies
| Technology | Version | Purpose | Documentation |
|---|---|---|---|
| Python | 3.8+ | Backend Development | Python Docs |
| Django | 5.2 | Web Framework | Django Docs |
| Django REST Framework | 3.16.0 | API Development | DRF Docs |
| Firebase Admin | 6.7.0 | Real-time Features | Firebase Docs |
| Google Cloud Storage | 3.1.0 | File Storage | GCS Docs |
⚡ Frontend Technologies
| Technology | Version | Purpose | Documentation |
|---|---|---|---|
| Bootstrap | 5.3.0 | UI Framework | Bootstrap Docs |
| jQuery | Latest | DOM Manipulation | jQuery Docs |
| Firebase Web SDK | 9.22.0 | Real-time Updates | Firebase Web Docs |
| Font Awesome | 6.0.0 | Icons | Font Awesome Docs |
🛠️ Development Tools
| Tool | Version | Purpose | Documentation |
|---|---|---|---|
| Git | Latest | Version Control | Git Docs |
| WhiteNoise | 6.9.0 | Static File Serving | WhiteNoise Docs |
| PyOTP | 2.9.0 | OTP Generation | PyOTP Docs |
| Django Jazzmin | 3.0.1 | Admin Interface | Jazzmin Docs |
| Django Mathfilters | 1.0.0 | Math Operations | Mathfilters Docs |
| Django Model Utils | 5.0.0 | Model Utilities | Model Utils Docs |
🖥️ Development Environment
| Component | Details |
|---|---|
| Operating System | Arch Linux |
| Window Manager | Hyprland |
| Status Bar | Modus |
| Editor | Neovim |
| Terminal | Kitty |
| Shell | Zsh |
👥 Role System
🎓 User Roles and Permissions
| Role | Description | Key Features |
|---|---|---|
| Super Admin | System administrator with full access | - Full system control - User management - System configuration |
| HOD (Head of Department) | Department head with elevated privileges | - Course management - Staff supervision - Department analytics |
| Admission Officer | Handles student admissions | - Student registration - Document verification - Admission tracking |
| Teacher | Academic staff member | - Class management - Attendance tracking - Grade management |
| Student | Primary system user | - Course access - Attendance tracking - Grade viewing |
| Parent | Student guardian | - Student progress tracking - Communication with teachers - Fee management |
🔐 Authentication System
-
Multi-factor Authentication
- Phone-based OTP verification
- TOTP (Time-based One-Time Password)
- Password reset tokens
- Session management
-
Role-based Access Control
- Granular permissions per role
- Custom permission groups
- Access level restrictions
- Activity logging
✨ Key Features
👥 User Management
- Multi-role System: Comprehensive roles including Admin, HOD, Teacher, Student, Parent, and Admission Officer
- Secure Authentication: OTP and TOTP-based verification for password resets
- Role-based Access Control: Different dashboards and permissions for each user role
- User Profiles: Complete profile management with personal details and image uploads
📚 Academic Management
- Course Management: Create and organize course offerings with duration tracking
- Subject Management: Organize subjects with syllabus uploads and additional materials
- Class Scheduling: Create and manage class routines with teacher assignments
- Batch Management: Group students into batches for better organization
📊 Attendance System
- Class Attendance: Record and track student attendance for each class
- Teacher Attendance: Track teacher presence for scheduled classes
- Attendance Reports: View attendance statistics and historical records
- Real-time Status: Monitor attendance status on dashboards
📝 Leave Management
- Leave Requests: Students and staff can request leave with date ranges
- Multi-level Approval: HOD or Admin approval workflow for leave requests
- Status Tracking: Monitor pending, approved, and rejected leave requests
- Leave History: Complete historical record of all leave requests
👨👩👧👦 Parent-Teacher Interaction
- Meeting Scheduling: Schedule online or in-person parent-teacher meetings
- Student Progress Tracking: Parents can monitor student performance
- Meeting Management: Tools for scheduling, rescheduling, and cancelling meetings
📈 Course Progress Tracking
- Progress Monitoring: Track student course completion percentages
- Completion Metrics: View detailed completion metrics by course and student
- Performance Analysis: Analyze student performance across courses
🔄 Feedback System
- Multi-level Feedback: Students, parents, and staff can submit feedback
- Rating System: Detailed rating mechanism with comments
- Anonymous Feedback: Option for anonymous feedback submissions
- Institute Feedback: Feedback about the educational institution
🔐 Security Features
- OTP Verification: Two-factor authentication for password resets
- Session Management: Secure session handling for all users
- CSRF Protection: Cross-site request forgery prevention
- Password Security: Strong password validation and secure storage
📱 Mobile-Friendly Interface
- Responsive Design: Works seamlessly on mobile devices and desktops
- Touch-friendly Interface: Optimized for touch devices
- Responsive Navigation: Mobile-optimized navigation system
- Adaptive Layouts: Content adjusts to different screen sizes
📸 Screenshots
🏠 Dashboard Views
Admin Dashboard with overview statistics and quick actions
Student Dashboard showing attendance, course progress, and notices
Teacher Dashboard with class schedule and student performance metrics
Note: The above screenshots showcase key interfaces of the Student Management System. Replace these placeholder images with actual screenshots by adding your images to a
screenshotsdirectory in the project root.
🎯 Project Architecture
SMS/
├── app/ # Main application
│ ├── admin/ # Admin interface
│ ├── api/ # REST API endpoints
│ ├── models/ # Database models
│ ├── views/ # View logic
│ └── templates/ # HTML templates
├── static/ # Static files
│ ├── css/ # Stylesheets
│ ├── js/ # JavaScript files
│ └── img/ # Images
├── media/ # User uploaded files
├── templates/ # Base templates
└── student_management_system/ # Project settings
🚀 Getting Started
📋 Prerequisites
Before you begin, ensure you have the following installed:
- Python (3.8 or higher)
- Git
- UV (Python package installer and resolver)
- Firebase Account (for notifications)
- Google Cloud Account (for storage)
🛠️ Installation Steps
1️⃣ Clone the Repository
# Clone the repository
git clone https://github.com/S4NKALP/Student-Management-System-In-Django.git
# Navigate to the project directory
cd Student-Management-System-In-Django
2️⃣ Choose Your Installation Method
Method A: Using UV (Recommended)
# Install UV (if not already installed)
pip install uv
# Or install using curl (Linux/Mac)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Or install using PowerShell (Windows)
irm https://astral.sh/uv/install.ps1 | iex
# Run migrations
uv run manage.py makemigrations
uv run manage.py migrate
# Create admin user
uv run manage.py createsuperuser
# Run the server the package will install automatically
uv run manage.py runserver
Method B: Using Traditional venv
# Create a virtual environment
python -m venv venv
# Activate the virtual environment
# For Linux/Mac:
source venv/bin/activate
# For Windows:
.\venv\Scripts\activate
# Install dependencies from requirements.txt
pip install -r requirements.txt
# Run migrations
python manage.py makemigrations
python manage.py migrate
# Create admin user
python manage.py createsuperuser
# Lunch the server
python manage.py runserver
3️⃣ Configure Environment Variables
# Copy the example environment file
cp .env.example .env
# Edit the .env file with your settings
# Required settings:
# - SECRET_KEY
# - DEBUG
# - ALLOWED_HOSTS
# - Firebase credentials
# - Google Cloud credentials
5️⃣ Set Up Firebase
- Go to Firebase Console
- Create a new project or select an existing one
- Enable the following services:
- Authentication
- Cloud Firestore
- Cloud Storage
- Cloud Messaging
2️⃣ Service Account Key (firebase-key.json)
- In Firebase Console, go to Project Settings > Service Accounts
- Click "Generate New Private Key"
- Save the downloaded JSON file as
firebase-key.jsonin your project root - Add the file to
.gitignoreto prevent committing sensitive data:firebase-key.json
3️⃣ Firebase Configuration Files
-
Copy the example files and rename them:
# Copy Firebase config example cp static/js/firebase-config.example.js static/js/firebase-config.js # Copy Firebase messaging service worker example cp static/firebase-messaging-sw.example.js static/firebase-messaging-sw.js -
Update the configuration in both files with your Firebase project details:
- Replace
YOUR_API_KEYwith your Firebase API key - Replace
YOUR_PROJECT_IDwith your Firebase project ID - Replace other placeholder values with your actual Firebase configuration
- Replace
4️⃣ Firebase Cloud Messaging (FCM) Setup
- In Firebase Console, go to Project Settings > Cloud Messaging
- Generate a new Server Key
- Add the key to your
.envfile:FIREBASE_SERVER_KEY=your_server_key_here
5️⃣ Testing Firebase Setup
- Run the development server
- Open the browser console
- Check for any Firebase-related errors
- Test push notifications using the Firebase Console
📱 Accessing the Application
Once everything is set up, you can access:
- Admin Panel: http://localhost:8000/admin
- Main Application: http://localhost:8000
🚨 Troubleshooting Guide
🔧 Common Issues
- Firebase Setup: Ensure proper configuration in
firebase-config.jsandfirebase-key.json - Static Files: Run
python manage.py collectstaticif static files are not loading - Database Issues: Check database settings in
.envfile - OTP Not Working: Verify email settings in
.envfile
🔧 Configuration
Environment Variables
Create a .env file in the project root:
# Django Settings
DEBUG=True
SECRET_KEY=your-secret-key
ALLOWED_HOSTS=localhost,127.0.0.1
# Database
DB_NAME=sms_db
DB_USER=your_db_user
DB_PASSWORD=your_db_password
DB_HOST=localhost
# Firebase Settings
FIREBASE_CREDENTIALS=path/to/firebase-key.json
FIREBASE_DATABASE_URL=your-firebase-database-url
# Google Cloud Settings
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_CLOUD_CREDENTIALS=path/to/google-cloud-key.json
# Email Settings
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USE_TLS=True
EMAIL_HOST_USER=your-email@gmail.com
EMAIL_HOST_PASSWORD=your-email-password
# SMS Configuration
SMS_API_KEY=your_sms_api_key_here
SMS_SENDER_ID=SMSSYS
# OTP Settings
OTP_EXPIRY=300 # OTP expiry time in seconds
📦 Dependencies
Backend
- Django 5.2
- Django REST Framework 3.16.0
- Firebase Admin 6.7.0
- Google Cloud Storage 3.1.0
- PyOTP 2.9.0
- WhiteNoise 6.9.0
- Django Jazzmin 3.0.1
- Django Mathfilters 1.0.0
- Django Model Utils 5.0.0
Frontend
- Bootstrap 5.3.0
- jQuery Latest
- Firebase Web SDK 9.22.0
- Font Awesome 6.0.0
🔐 Security Features
Authentication
- OTP and TOTP-based authentication
- Session management
- Password hashing
- Password reset tokens
Data Protection
- CSRF protection
- XSS prevention
- SQL injection prevention
- Input validation
- File upload security
📊 Database Schema
Core Models
Institute
name,phone,email,address,pan_no,reg_no,logo,description
Course
name,code,duration,duration_type,description,is_activebatches(ManyToManyField to Batch)course_tracking_records(related_name for CourseTracking)routine_records(related_name for Routine)
Subject
name,code,course(ForeignKey to Course),period_or_year,syllabus_pdf,filesattendance_records(related_name for Attendance)
Student
name,status,gender,birth_date,email,phone,addressesmarital_status,parent_name,parent_phone,citizenship_nobatches(ManyToManyField to Batch)image,course(ForeignKey to Course),current_period,joining_date,fcm_tokenmeetings(related_name for TeacherParentMeeting)leave_requests(related_name for StudentLeave)
Staff
name,phone,designation,gender,birth_date,email,addressesmarital_status,parent_name,parent_phone,citizenship_no,passportimage,joining_date,fcm_tokencourses_taught(related_name for Course)meetings(related_name for TeacherParentMeeting)
Parent
name,phone,email,address,students(ManyToManyField to Student)image,fcm_token
Routine
course(ForeignKey to Course),subject(ForeignKey to Subject)teacher(ForeignKey to Staff),start_time,end_timeperiod_or_year,is_activeattendance_records(related_name for Attendance)
Attendance
date,routine(ForeignKey to Routine),teacher(ForeignKey to Staff)teacher_attend,class_status
Leave Management
StaffLeave:staff(ForeignKey to Staff),start_date,end_date,message,statusStudentLeave:student(ForeignKey to Student),start_date,end_date,message,status
CourseTracking
student(ForeignKey to Student),course(ForeignKey to Course)enrollment_date,start_date,expected_end_date,actual_end_dateprogress_status,completion_percentage,current_periodperiod_start_date,period_end_date,notes
TeacherParentMeeting
meeting_date,meeting_time,duration,status,agenda,notescancellation_reason,meeting_link,is_onlinestudent(ForeignKey to Student),teacher(ForeignKey to Staff)attendance_records(related_name for Attendance)
Security Models
TOTPSecret: OTP secret keysResetToken: Password reset tokens
🔌 API Endpoints
Authentication & Security
POST /password-reset/- Password reset optionsPOST /password-reset/phone/- Phone-based password resetPOST /password-reset/phone/verify/- Verify phone OTPPOST /password-reset/email/- Email-based password resetPOST /password-reset/email/verify/- Verify email codePOST /password-reset/set/- Set new passwordPOST /check-weak-password/- Password strength check
Dashboard & Profile
GET /dashboard/- Main dashboardGET /student-dashboard/- Student dashboardGET /teacher-dashboard/- Teacher dashboardGET /parent-dashboard/- Parent dashboardGET /hod-dashboard/- HOD dashboardGET /admission-officer-dashboard/- Admission officer dashboardPOST /update-profile/- Update user profilePOST /change-password/- Change password
Leave Management
POST /request-leave/- Request student leavePOST /request-staff-leave/- Request staff leavePOST /approve-student-leave/<int:leave_id>/- Approve student leavePOST /reject-student-leave/<int:leave_id>/- Reject student leavePOST /approve-staff-leave/<int:leave_id>/- Approve staff leavePOST /reject-staff-leave/<int:leave_id>/- Reject staff leave
Meeting Management
POST /schedule-meeting/- Schedule parent-teacher meetingPOST /update-meeting/<int:meeting_id>/- Update meeting detailsPOST /cancel-meeting/<int:meeting_id>/- Cancel meetingPOST /mark-attendance/<int:meeting_id>/- Mark meeting attendance
Course Progress
GET /course-progress/<int:student_id>/- Get student's course progressGET /subject-progress/<int:subject_id>/- Get subject progressPOST /update-progress/<int:tracking_id>/- Update course progress
Attendance
POST /mark-attendance/- Mark class attendanceGET /attendance-report/<int:student_id>/- Get student attendance reportGET /class-attendance/<int:routine_id>/- Get class attendance
🔐 Security Features
Authentication
- OTP and TOTP-based authentication
- Session management
- Password hashing using Django's built-in hashers
- Password reset tokens with expiration
Data Protection
- CSRF protection
- Input validation
- File upload security with size and type restrictions
- Secure file storage using Google Cloud Storage
Role-based Access Control
- Granular permissions per role
- Custom permission groups
- Access level restrictions
- Activity logging
API Security
- Token-based authentication
- Rate limiting
- Request validation
- Error handling
📱 Frontend Features
🔍 Testing
Test Coverage
- Unit tests for models
- Integration tests for views
- API endpoint tests
- Security tests
Test Types
- Model validation tests
- View response tests
- Permission tests
- Integration tests
Test Tools
- Django Test Client
- pytest
- Coverage reporting
- CI/CD integration
Responsive Design
- Mobile-first approach
- Bootstrap 5.3.0 for responsive layouts
- Custom CSS for specific components
- Adaptive navigation
Real-time Updates
- Firebase Cloud Messaging for push notifications
- WebSocket support for live updates
- Real-time attendance tracking
- Instant notification system
User Interface
- Clean and modern design
- Intuitive navigation
- Role-specific dashboards
- Interactive data visualization
Mobile Optimization
- Touch-friendly interface
- Responsive tables
- Mobile-optimized forms
- Adaptive image loading
📈 Performance
Optimization
- Database query optimization
- Caching implementation
- Lazy loading
- Asset compression
Monitoring
- Error tracking
- Performance metrics
- User activity logging
- System health checks
Scalability
- Horizontal scaling support
- Load balancing
- Database sharding
- Caching strategies
🤝 Contributing
- Fork the repository
- Create your feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
Code Style
- Follow PEP 8
- Use type hints
- Write docstrings
- Add comments
- Follow Django best practices
Commit Messages
- Use present tense
- Be descriptive
- Reference issues
- Follow conventional commits
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Credits
If you use this project in your work, please give proper credit by:
-
Academic Use:
Student Management System (SMS) by S4NKALP GitHub: https://github.com/S4NKALP/Student-Management-System-In-Django -
Commercial Use:
Based on Student Management System (SMS) by S4NKALP Original Project: https://github.com/S4NKALP/Student-Management-System-In-Django -
Code References:
# This code is based on Student Management System (SMS) # Original Author: S4NKALP # Source: https://github.com/S4NKALP/Student-Management-System-In-Django -
Documentation:
- Include a reference to the original project in your documentation
- Mention any modifications or improvements you've made
- Provide a link to the original repository
-
Presentations/Reports:
- Include the project name and author in your references
- Provide the GitHub repository link
- Acknowledge any specific features or components used
Remember to respect the MIT License terms while using this project.
📝 Acknowledgments
- This project was inspired by the need for a modern, efficient student management system
- Special thanks to all the testers and users who provided valuable feedback
- Grateful to the academic community for their support and suggestions






