OpenDirecte est un ENT (Espace Numérique de Travail) open source pour écoles, collèges et lycées. C'est une alternative libre, simple et moderne à EcoleDirecte.
- Open Source : Licence AGPLv3
- Monolithique : Frontend et Backend intégrés sur un seul serveur Flask
- Moderne : Interface utilisateur avec TailwindCSS
- Complet : Gestion des utilisateurs, groupes, devoirs, notes, messages, calendrier
- Comptes Parents : Les parents peuvent suivre la scolarité de leurs enfants avec sélecteur d'enfant
- Multi-rôles : Élèves, Professeurs, Parents et Administrateurs
- Extensible : API REST complète et documentée
- Backend : Flask + SQLAlchemy + Flask-JWT-Extended + Flask-Bcrypt
- Base de données : SQLite (par défaut)
- Frontend : HTML + TailwindCSS + Vanilla JavaScript
- Authentification : JWT (stockage localStorage)
opendirecte/
├── app.py # Application Flask principale
├── config.py # Configuration
├── core/ # Modules core
│ ├── extensions.py # Extensions Flask
│ ├── models.py # Modèles de base de données
│ ├── permissions.py # Gestion des permissions
│ └── utils.py # Utilitaires
├── api/ # API REST
│ ├── auth/ # Authentification
│ ├── users/ # Gestion utilisateurs
│ ├── groups/ # Gestion groupes
│ ├── feed/ # Fil d'actualités
│ ├── homeworks/ # Devoirs
│ ├── mail/ # Messagerie
│ ├── calendar/ # Calendrier
│ ├── notes/ # Notes
│ └── attachments/ # Pièces jointes
├── frontend/ # Interface utilisateur
│ ├── index.html # Page de connexion
│ ├── dashboard.html # Tableau de bord
│ ├── homework.html # Page devoirs
│ ├── messages.html # Messagerie
│ ├── notes.html # Notes
│ ├── grades.html # Notes (vue détaillée)
│ ├── calendar.html # Calendrier
│ ├── admin.html # Interface d'administration
│ └── assets/ # CSS, JS
└── requirements.txt # Dépendances Python
- Python 3.11+
- pip
- Cloner le repository
git clone https://github.com/ruikdev/Opendirecte.git
cd Opendirecte- Créer un environnement virtuel
python -m venv venv
source venv/bin/activate # Sur Windows: venv\Scripts\activate- Installer les dépendances
pip install -r requirements.txt- Lancer l'application
python app.pyL'application sera accessible sur http://localhost:5000
Un compte administrateur est créé automatiquement au premier lancement :
- Nom d'utilisateur :
admin - Mot de passe :
admin123
L'interface admin (/admin) offre une gestion complète via 4 onglets :
-
👥 Utilisateurs :
- Liste de tous les utilisateurs avec badges colorés par rôle
- Création, édition, suppression
- Gestion des groupes pour chaque utilisateur
- Recherche et filtrage en temps réel
-
📚 Groupes/Classes :
- Gestion des classes et clubs
- Visualisation du nombre de membres
- CRUD complet
-
📢 Annonces :
- Publier des annonces sur le fil d'actualités
- Modifier et supprimer les annonces existantes
-
👨👩👧👦 Parents (Nouveau !) :
- Vue dédiée aux comptes parents
- Association graphique parent-enfant
- Visualisation des enfants avec leurs classes
- Modale interactive pour gérer les associations
- 🏠 Dashboard : Accès rapide à tous les modules
- 📝 Devoirs : Gestion et suivi des devoirs avec filtres
- 📊 Notes : Visualisation des notes par matière avec moyennes
- 📅 Calendrier : Emploi du temps hebdomadaire
- 💬 Messages : Système de messagerie interne
- Interface moderne avec TailwindCSS
- Design responsive (mobile, tablette, desktop)
- Badges colorés pour identifier les rôles :
- 🟣 Violet : Admin
- 🔵 Bleu : Professeur
- 🟢 Vert : Élève
- 🟡 Jaune : Parent
- Sélecteur d'enfant thématique par page :
- 🔵 Bleu : Devoirs
- 🟢 Vert : Notes
- 🟠 Orange : Calendrier
POST /api/v1/auth/register- Créer un utilisateur (admin)POST /api/v1/auth/login- Connexion → JWTGET /api/v1/auth/me- Utilisateur actuelPUT /api/v1/auth/me- Modifier profilPOST /api/v1/auth/refresh- Rafraîchir token
GET /api/v1/users- Lister utilisateurs (admin)POST /api/v1/users- Créer utilisateur (admin)GET /api/v1/users/<id>- Détails utilisateurPUT /api/v1/users/<id>- Modifier utilisateurDELETE /api/v1/users/<id>- Supprimer utilisateur (admin)PUT /api/v1/users/<id>/groups- Gérer groupesGET /api/v1/users/<parent_id>/children- Liste des enfants d'un parentPUT /api/v1/users/<parent_id>/children- Associer/retirer des enfants (admin)GET /api/v1/users/students- Lister tous les élèves (admin)
GET /api/v1/groups- Lister groupesPOST /api/v1/groups- Créer groupe (admin)GET /api/v1/groups/<id>- Détails groupePUT /api/v1/groups/<id>- Modifier groupe (admin)DELETE /api/v1/groups/<id>- Supprimer groupe (admin)
GET /api/v1/feed- Lister annoncesPOST /api/v1/feed- Publier annonce (admin)PUT /api/v1/feed/<id>- Modifier annonce (admin)DELETE /api/v1/feed/<id>- Supprimer annonce (admin)
GET /api/v1/homeworks- Lister devoirs (accepte?child_id=Xpour les parents)POST /api/v1/homeworks- Créer devoir (prof/admin)PUT /api/v1/homeworks/<id>- Modifier devoirDELETE /api/v1/homeworks/<id>- Supprimer devoir
GET /api/v1/mail/inbox- Boîte de réceptionGET /api/v1/mail/sent- Messages envoyésPOST /api/v1/mail/send- Envoyer messageGET /api/v1/mail/<id>- Lire messageDELETE /api/v1/mail/<id>- Supprimer message
GET /api/v1/calendar- Lister événements (accepte?child_id=Xpour les parents)POST /api/v1/calendar- Créer événement (prof/admin)POST /api/v1/calendar/import- Importer .ics (admin)PUT /api/v1/calendar/<id>- Modifier événementDELETE /api/v1/calendar/<id>- Supprimer événement (admin)
GET /api/v1/notes- Lister notes (accepte?child_id=Xpour les parents)POST /api/v1/notes- Ajouter note (prof/admin)PUT /api/v1/notes/<id>- Modifier noteDELETE /api/v1/notes/<id>- Supprimer note
POST /api/v1/attachments/upload- Upload fichierGET /api/v1/attachments/<id>- Télécharger fichier
Toutes les requêtes API (sauf /auth/login) nécessitent un token JWT dans le header :
Authorization: Bearer <token>
Le token JWT contient :
{
"user_id": 1,
"role": "prof",
"groups": ["3A", "club_IA"]
}- eleve : Élève
- prof : Professeur
- parent : Parent d'élève
- admin : Administrateur
- Consulter ses devoirs (avec marquage fait/non fait)
- Consulter ses notes avec moyennes par matière
- Envoyer et recevoir des messages
- Consulter son emploi du temps
- Créer et gérer des devoirs pour ses groupes
- Attribuer et modifier des notes pour ses élèves
- Envoyer des messages aux élèves et collègues
- Consulter l'emploi du temps de ses groupes
- Sélecteur d'enfant sur toutes les pages (Devoirs, Notes, Calendrier)
- Consulter les devoirs de chaque enfant individuellement
- Voir les notes et moyennes par matière de chaque enfant
- Accéder à l'emploi du temps de chaque enfant
- Vue globale de tous les enfants ou vue filtrée par enfant
- Gérer tous les utilisateurs (création, modification, suppression)
- Onglet dédié "Parents" pour gérer les comptes parents et associer les enfants
- Créer et gérer les groupes/classes
- Publier des annonces sur le fil d'actualités
- Accès complet à toutes les fonctionnalités du système
-
Créer un compte parent :
- Via l'onglet "Utilisateurs" → Nouveau utilisateur → Rôle "Parent"
- Ou directement via l'onglet "Parents"
-
Gérer les associations parent-enfant :
- Accéder à l'onglet "Parents" dans le panneau admin
- Cliquer sur "Gérer les enfants" pour un parent
- Sélectionner les élèves à associer via checkboxes
- Visualiser en temps réel les enfants associés avec leurs classes
-
Interface dédiée :
- Tableau récapitulatif : nom du parent, email, liste des enfants avec leurs groupes
- Recherche rapide pour filtrer les parents
- Actions : Gérer enfants, Éditer, Supprimer
-
Connexion :
- Se connecter avec ses identifiants
- Accès automatique au tableau de bord
-
Sélecteur d'enfant :
- Présent sur les pages : Devoirs, Notes, Calendrier
- Options : "Tous les enfants" ou sélection individuelle
- Interface intuitive avec icône famille
-
Consultation des données :
- Notes : Moyennes par matière, détail de chaque note
- Devoirs : À faire, terminés, en retard (filtrable par enfant)
- Emploi du temps : Cours et événements (filtrable par enfant)
Toutes les routes supportent le paramètre child_id :
# Notes d'un enfant spécifique
GET /api/v1/notes?child_id=5
# Devoirs d'un enfant spécifique
GET /api/v1/homeworks?child_id=5
# Emploi du temps d'un enfant spécifique
GET /api/v1/calendar?child_id=5Configuration via API :
# Associer des enfants à un parent
PUT /api/v1/users/<parent_id>/children
{
"add_children": [1, 2, 3],
"remove_children": [4]
}
# Lister les enfants d'un parent
GET /api/v1/users/<parent_id>/childrenCréer un fichier .env :
FLASK_ENV=development
SECRET_KEY=votre-clé-secrète
JWT_SECRET_KEY=votre-clé-jwt
DATABASE_URL=sqlite:///opendirecte.db# Lancer en mode développement
python app.py
# Lancer avec Flask CLI
export FLASK_APP=app.py
flask run
# Mode debug
export FLASK_ENV=development
flask run --debugCe projet est sous licence AGPLv3. Voir le fichier LICENSE pour plus de détails.
- Notifications en temps réel (WebSocket)
- Export PDF des notes et bulletins
- Système de permissions granulaires
- Multi-établissements
- API GraphQL en complément de REST
- Application mobile (React Native)
- Intégration avec pronote.net
- Amélioration de l'import/export .ics
- Gestion des absences
- Système de punitions/récompenses
- Cahier de texte numérique
Les contributions sont les bienvenues ! N'hésitez pas à :
- Fork le projet
- Créer une branche (
git checkout -b feature/AmazingFeature) - Commit vos changements (
git commit -m 'Add some AmazingFeature') - Push vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
- Code en français (commentaires et noms de variables)
- Respecter la structure existante
- Ajouter des tests si possible
- Mettre à jour la documentation
Projet maintenu par @ruikdev
OpenDirecte - Une alternative libre et open source pour l'éducation 🎓