A full-stack web application for managing student records, test results, and performance analytics with a modern, responsive interface.
This system provides a comprehensive solution for educational institutions to track student performance across multiple tests and subjects.
- Django 4.x - Python web framework
- Django REST Framework - RESTful API development
- PostgreSQL/SQLite - Database
- Django Simple JWT - JWT authentication
- Django Filter - Advanced filtering capabilities
- React 18 - UI library
- TypeScript - Type-safe JavaScript
- Vite - Build tool and dev server
- TanStack Query - Server state management
- Axios - HTTP client
- Framer Motion - Animations
- Tailwind CSS - Utility-first CSS framework
- shadcn/ui - Component library
- User Authentication - Secure JWT-based authentication with token refresh
- Student Management - CRUD operations for student records
- Test Management - Create and manage tests with multiple subjects
- Marks Entry - Record and update student marks with validation
- Performance Analytics
- Test-wise topper identification
- Global top performers across all tests
- Subject-wise performance tracking
- Detailed student performance history
- Advanced Filtering - Filter students by class, search by name/roll number
- Responsive Design - Mobile-friendly interface with dark mode support
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Student │ │ Test │ │ Mark │
├─────────────────┤ ├─────────────────┤ ├─────────────────┤
│ id (PK) │ │ id (PK) │ │ id (PK) │
│ name │ │ name │ │ student_id (FK) │
│ roll_number (U) │ │ date │ │ test_id (FK) │
│ class_name │ │ subjects (JSON) │ │ subject_name │
│ email (U) │ └─────────────────┘ │ marks_obtained │
│ phone │ │ │ max_marks │
│ created_at │ │ └─────────────────┘
└─────────────────┘ │ │
│ │ │
│ │ │
└─────────────────────────┴──────────────────────────────┘
│
One-to-Many relationships
- id: Primary Key
- name: CharField
- roll_number: CharField (Unique)
- class_name: CharField
- email: EmailField (Unique)
- phone: CharField (Optional)
- created_at: DateField (Auto)
- id: Primary Key
- name: CharField
- date: DateField
- subjects: JSONField
Format: [{"name": "Math", "max_marks": 100}, ...]
- id: Primary Key
- student: ForeignKey(Student)
- test: ForeignKey(Test)
- subject_name: CharField
- marks_obtained: IntegerField (≥0)
- max_marks: IntegerField (≥1)
- Constraint: unique_together(student, test, subject_name)
- Student:
roll_number
,class_name
- Test:
date
- Mark:
(student, test)
,test
POST /api/auth/register/
- Register new userPOST /api/auth/login/
- Login userGET /api/auth/user/
- Get current userPOST /api/auth/logout/
- Logout userPOST /api/token/refresh/
- Refresh access token
GET /api/students/
- List all studentsPOST /api/students/
- Create studentGET /api/students/{id}/
- Get student detailsPUT /api/students/{id}/
- Update studentDELETE /api/students/{id}/
- Delete student
GET /api/tests/
- List all testsPOST /api/tests/
- Create testGET /api/tests/{id}/
- Get test detailsPUT /api/tests/{id}/
- Update testDELETE /api/tests/{id}/
- Delete test
GET /api/marks/
- List all marksPOST /api/marks/
- Create mark entryPUT /api/marks/{id}/
- Update markDELETE /api/marks/{id}/
- Delete mark
GET /api/reports/test_topper/?test_id={id}
- Get test toppersGET /api/reports/global_top_performers/?class={name}&limit={n}
- Get global top performers
POST /api/tests/
{
"name": "Mid-Term Exam 2024",
"date": "2024-03-15",
"subjects": [
{"name": "Mathematics", "max_marks": 100},
{"name": "Science", "max_marks": 100},
{"name": "English", "max_marks": 50}
]
}
POST /api/marks/
{
"student_id": 1,
"test_id": 1,
"subject_name": "Mathematics",
"marks_obtained": 85,
"max_marks": 100
}
- JWT-based authentication with token refresh
- Password hashing using Django's built-in system
- CORS protection
- SQL injection prevention through ORM
- Input validation on both frontend and backend
- Protected API endpoints requiring authentication
This project is licensed under the MIT License.