| bdd | ||
| static | ||
| templates | ||
| .env.example | ||
| .gitignore | ||
| app.py | ||
| check_setup.py | ||
| compose.yml | ||
| Dockerfile | ||
| entrypoint.sh | ||
| init_db.sh | ||
| poetry.lock | ||
| pyproject.toml | ||
| README.md | ||
| requirements.txt | ||
| run.sh | ||
Application de Gestion de Notes
Application Flask pour la gestion des notes scolaires avec support multi-backend (SQLite et MariaDB).
🎯 Caractéristiques
- ✅ Multi-backend : SQLite ou MariaDB au choix
- ✅ Architecture propre : Pattern Strategy, ZÉRO if dans le code métier
- ✅ Système de rôles : Professeurs et Élèves avec permissions différenciées
- ✅ Gestion des UE : Organisation par Unités d'Enseignement
- ✅ Coefficients : Notes pondérées par coefficient
- ✅ Recherche : Recherche d'élèves et de matières
- ✅ Moyennes automatiques : Calcul des moyennes par UE
- ✅ Sans ORM : Requêtes SQL "à l'ancienne" avec abstraction propre
- ✅ Extensible : Ajouter PostgreSQL = créer 1 classe
🚀 Démarrage Rapide
Voir QUICKSTART.md pour démarrer en 3 commandes.
SQLite (Développement Local)
./init_db.sh sqlite
export DB_TYPE=sqlite
python app.py
MariaDB (Production)
docker-compose up -d mariadb && sleep 10
./init_db.sh mariadb
python app.py
Accédez à l'application : http://localhost:5000
👥 Comptes de Test
| Rôle | Login | Password | Accès |
|---|---|---|---|
| Professeur | prof1 |
prof123 |
Gestion complète |
| Élève | Djalim |
caca |
Consultation notes |
| Élève | eleve1 |
eleve123 |
Consultation notes |
| Élève | eleve2 |
eleve123 |
Consultation notes |
📚 Documentation
- QUICKSTART.md - Démarrage rapide en 3 commandes
- GUIDE_UTILISATION.md - Guide complet d'utilisation
- ARCHITECTURE.md - Architecture technique détaillée
- ARCHITECTURE_REFACTORING.md - 🆕 Architecture propre sans if
- README_DATABASE.md - Documentation de la BDD
- CHANGELOG.md - Historique des changements
- EXEMPLES_SQL.md - Exemples de requêtes SQL
🎓 Fonctionnalités
Pour les Professeurs
- Créer des comptes élèves
- Créer des UE (Unités d'Enseignement)
- Créer des matières avec coefficients
- Ajouter des notes pour les élèves
- Lister et rechercher élèves/matières
- Consulter les notes de chaque élève
Pour les Élèves
- Consulter toutes leurs notes
- Voir la moyenne par UE (pondérée)
- Historique détaillé des notes
🏗️ Architecture
app.py # Application Flask
├── bdd/
│ ├── database.py # Abstraction SQLite/MariaDB
│ ├── User.py # Logique métier
│ └── GererBdd.py # Initialisation BDD
├── templates/ # Templates HTML
│ ├── notes_eleve.html
│ ├── prof_*.html
│ └── ...
└── static/ # CSS/JS
Schéma de Base de Données
Users (prof/eleve) ──< Notes >── Matieres >── UE
- Users : Utilisateurs avec rôles (prof/eleve)
- UE : Unités d'Enseignement
- Matieres : Matières avec coefficients, liées aux UE
- Notes : Notes des élèves (0-20)
🔄 Changement de Backend
Configuration
Modifiez .env :
DB_TYPE=sqlite # ou mariadb
SQLite → MariaDB
export DB_TYPE=mariadb
./init_db.sh mariadb
python app.py
MariaDB → SQLite
export DB_TYPE=sqlite
./init_db.sh sqlite
python app.py
🐳 Docker
Lancer avec Docker Compose
docker-compose up -d
Initialiser la base MariaDB
docker exec -it flask python -m bdd.GererBdd
Accéder aux logs
docker-compose logs -f
🛠️ Installation Manuelle
Prérequis
- Python 3.8+
- pip
Installation des dépendances
pip install -r requirements.txt
Variables d'environnement
export DB_TYPE=sqlite # ou mariadb
export DB_HOST=mariadb # pour MariaDB
export DB_USER=root
export DB_PASSWORD=caca
export DB_NAME=APPNOTE
export SQLITE_DB_PATH=cours.db # pour SQLite
📦 Technologies
- Backend : Flask, Flask-JWT-Extended
- Base de données : SQLite / MariaDB
- Frontend : HTML, CSS (templates Jinja2)
- Conteneurisation : Docker, Docker Compose
🔒 Sécurité
- ✅ Requêtes SQL paramétrées (protection injection SQL)
- ✅ JWT pour l'authentification
- ✅ Vérification des rôles sur chaque route
- ⚠️ Mots de passe en clair (à améliorer avec bcrypt)
📊 Exemple d'Utilisation
Professeur crée une UE
1. Login avec prof1/prof123
2. Menu → "Créer une UE"
3. Code: UE4, Nom: "Langues"
4. Submit
Professeur ajoute une note
1. Menu → "Ajouter une note"
2. Sélectionner élève: Djalim
3. Sélectionner matière: Python
4. Note: 18.5
5. Submit
Élève consulte ses notes
1. Login avec Djalim/caca
2. Voir moyennes par UE en haut
3. Voir détail des notes en bas
🧪 Tests
Tester avec SQLite
export DB_TYPE=sqlite
rm -f cours.db
./init_db.sh sqlite
python app.py
Tester avec MariaDB
docker-compose up -d mariadb
sleep 10
export DB_TYPE=mariadb
./init_db.sh mariadb
python app.py
🤝 Contribution
L'application est modulaire et extensible :
- Ajouter un nouveau backend : Créer une classe
DatabaseBackend - Ajouter une fonctionnalité : Ajouter route + template + fonction métier
📝 Licence
Projet éducatif - Polytech
👨💻 Auteur
Projet de gestion de notes avec architecture multi-backend
Pour commencer : Consultez QUICKSTART.md