SGIS est un système de gestion scolaire complet développé avec Django REST Framework. Il permet de gérer les utilisateurs, les classes, les étudiants, les années scolaires, et les présences via différents moyens (QR codes, RFID, manuel).
Le projet est organisé en modules Django indépendants :
- accounts: Gestion des utilisateurs et authentification
- schoolyear: Gestion des années scolaires
- classes: Gestion des classes et enseignants
- students: Profils étudiants et inscriptions
- qrcodes: Génération et gestion des codes QR
- rfid: Gestion des cartes RFID et modules ESP32
- attendance: Sessions et enregistrements de présence
- Backend: Django 5.2, Django REST Framework
- Authentification: JWT (JSON Web Tokens)
- Base de données: SQLite (dev), PostgreSQL (prod)
- Déploiement: Heroku/Render
- Hardware: ESP32 pour RFID
- Python 3.8+
- pip
- virtualenv
git clone <repository>
cd sgis
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python manage.py migrate
python manage.py createsuperuser
python manage.py runserverCréer un fichier .env :
SECRET_KEY=votre_secret_key
DEBUG=True
DATABASE_URL=sqlite:///db.sqlite3
Toutes les requêtes API nécessitent un token JWT dans le header :
Authorization: Bearer <token>
POST /api/auth/login/: ConnexionGET /api/schoolyear/: Années scolairesGET /api/classes/: ClassesGET /api/students/: ÉtudiantsPOST /api/attendance/scan/: Enregistrer présence (QR)POST /api/attendance/rfid/: Enregistrer présence (RFID)
- L'utilisateur scanne son QR code
- L'app mobile/web envoie le token à
/api/attendance/scan/ - Le système enregistre IN/OUT selon l'état actuel
- L'ESP32 détecte une carte RFID
- L'ESP32 envoie
rfid_uidetmodule_tokenà/api/attendance/rfid/ - Le système enregistre la présence automatiquement
- L'enseignant/admin enregistre via l'interface
- Utilise
POST /api/attendance/avecentry_method: "MANUAL"
Le module RFID est conçu pour être développé séparément sur ESP32. La logique côté serveur reste la même :
- Authentification via
module_token - Envoi de
rfid_uidscanné - Réponse avec statut de l'enregistrement
// Connexion WiFi
// Lecture RFID
String uid = readRFID();
// Envoi HTTP POST
HTTPClient http;
http.begin("https://api.sgis.com/api/attendance/rfid/");
http.addHeader("Authorization", "Bearer " + jwt_token);
http.addHeader("Content-Type", "application/json");
String payload = "{\"rfid_uid\":\"" + uid + "\", \"module_token\":\"" + module_token + "\"}";
int response = http.POST(payload);Le schéma relationnel lie tous les modules :
- User → Student (1:1)
- SchoolYear → Student, ClassRoom (1:N)
- ClassRoom → Student, AttendanceSession (1:N)
- RFIDCard → User (1:1)
- Attendance → User, Student, ClassRoom, RFIDCard (N:1)
- Authentification JWT obligatoire
- Permissions par rôle (admin, teacher, student)
- Validation des données d'entrée
- Logs d'audit pour les présences
python manage.py testLe projet est configuré pour Heroku/Render avec :
Procfilerender.yaml- Variables d'environnement
- Base de données PostgreSQL
Voir la documentation détaillée dans docs/ :
- Fork le projet
- Créer une branche feature
- Commiter les changements
- Push et créer une PR
MIT License