515 lines
15 KiB
Markdown
515 lines
15 KiB
Markdown
# 📚 Student Management System (SMS)
|
|
|
|
<div align="center">
|
|
|
|
[](https://www.python.org/)
|
|
[](https://www.djangoproject.com/)
|
|
[](LICENSE)
|
|
[](https://github.com/S4NKALP/Student-Management-System-In-Django/stargazers)
|
|
[]()
|
|
[]()
|
|
[]()
|
|
[]()
|
|
|
|
A comprehensive Student Management System built with Django, featuring multi-role access, real-time notifications, and secure authentication.
|
|
|
|
</div>
|
|
|
|
## 📑 Table of Contents
|
|
|
|
- [💻 Tech Stack](#-tech-stack)
|
|
- [✨ Key Features](#-key-features)
|
|
- [🎯 Project Architecture](#-project-architecture)
|
|
- [🚀 Getting Started](#-getting-started)
|
|
- [🔧 Configuration](#-configuration)
|
|
- [📦 Dependencies](#-dependencies)
|
|
- [🔐 Security Features](#-security-features)
|
|
- [📊 Database Schema](#-database-schema)
|
|
- [🔌 API Endpoints](#-api-endpoints)
|
|
- [📱 Frontend Features](#-frontend-features)
|
|
- [🔍 Testing](#-testing)
|
|
- [📈 Performance](#-performance)
|
|
- [🤝 Contributing](#-contributing)
|
|
- [📄 License](#-license)
|
|
|
|
## 💻 Tech Stack
|
|
|
|
<details>
|
|
<summary><b>🔥 Core Technologies</b></summary>
|
|
|
|
| Technology | Version | Purpose | Documentation |
|
|
|------------|---------|---------|---------------|
|
|
| Python | 3.8+ | Backend Development | [Python Docs](https://docs.python.org/) |
|
|
| Django | 5.1.7 | Web Framework | [Django Docs](https://docs.djangoproject.com/) |
|
|
| Django REST Framework | 3.15.2 | API Development | [DRF Docs](https://www.django-rest-framework.org/) |
|
|
| Firebase Admin | 6.7.0 | Real-time Features | [Firebase Docs](https://firebase.google.com/docs) |
|
|
| Google Cloud Storage | 3.1.0 | File Storage | [GCS Docs](https://cloud.google.com/storage/docs) |
|
|
|
|
</details>
|
|
|
|
<details>
|
|
<summary><b>⚡ Frontend Technologies</b></summary>
|
|
|
|
| Technology | Purpose | Documentation |
|
|
|------------|---------|---------------|
|
|
| Bootstrap | UI Framework | [Bootstrap Docs](https://getbootstrap.com/docs/) |
|
|
| jQuery | DOM Manipulation | [jQuery Docs](https://api.jquery.com/) |
|
|
| Firebase Web SDK | Real-time Updates | [Firebase Web Docs](https://firebase.google.com/docs/web) |
|
|
|
|
</details>
|
|
|
|
<details>
|
|
<summary><b>🛠️ Development Tools</b></summary>
|
|
|
|
| Tool | Purpose | Documentation |
|
|
|------|---------|---------------|
|
|
| Git | Version Control | [Git Docs](https://git-scm.com/doc) |
|
|
| WhiteNoise | Static File Serving | [WhiteNoise Docs](https://whitenoise.readthedocs.io/) |
|
|
| PyOTP | OTP Generation | [PyOTP Docs](https://github.com/pyauth/pyotp) |
|
|
|
|
</details>
|
|
|
|
### 🖥️ Development Environment
|
|
|
|
| Component | Details |
|
|
|-----------|---------|
|
|
| **Operating System** | [Arch Linux](https://archlinux.org/) |
|
|
| **Window Manager** | [Hyprland](https://github.com/hyprwm/Hyprland) |
|
|
| **Status Bar** | [Modus](https://github.com/S4NKALP/Modus) |
|
|
| **Editor** | [Neovim](https://neovim.io/) |
|
|
| **Terminal** | [Kitty](https://sw.kovidgoyal.net/kitty/) |
|
|
| **Shell** | [Zsh](https://www.zsh.org/) |
|
|
|
|
## ✨ Key Features
|
|
|
|
### 👥 User Management
|
|
- **Multi-role System**: Admin, Staff, and Student interfaces
|
|
- **Secure Authentication**: OTP-based verification system
|
|
- **Role-based Access Control**: Granular permissions for each role
|
|
- **User Profiles**: Comprehensive user information management
|
|
|
|
### 📚 Academic Management
|
|
- **Course Management**: Create and manage courses and subjects
|
|
- **Class Scheduling**: Timetable generation and management
|
|
- **Grade Management**: Track and calculate student grades
|
|
- **Exam Management**: Schedule and conduct examinations
|
|
|
|
### 📊 Attendance System
|
|
- **Real-time Tracking**: Live attendance monitoring
|
|
- **Automated Reports**: Generate attendance reports
|
|
- **Notification System**: Alert for low attendance
|
|
- **Bulk Operations**: Manage multiple students at once
|
|
|
|
### 📝 Leave Management
|
|
- **Online Applications**: Digital leave request system
|
|
- **Approval Workflow**: Multi-level approval process
|
|
- **Leave History**: Track all leave records
|
|
- **Automated Notifications**: Status updates via email/SMS
|
|
|
|
### 🔐 Security Features
|
|
- **OTP Verification**: Two-factor authentication
|
|
- **Session Management**: Secure session handling
|
|
- **CSRF Protection**: Cross-site request forgery prevention
|
|
- **XSS Protection**: Cross-site scripting prevention
|
|
- **SQL Injection Prevention**: Secure database queries
|
|
|
|
### 📱 Mobile Features
|
|
- **Responsive Design**: Works on all devices
|
|
- **Push Notifications**: Real-time updates via Firebase
|
|
- **Offline Support**: Basic functionality without internet
|
|
- **Mobile-first Approach**: Optimized for mobile devices
|
|
|
|
## 🎯 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](https://www.python.org/downloads/) (3.8 or higher)
|
|
- [Git](https://git-scm.com/downloads)
|
|
- [Firebase Account](https://firebase.google.com/) (for notifications)
|
|
- [Google Cloud Account](https://cloud.google.com/) (for storage)
|
|
|
|
### 🛠️ Installation Steps
|
|
|
|
#### 1️⃣ Clone the Repository
|
|
```bash
|
|
# 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️⃣ Set Up Virtual Environment
|
|
```bash
|
|
# Create a virtual environment
|
|
python -m venv venv
|
|
|
|
# Activate the virtual environment
|
|
# For Linux/Mac:
|
|
source venv/bin/activate
|
|
|
|
# For Windows:
|
|
.\venv\Scripts\activate
|
|
```
|
|
|
|
#### 3️⃣ Install Dependencies
|
|
```bash
|
|
# Install Python dependencies
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
#### 4️⃣ Configure Environment Variables
|
|
```bash
|
|
# 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
|
|
1. Create a Firebase project
|
|
2. Download the service account key
|
|
3. Place it as `firebase-key.json` in the project root
|
|
4. Configure Firebase Web SDK in `static/js/firebase-config.js`
|
|
|
|
#### 6️⃣ Run Migrations
|
|
```bash
|
|
# Apply database migrations
|
|
python manage.py migrate
|
|
```
|
|
|
|
#### 7️⃣ Create Superuser
|
|
```bash
|
|
# Create a superuser account
|
|
python manage.py createsuperuser
|
|
```
|
|
|
|
#### 8️⃣ Run the Development Server
|
|
```bash
|
|
# Start the development server
|
|
python manage.py runserver
|
|
|
|
# The application will be available at:
|
|
# http://localhost:8000
|
|
```
|
|
|
|
### 📱 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.js` and `firebase-key.json`
|
|
- **Static Files**: Run `python manage.py collectstatic` if static files are not loading
|
|
- **Database Issues**: Check database settings in `.env` file
|
|
- **OTP Not Working**: Verify email settings in `.env` file
|
|
|
|
## 🔧 Configuration
|
|
|
|
### Environment Variables
|
|
Create a `.env` file in the project root:
|
|
```env
|
|
# 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
|
|
DB_PORT=3306
|
|
|
|
# Email (for OTP)
|
|
EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
|
|
EMAIL_HOST=smtp.gmail.com
|
|
EMAIL_PORT=587
|
|
EMAIL_USE_TLS=True
|
|
EMAIL_HOST_USER=your-email@gmail.com
|
|
EMAIL_HOST_PASSWORD=your-app-password
|
|
|
|
# Firebase
|
|
FIREBASE_DATABASE_URL=your-firebase-url
|
|
FIREBASE_TYPE=service_account
|
|
FIREBASE_PROJECT_ID=your-project-id
|
|
FIREBASE_PRIVATE_KEY_ID=your-private-key-id
|
|
FIREBASE_PRIVATE_KEY=your-private-key
|
|
FIREBASE_CLIENT_EMAIL=your-client-email
|
|
FIREBASE_CLIENT_ID=your-client-id
|
|
|
|
# Google Cloud
|
|
GOOGLE_CLOUD_PROJECT=your-google-cloud-project
|
|
GOOGLE_CLOUD_KEY_FILE=path/to/your/google-cloud-key.json
|
|
```
|
|
|
|
## 📦 Dependencies
|
|
|
|
### Backend
|
|
- Django 5.1.7
|
|
- Django REST Framework
|
|
- Firebase Admin
|
|
- Google Cloud Storage
|
|
- PyOTP
|
|
- WhiteNoise
|
|
|
|
### Frontend
|
|
- Bootstrap
|
|
- jQuery
|
|
- Firebase Web SDK
|
|
|
|
## 🔐 Security Features
|
|
|
|
### Authentication
|
|
- OTP-based authentication
|
|
- Session management
|
|
- Password hashing
|
|
|
|
### 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`, `duration`, `duration_type` (Year/Semester)
|
|
|
|
#### Subject
|
|
- `name`, `course` (FK), `semester_or_year`, `syllabus_pdf`, `files`
|
|
|
|
#### Student
|
|
- `name`, `status`, `gender`, `birth_date`, `email`, `phone`, `addresses`, `marital_status`
|
|
- `parent_name`, `parent_phone`, `citizenship_no`, `batches` (M2M), `image`
|
|
- `course` (FK), `current_semester`, `joining_date`, `fcm_token`
|
|
|
|
#### Staff
|
|
- `name`, `phone`, `designation`, `gender`, `birth_date`, `email`, `addresses`
|
|
- `marital_status`, `parent_name`, `parent_phone`, `citizenship_no`, `passport`
|
|
- `image`, `joining_date`, `fcm_token`
|
|
|
|
#### Routine
|
|
- `course` (FK), `subject` (FK), `teacher` (FK), `start_time`, `end_time`
|
|
- `semester_or_year`, `is_active`
|
|
|
|
#### Attendance
|
|
- `date`, `routine` (FK), `teacher` (FK), `teacher_attend`, `class_status`
|
|
|
|
#### Leave Management
|
|
- `Staff_leave`: `staff` (FK), `start_date`, `end_date`, `message`, `status`
|
|
- `Student_Leave`: `student` (FK), `start_date`, `end_date`, `message`, `status`
|
|
|
|
#### Feedback System
|
|
- `StudentFeedback`: `student` (FK), `teacher` (FK), `rating`, `feedback_text`
|
|
- `InstituteFeedback`: `institute` (FK), `user` (FK), `feedback_type`, `rating`, `feedback_text`
|
|
- `StaffInstituteFeedback`: `institute` (FK), `staff` (FK), `feedback_type`, `rating`, `feedback_text`
|
|
|
|
#### Course Tracking
|
|
- `student` (FK), `course` (FK), `enrollment_date`, `start_date`, `expected_end_date`
|
|
- `actual_end_date`, `progress_status`, `completion_percentage`, `current_semester`
|
|
- `semester_start_date`, `semester_end_date`, `notes`
|
|
|
|
### Security Models
|
|
- `TOTPSecret`: OTP secret keys
|
|
- `ResetToken`: Password reset tokens
|
|
|
|
## 🔌 API Endpoints
|
|
|
|
### Authentication & Security
|
|
- `POST /password-reset/` - Password reset options
|
|
- `POST /password-reset/phone/` - Phone-based password reset
|
|
- `POST /password-reset/phone/verify/` - Verify phone OTP
|
|
- `POST /password-reset/email/` - Email-based password reset
|
|
- `POST /password-reset/email/verify/` - Verify email code
|
|
- `POST /password-reset/set/` - Set new password
|
|
- `POST /check-weak-password/` - Password strength check
|
|
|
|
### Dashboard & Profile
|
|
- `GET /dashboard/` - Main dashboard
|
|
- `GET /student-dashboard/` - Student dashboard
|
|
- `GET /teacher-dashboard/` - Teacher dashboard
|
|
- `POST /update-profile/` - Update user profile
|
|
- `POST /change-password/` - Change password
|
|
- `POST /teacher-update-profile-picture/` - Update teacher profile picture
|
|
- `POST /teacher-change-password/` - Change teacher password
|
|
|
|
### Leave Management
|
|
- `POST /request-leave/` - Request student leave
|
|
- `POST /request-staff-leave/` - Request staff leave
|
|
- `POST /approve-student-leave/<int:leave_id>/` - Approve student leave
|
|
- `POST /reject-student-leave/<int:leave_id>/` - Reject student leave
|
|
- `POST /approve-staff-leave/<int:leave_id>/` - Approve staff leave
|
|
- `POST /reject-staff-leave/<int:leave_id>/` - Reject staff leave
|
|
|
|
### Feedback System
|
|
- `POST /submit-feedback/` - Submit general feedback
|
|
- `POST /submit-institute-feedback/` - Submit institute feedback
|
|
- `POST /submit-staff-institute-feedback/` - Submit staff institute feedback
|
|
|
|
### Subject & Course Management
|
|
- `GET /subject/<int:subject_id>/files/` - Get subject files
|
|
- `GET /subject/<int:subject_id>/syllabus/` - View subject syllabus
|
|
- `GET /get-subjects/` - Get all subjects
|
|
- `GET /get-teachers/` - Get all teachers
|
|
- `GET /get-course-duration/` - Get course duration
|
|
- `GET /get-subject-schedule/` - Get subject schedule
|
|
- `POST /manage-subject-files/` - Manage subject files
|
|
- `POST /delete-subject-file/` - Delete subject file
|
|
- `GET /get-teacher-subjects/` - Get teacher's subjects
|
|
|
|
### Attendance Management
|
|
- `POST /save-attendance/` - Save attendance
|
|
- `GET /get-attendance-form/` - Get attendance form
|
|
- `GET /get-students/` - Get student list
|
|
|
|
### Notice Management
|
|
- `POST /add-notice/` - Add new notice
|
|
- `POST /delete-notice/<int:notice_id>/` - Delete notice
|
|
|
|
### Firebase Integration
|
|
- `POST /saveFCMToken/` - Save Firebase Cloud Messaging token
|
|
|
|
## 📱 Frontend Features
|
|
|
|
### User Interface
|
|
- Responsive design
|
|
- Dark/Light mode
|
|
- Custom themes
|
|
- Accessibility support
|
|
|
|
### Interactive Features
|
|
- Real-time updates
|
|
- File uploads
|
|
- Data visualization
|
|
|
|
### Mobile Optimization
|
|
- Touch-friendly interface
|
|
- Offline support
|
|
- Push notifications
|
|
|
|
## 🔍 Testing
|
|
|
|
### Current Test Coverage
|
|
- Unit Tests: Basic test structure in place
|
|
- API Tests: Endpoint testing framework available
|
|
- Integration Tests: Setup for comprehensive testing
|
|
|
|
### Running Tests
|
|
```bash
|
|
# Run all tests
|
|
python manage.py test
|
|
|
|
# Run specific app tests
|
|
python manage.py test app
|
|
|
|
# Run with coverage
|
|
coverage run --source='.' manage.py test
|
|
coverage report
|
|
```
|
|
|
|
### Test Areas
|
|
1. Authentication & Authorization
|
|
- OTP verification
|
|
- Password reset
|
|
- Role-based access
|
|
|
|
2. Data Management
|
|
- CRUD operations
|
|
- Data validation
|
|
- File handling
|
|
|
|
3. Business Logic
|
|
- Attendance calculation
|
|
- Leave approval workflow
|
|
- Course progress tracking
|
|
|
|
4. Integration
|
|
- Firebase messaging
|
|
- File storage
|
|
- Email/SMS notifications
|
|
|
|
## 📈 Performance
|
|
|
|
### Optimization Techniques
|
|
- Database indexing
|
|
- Query optimization
|
|
- Caching
|
|
- Lazy loading
|
|
- Code minification
|
|
|
|
### Monitoring
|
|
- Performance metrics
|
|
- Error tracking
|
|
- User analytics
|
|
- Resource usage
|
|
|
|
## 🤝 Contributing
|
|
|
|
1. Fork the repository
|
|
2. Create your feature branch
|
|
3. Commit your changes
|
|
4. Push to the branch
|
|
5. Create a Pull Request
|
|
|
|
### Code Style
|
|
- Follow PEP 8
|
|
- Use type hints
|
|
- Write docstrings
|
|
- Add comments
|
|
|
|
### Commit Messages
|
|
- Use present tense
|
|
- Be descriptive
|
|
- Reference issues
|
|
|
|
## 📄 License
|
|
|
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
|
|
---
|
|
|
|
<div align="center">
|
|
|
|
### Made with ❤️ by [Sankalp](https://github.com/S4NKALP)
|
|
|
|
[](https://github.com/S4NKALP)
|
|
[](https://linkedin.com/in/sankalp)
|
|
[](https://twitter.com/sankalp)
|
|
|
|
</div> |