ProjetVM/README.md
2025-12-08 14:18:02 +01:00

5.5 KiB

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

🎓 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