Skip to content

Latest commit

 

History

History
442 lines (349 loc) · 15.5 KB

File metadata and controls

442 lines (349 loc) · 15.5 KB

📁 Structure Détaillée du Projet PythonTaMère

Vue d'ensemble

PythonTaMère est une plateforme web d'apprentissage Python interactive qui permet d'exécuter du code Python directement dans le navigateur grâce à Pyodide (WebAssembly). Le projet suit une architecture moderne avec un backend FastAPI et un frontend vanilla JavaScript.


🗂️ Structure Complète du Projet

Python_Ta_Mere/
│
├── 📄 Documentation
│   ├── README.md                    # Documentation principale du projet
│   ├── QUICKSTART.md                # Guide de démarrage rapide
│   ├── TUTORIAL.md                  # Tutoriel détaillé pas à pas
│   ├── PROJECT_SUMMARY.md           # Résumé complet du projet
│   ├── STRUCTURE.md                 # Structure existante (ancienne version)
│   ├── STRUCTURE_DETAILLEE.md       # Ce fichier - Structure détaillée
│   ├── VISUAL_GUIDE.md              # Guide visuel de l'interface
│   └── START_HERE.md                # Point de départ pour nouveaux utilisateurs
│
├── 🔧 Configuration
│   ├── requirements.txt              # Dépendances Python du projet
│   ├── docker-compose.yml           # Configuration Docker Compose
│   ├── Dockerfile.backend           # Image Docker pour le backend
│   ├── start.sh                     # Script de démarrage Linux/Mac
│   └── start.bat                    # Script de démarrage Windows
│
├── 🧠 Backend (API FastAPI)
│   ├── __init__.py                  # Package Python (vide)
│   ├── main.py                      # Point d'entrée principal de l'API
│   ├── database.py                  # Configuration SQLAlchemy et connexion DB
│   ├── models.py                    # Modèles de données (ORM SQLAlchemy)
│   ├── schemas.py                   # Schémas Pydantic pour validation
│   ├── auth.py                      # Système d'authentification JWT
│   ├── init_db.py                   # Initialisation DB + données d'exemple
│   ├── add_lessons.py               # Script pour ajouter des leçons supplémentaires
│   │
│   └── 🛣️ routes/                   # Endpoints de l'API REST
│       ├── __init__.py              # Package Python (vide)
│       ├── auth_routes.py           # Routes d'authentification
│       ├── lessons_routes.py        # Routes des leçons
│       ├── exercises_routes.py      # Routes des exercices
│       └── submissions_routes.py   # Routes des soumissions
│
└── 🌐 Frontend (Application Web)
    ├── index.html                   # Page HTML principale (SPA)
    │
    ├── 🎨 css/                      # Styles CSS
    │   ├── style.css                # Styles principaux (responsive)
    │   └── markdown-style.css       # Styles pour le rendu Markdown
    │
    └── 💻 js/                       # Scripts JavaScript
        ├── api.js                   # Client API REST
        ├── app.js                   # Application principale (navigation, UI)
        ├── editor.js                # Wrapper Monaco Editor
        ├── runner.js                # Pyodide runner (exécution Python)
        ├── i18n.js                  # Internationalisation (FR/EN)
        └── messages.js              # Messages et traductions

📋 Détail des Rôles par Fichier

📄 Documentation

Fichier Rôle Contenu
README.md Documentation principale Description du projet, installation, utilisation
QUICKSTART.md Guide rapide Démarrage en 5 minutes
TUTORIAL.md Tutoriel complet Guide détaillé pas à pas
PROJECT_SUMMARY.md Résumé technique Vue d'ensemble, architecture, métriques
STRUCTURE.md Structure existante Ancienne version de la structure
STRUCTURE_DETAILLEE.md Structure détaillée Ce fichier - Rôles détaillés
VISUAL_GUIDE.md Guide visuel Screenshots et explications UI
START_HERE.md Point de départ Pour nouveaux utilisateurs

🔧 Configuration

Fichier Rôle Contenu
requirements.txt Dépendances Python Liste des packages Python nécessaires
docker-compose.yml Orchestration Docker Services backend + frontend
Dockerfile.backend Image Docker backend Configuration pour containeriser l'API
start.sh Script Linux/Mac Démarrage automatique des serveurs
start.bat Script Windows Démarrage automatique des serveurs

🧠 Backend (API FastAPI)

Fichiers Principaux

Fichier Rôle Fonctionnalités
main.py Point d'entrée API Configuration FastAPI, CORS, routes, logging
database.py Configuration DB SQLAlchemy engine, session, Base
models.py Modèles de données 7 modèles ORM (User, Lesson, Exercise, etc.)
schemas.py Validation données Schémas Pydantic pour API requests/responses
auth.py Authentification JWT, magic tokens, permissions
init_db.py Initialisation DB Création tables + données d'exemple
add_lessons.py Script utilitaire Ajout de leçons supplémentaires

Routes API (routes/)

Fichier Rôle Endpoints
auth_routes.py Authentification /auth/magic-link, /auth/verify, /auth/me
lessons_routes.py Gestion leçons /lessons (CRUD complet)
exercises_routes.py Gestion exercices /exercises (CRUD complet)
submissions_routes.py Soumissions /submissions (sauvegarde solutions)

🌐 Frontend (Application Web)

Structure HTML/CSS

Fichier Rôle Contenu
index.html Page principale Structure HTML, modals, navigation
css/style.css Styles principaux CSS moderne, responsive, variables
css/markdown-style.css Styles Markdown Rendu des leçons et exercices

Scripts JavaScript (js/)

Fichier Rôle Fonctionnalités
api.js Client API Requêtes HTTP, authentification, gestion tokens
app.js Application principale Navigation, UI, gestion état, modals
editor.js Monaco Editor Wrapper pour éditeur de code VS Code
runner.js Pyodide Runner Exécution Python dans navigateur
i18n.js Internationalisation Support FR/EN
messages.js Messages Textes et traductions

🗄️ Modèles de Données

Tables Principales

Modèle Rôle Relations
User Utilisateurs → Progress, Submissions
Lesson Leçons/Modules → Exercises, Progress
Exercise Exercices → TestCases, Submissions
TestCase Tests unitaires → Exercise
Submission Soumissions code → User, Exercise
Progress Progression utilisateur → User, Lesson
MagicToken Tokens auth -

Relations

User (1) ←→ (N) Progress ←→ (1) Lesson
User (1) ←→ (N) Submission ←→ (1) Exercise
Lesson (1) ←→ (N) Exercise ←→ (N) TestCase

🔄 Flux de l'Application

1. Authentification

User → Email → Magic Link → Token → JWT → Session

2. Navigation Leçons

Frontend → GET /lessons → Backend → SQLite → JSON → Frontend → Render

3. Exercice Interactif

Frontend → GET /exercises/:id → Backend → (Exercise + Tests) → Frontend
    ↓
Monaco Editor (code editing)
    ↓
Pyodide (Python execution in WASM)
    ↓
Local Tests (validation)
    ↓
POST /submissions → Backend → Save Progress

🛠️ Technologies Utilisées

Backend

  • FastAPI : Framework API REST moderne
  • SQLAlchemy : ORM pour base de données
  • Pydantic : Validation des données
  • SQLite : Base de données (développement)
  • JWT : Authentification par tokens
  • Uvicorn : Serveur ASGI

Frontend

  • Vanilla JavaScript : Pas de framework (performance)
  • Monaco Editor : Éditeur de code VS Code
  • Pyodide : Python en WebAssembly
  • Marked.js : Rendu Markdown
  • Font Awesome : Icônes
  • CSS Grid/Flexbox : Layout moderne

DevOps

  • Docker : Containerisation
  • Docker Compose : Orchestration
  • Nginx : Serveur web frontend

📊 Métriques du Projet

Catégorie Valeur
Fichiers Python 12
Fichiers JavaScript 6
Fichiers CSS 2
Fichiers HTML 1
Fichiers Config 5
Fichiers Documentation 8
Total Fichiers 34
Lignes de Code ~3,500
Lignes Documentation ~1,200
Modèles DB 7
Endpoints API 20+
Pages Frontend 6

🚀 Points d'Entrée

Démarrage Manuel

  1. Backend : python backend/main.py → Port 8000
  2. Frontend : python -m http.server 3000 --directory frontend → Port 3000

Scripts Automatiques

  • Windows : start.bat
  • Linux/Mac : ./start.sh

Docker

docker-compose up

🎯 Fonctionnalités Principales

Pour les Apprenants

  • ✅ Exécution Python dans le navigateur
  • ✅ Tests automatiques avec feedback
  • ✅ Suivi de progression
  • ✅ Mode invité (sans compte)
  • ✅ Interface gaming moderne

Pour les Administrateurs

  • ✅ CRUD leçons et exercices
  • ✅ Gestion des tests unitaires
  • ✅ Interface admin intégrée
  • ✅ Statistiques de progression

Techniques

  • ✅ Authentification par magic link
  • ✅ API REST complète
  • ✅ Responsive design
  • ✅ Multi-langue (FR/EN)
  • ✅ Architecture modulaire

🔐 Sécurité

Implémentée

  • ✅ Exécution côté client (sandbox)
  • ✅ JWT avec expiration
  • ✅ CORS configuré
  • ✅ Rate limiting
  • ✅ Validation Pydantic
  • ✅ Permissions admin/user

À Renforcer (Production)

  • 🔄 CSP stricte
  • 🔄 HTTPS obligatoire
  • 🔄 Email réel pour magic links
  • 🔄 Audit logs
  • 🔄 Re-validation serveur

📈 Performance

Points Forts

  • ✅ Exécution côté client (pas de charge serveur)
  • ✅ API légère (FastAPI)
  • ✅ Chargement progressif (Pyodide)
  • ✅ Caching navigateur

Optimisations Possibles

  • 🔄 Service Worker (PWA)
  • 🔄 Compression gzip/brotli
  • 🔄 CDN pour assets
  • 🔄 Lazy loading
  • 🔄 PostgreSQL pour scale

🎨 Interface Utilisateur

Pages Disponibles

  1. Home : Landing page avec features
  2. Leçons : Catalogue avec progression
  3. Détail Leçon : Contenu Markdown + exercices
  4. Exercice : Split view (énoncé | éditeur + console)
  5. Profil : Statistiques de progression
  6. Admin : Formulaires CRUD (si admin)

Design

  • Moderne : Design épuré, couleurs cohérentes
  • Responsive : Mobile/tablette/desktop
  • Accessible : Navigation clavier, labels ARIA
  • Intuitive : Feedback visuel immédiat

📚 Données d'Exemple

Contenu Pédagogique Inclus

  • 3 modules : Bases, Opérations, Boucles
  • 8 leçons progressives
  • 15+ exercices avec tests
  • 1 compte admin : admin@pylearn.local

Scripts d'Initialisation

  • init_db.py : Création tables + données
  • add_lessons.py : Ajout de leçons supplémentaires

🔧 Maintenance et Évolution

Ajouter du Contenu

  1. Se connecter en tant qu'admin
  2. Utiliser l'interface admin
  3. Créer Leçon → Exercice → Tests

Modifier l'Interface

  • Styles : frontend/css/style.css
  • Comportement : frontend/js/app.js
  • API : backend/routes/

Déployer en Production

  1. Configurer variables d'environnement
  2. Migrer vers PostgreSQL si besoin
  3. Utiliser Docker Compose
  4. Setup reverse proxy (nginx)
  5. Activer HTTPS

📝 Notes Techniques

  • Zéro Build : Pas de webpack, npm, juste du JS vanilla
  • Progressive : Pyodide se charge en arrière-plan
  • Offline-ready : Base pour une PWA
  • Scalable : Architecture modulaire facile à étendre
  • Documenté : Chaque fichier a des commentaires

🎉 Conclusion

PythonTaMère est une plateforme complète et moderne pour l'apprentissage Python, avec une architecture claire et extensible. Chaque fichier a un rôle précis dans l'écosystème de l'application, permettant une maintenance et une évolution faciles.

La structure modulaire permet d'ajouter facilement de nouvelles fonctionnalités tout en maintenant la cohérence du code et de l'architecture.


👨‍⚕️ À Propos de l'Auteur & Développeur

Abdel ATIA - Le Développeur de Ouf ! 🚀

Abdel ATIA est un développeur passionné et polyvalent qui a créé PythonTaMère avec une vision unique : rendre l'apprentissage de Python accessible et fun pour tous !

🎯 Son Profil Unique

  • 🩺 Vétérinaire : Soigne les animaux avec passion
  • 💊 Pharmacien : Conçoit des solutions thérapeutiques
  • 🐍 Python Developer : Code des applications incroyables
  • 🤖 IA Enthusiast : Passionné d'intelligence artificielle
  • 🎮 Gaming Mindset : Applique la logique gaming à l'apprentissage

💡 Sa Philosophie

"Si je peux passer de soigner des chats à coder de l'IA, TOI aussi tu peux apprendre Python !"

Abdel croit fermement que tout le monde peut apprendre à programmer, peu importe son background. Sa propre transition de vétérinaire/pharmacien vers le développement Python en est la preuve vivante !

🛠️ Ses Compétences Techniques

  • Backend : FastAPI, SQLAlchemy, JWT, Docker
  • Frontend : JavaScript vanilla, CSS moderne, Pyodide
  • DevOps : Docker Compose, Nginx, déploiement
  • Architecture : API REST, microservices, sécurité
  • Pédagogie : Création de contenu éducatif interactif

🎨 Son Style de Développement

  • Code propre : Architecture claire et bien documentée
  • User Experience : Interface intuitive et gaming
  • Performance : Optimisations intelligentes
  • Sécurité : Bonnes pratiques implémentées
  • Accessibilité : Zéro friction pour l'utilisateur

🌟 Pourquoi PythonTaMère ?

Abdel a créé PythonTaMère pour répondre à un besoin qu'il a lui-même ressenti :

  • Problème : Les plateformes d'apprentissage sont souvent ennuyeuses et complexes
  • Solution : Une app gaming qui rend Python fun et accessible
  • 🎯 Mission : Démocratiser l'apprentissage de la programmation

🚀 Sa Vision

  • Court terme : MVP fonctionnel et utilisable
  • Moyen terme : Communauté active d'apprenants
  • Long terme : Plateforme de référence pour l'apprentissage Python

📞 Contact & Collaboration

  • GitHub : [Profil GitHub d'Abdel]
  • LinkedIn : [Profil LinkedIn d'Abdel]
  • Email : [Email de contact]
  • Portfolio : [Site web personnel]

🎓 Son Message aux Apprenants

"N'ayez pas peur de coder ! Chaque expert était un jour un débutant. PythonTaMère est là pour vous accompagner dans votre voyage vers la maîtrise de Python. Codez, testez, échouez, réessayez... C'est comme ça qu'on devient un développeur de ouf !" 💪

🏆 Ses Réalisations avec PythonTaMère

  • Architecture complète : Backend + Frontend + Admin
  • Technologies modernes : Pyodide, Monaco Editor, FastAPI
  • Interface gaming : Design moderne et intuitif
  • Documentation complète : Guides détaillés pour tous
  • Déploiement ready : Docker, scripts, configuration

Structure analysée le : 2025-01-27
Version : 1.0.0 (MVP)
Développeur : Abdel ATIA - Le Dev de Ouf ! 🚀