Rapport de projet - Application Web
Longueur suggérée : Environ cinq pages, un maximum de vingt pages.
Résumé
Ce rapport décrit une application web intitulée [Nom de l’application], développée en utilisant [technologies, ex. HTML, JavaScript, Python avec Flask/FastAPI]. L’application intègre la lecture de fichiers, la programmation fonctionnelle, la gestion des erreurs par exceptions, et la programmation asynchrone. Elle permet [décrire brièvement la fonctionnalité principale, ex. recherche de chercheurs ou gestion de disponibilités]. Ce document détaille la conception, les fonctionnalités, et l’application des concepts du cours. Une archive zip contenant le code source est fournie, ainsi qu’une [mentionner "présentation vidéo" ou "rapport PDF"]. Les sources utilisées, y compris [mentionner Grok ou autres outils si utilisés], sont référencées.
Description de l’application
[Décrivez l’application : son objectif, ses fonctionnalités principales, et son interface utilisateur. Par exemple, un moteur de recherche pour des données de chercheurs ou une interface de gestion de rendez-vous pour médecins. Mentionnez le contexte d’utilisation et l’objectif de l’application.]
Choix de l’application
[Expliquez pourquoi ce concept a été choisi, son intérêt, et comment il permet de démontrer les concepts du cours (lecture de fichiers, programmation fonctionnelle, etc.).]
Gestion des dépendances
[Expliquez pourquoi vous avez choisi pip ou uv.]
Lecture de fichiers
[Expliquez comment la lecture de fichiers est implémentée dans l’application, ex. lecture de données JSON/CSV pour une base de chercheurs ou un fichier de configuration. Décrivez le format des fichiers et leur rôle dans l’application.]
# Exemple de code Python pour la lecture de fichiers import json def lire_donnees(fichier): try: with open(fichier, 'r') as f: return json.load(f) except FileNotFoundError: print("Erreur : fichier non trouvé") return [] except json.JSONDecodeError: print("Erreur : format JSON invalide") return []
Programmation fonctionnelle
[Décrivez comment la programmation fonctionnelle est utilisée, ex. fonctions pures, immuabilité des données, ou utilisation de fonctions comme map, filter, ou reduce. Expliquez comment cela améliore la structure du code.]
# Exemple de code Python fonctionnel def filtrer_donnees(donnees, critere): return list(filter(lambda x: critere in x['nom'], donnees)) return []
Gestion des erreurs
[Expliquez comment la gestion des erreurs par exceptions est implémentée, ex. gestion des erreurs de lecture de fichiers, des requêtes HTTP, ou des entrées utilisateur. Fournissez des exemples concrets.]
# Exemple de gestion des erreurs async def obtenir_donnees(url): try: async with aiohttp.ClientSession() as session: async with session.get(url) as response: return await response.json() except aiohttp.ClientError as e: print(f"Erreur réseau : {e}") return None
Programmation asynchrone
[Décrivez l’utilisation de la programmation asynchrone, ex. gestion des requêtes HTTP avec aiohttp ou traitement parallèle de données. Expliquez comment cela améliore les performances de l’application.]
# Exemple de code asynchrone import aiohttp import asyncio async def fetch_data(): async with aiohttp.ClientSession() as session: # [Code pour récupérer des données de manière asynchrone] pass
Code source principal
[Présentez un extrait clé du code de l’application, avec des commentaires expliquant son fonctionnement. Si le code est trop long, incluez les parties les plus pertinentes et indiquez où trouver le code complet dans l’archive zip.]
# main.py - Code principal de l'application avec FastAPI from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import List # Création de l'instance FastAPI app = FastAPI(title="Gestionnaire de tâches", description="Une API simple pour gérer des tâches quotidiennes.") # Modèle de données pour une tâche (utilise Pydantic pour la validation) class Tache(BaseModel): id: int nom: str complete: bool = False # Base de données simulée (en mémoire pour cet exemple ; en production, utiliser une vraie DB) taches_db: List[Tache] = [ Tache(id=1, nom="Acheter du lait"), Tache(id=2, nom="Appeler le médecin") ] # Route GET pour récupérer toutes les tâches @app.get("/taches", response_model=List[Tache]) async def get_taches(): """ Récupère la liste complète des tâches. Retourne un JSON avec les tâches, triées par ID. """ return taches_db # Route POST pour ajouter une nouvelle tâche (exemple d'ajout) @app.post("/taches", response_model=Tache) async def creer_tache(tache: Tache): """ Ajoute une nouvelle tâche à la base. Vérifie l'unicité de l'ID et lève une exception si conflit. """ # Vérification si l'ID existe déjà for existing in taches_db: if existing.id == tache.id: raise HTTPException(status_code=400, detail="ID de tâche déjà utilisé") # Ajout à la base taches_db.append(tache) return tache # Point d'entrée pour lancer l'application if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)
Présentation vidéo (ou rapport PDF)
[Si vidéo choisie : "Une vidéo de présentation est incluse dans l’archive zip sous le nom [nom_du_fichier].mp4. Elle montre [décrire ce que la vidéo présente, ex. démonstration de l’application, explication des fonctionnalités]. La vidéo est accessible via [lien vers la vidéo, si hébergée en ligne]."] [Si PDF : "Ce rapport PDF décrit l’application et ses fonctionnalités en détail."]
Discussion et analyse
[Analysez la conception de l’application, les défis rencontrés (ex. gestion asynchrone, optimisation de la lecture de fichiers), et comment les concepts du cours ont été appliqués. Discutez des forces et faiblesses de l’approche choisie.]
IA générative
Documenter les requêtes utilisées pour dialoguer avec l’IA générative et les réponses générées.
Références
[Référence 1 : Citer les sources utilisées, ex. documentation de FastAPI, articles sur la programmation asynchrone, ou tutoriels sur la lecture de fichiers.]
[Référence 2 : Inclure toutes les sources pertinentes, avec des liens si possible.]
[Si Grok est utilisé : "Grok, un modèle d’intelligence artificielle développé par xAI, a été utilisé pour aider à la structuration et à la rédaction de ce rapport."]