233 lines
5.5 KiB
Markdown
233 lines
5.5 KiB
Markdown
# 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](QUICKSTART.md)** pour démarrer en 3 commandes.
|
|
|
|
### SQLite (Développement Local)
|
|
```bash
|
|
./init_db.sh sqlite
|
|
export DB_TYPE=sqlite
|
|
python app.py
|
|
```
|
|
|
|
### MariaDB (Production)
|
|
```bash
|
|
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](QUICKSTART.md)** - Démarrage rapide en 3 commandes
|
|
- **[GUIDE_UTILISATION.md](GUIDE_UTILISATION.md)** - Guide complet d'utilisation
|
|
- **[ARCHITECTURE.md](ARCHITECTURE.md)** - Architecture technique détaillée
|
|
- **[ARCHITECTURE_REFACTORING.md](ARCHITECTURE_REFACTORING.md)** - 🆕 Architecture propre sans if
|
|
- **[README_DATABASE.md](README_DATABASE.md)** - Documentation de la BDD
|
|
- **[CHANGELOG.md](CHANGELOG.md)** - Historique des changements
|
|
- **[EXEMPLES_SQL.md](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` :
|
|
```bash
|
|
DB_TYPE=sqlite # ou mariadb
|
|
```
|
|
|
|
### SQLite → MariaDB
|
|
```bash
|
|
export DB_TYPE=mariadb
|
|
./init_db.sh mariadb
|
|
python app.py
|
|
```
|
|
|
|
### MariaDB → SQLite
|
|
```bash
|
|
export DB_TYPE=sqlite
|
|
./init_db.sh sqlite
|
|
python app.py
|
|
```
|
|
|
|
## 🐳 Docker
|
|
|
|
### Lancer avec Docker Compose
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
### Initialiser la base MariaDB
|
|
```bash
|
|
docker exec -it flask python -m bdd.GererBdd
|
|
```
|
|
|
|
### Accéder aux logs
|
|
```bash
|
|
docker-compose logs -f
|
|
```
|
|
|
|
## 🛠️ Installation Manuelle
|
|
|
|
### Prérequis
|
|
- Python 3.8+
|
|
- pip
|
|
|
|
### Installation des dépendances
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### Variables d'environnement
|
|
```bash
|
|
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
|
|
```bash
|
|
export DB_TYPE=sqlite
|
|
rm -f cours.db
|
|
./init_db.sh sqlite
|
|
python app.py
|
|
```
|
|
|
|
### Tester avec MariaDB
|
|
```bash
|
|
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](QUICKSTART.md)
|