Gestion des réponses (Flask)
Dans Flask, une réponse est ce que votre application envoie au client après avoir traité une requête.
C’est ce qui permet au navigateur ou à l’application de savoir si la requête a réussi, d’afficher du contenu ou de gérer une erreur.
-
Réponse = données renvoyées au client
-
Fonction associée à la route (endpoint) = génère cette réponse
Comment ça fonctionne ?
Quand un client envoie une requête à Flask :
-
Flask appelle la fonction Python associée à la route.
-
Cette fonction exécute la logique métier (lecture/écriture dans la base de données, calculs, etc.).
-
La fonction retourne une réponse HTTP à Flask.
-
Flask envoie cette réponse au client.
Types de réponses possibles :
-
Texte simple (
"Hello World"
) -
HTML rendu via
render_template()
-
JSON (
jsonify({"key": "value"})
) -
Redirection (
redirect(url_for("nom_route"))
) -
Code HTTP personnalisé (
return "Erreur", 404
)
Exemple conceptuel
-
Route : /users
-
Méthode HTTP : GET
-
View : récupère la liste des utilisateurs depuis la base de données
-
Réponse : JSON contenant la liste des utilisateurs + code HTTP 200
Ici, la fonction transforme les données internes en format compréhensible par le client.
Pourquoi c’est important :
-
Chaque endpoint doit fournir une réponse claire et standardisée
-
Permet aux clients de savoir si l’action a réussi ou échoué
-
Facilite le débogage et la consommation de l’API
Bonnes pratiques pour les réponses Flask :
-
Retourner du JSON pour les APIs
-
Avec
jsonify
pour s’assurer que le Content-Type est correct
-
-
Utiliser les codes HTTP appropriés
-
200 = succès
-
201 = ressource créée
-
400 = requête invalide
-
404 = ressource non trouvée
-
500 = erreur serveur
-
-
Renvoyer des messages explicites
-
Exemple :
{ "error": "Utilisateur non trouvé" }
-
-
Redirections claires pour les routes web
-
Utiliser
redirect()
+url_for()
-
-
En-têtes et sécurité
-
Ajouter Content-Type, CORS, cache, etc. si nécessaire
-
En résumé, dans Flask :
-
Réponse = ce que le client reçoit après avoir envoyé une requête
-
View / endpoint = génère et retourne la réponse
-
Formats : texte, HTML, JSON, redirection
-
Codes HTTP = pour indiquer succès ou erreur
-
Bonne pratique = réponses claires, cohérentes et sécurisées
Fonctions :
-
Gestion des réponses avec Flask (exemple)
Exemple de code :
from flask import Flask, jsonify, make_response, redirect, url_for app = Flask(__name__) # 1️⃣ Réponse simple (texte brut) @app.route("/") def home(): return "Bienvenue sur la page d'accueil !" # Flask renvoie directement une chaîne de caractères # 2️⃣ Réponse HTML @app.route("/html") def html_page(): return """ <h1>Bienvenue</h1> <p>Ceci est une page <strong>HTML</strong> générée par Flask.</p> """ # 3️⃣ Réponse JSON (API) @app.route("/json") def json_response(): data = {"status": "success", "message": "Voici une réponse JSON"} return jsonify(data) # jsonify convertit automatiquement en JSON et ajoute l'en-tête Content-Type # 4️⃣ Réponse avec code d’état personnalisé @app.route("/unauthorized") def unauthorized(): return make_response("Accès non autorisé", 401) # 401 = Unauthorized # 5️⃣ Redirection vers une autre route @app.route("/old-page") def old_page(): return redirect(url_for("new_page")) # redirige vers la fonction new_page @app.route("/new-page") def new_page(): return "Vous êtes sur la nouvelle page." if __name__ == "__main__": app.run(debug=True)
Explication du code :
from flask import Flask, jsonify, make_response, redirect, url_for
importe la classe Flask pour créer l’application,jsonify
pour générer des réponses JSON,make_response
pour construire des réponses personnalisées, etredirect
/url_for
pour gérer les redirections.app = Flask(__name__)
crée une instance de l’application Flask associée au module courant (__name__
).1️⃣ Réponse simple (texte brut)
@app.route("/")
définit une route d’accueil accessible à http://127.0.0.1:5000/.
La fonctionhome()
retourne une simple chaîne de caractères.
Dans Flask, retourner une chaîne correspond à envoyer une réponse HTTP 200 OK contenant ce texte.2️⃣ Réponse HTML
@app.route("/html")
définit une route qui renvoie du contenu HTML.
La fonctionhtml_page()
retourne une chaîne multi-lignes contenant des balises HTML (<h1>
,<p>
, etc.).
Le navigateur interprète directement ce code comme une page web.3️⃣ Réponse JSON (API)
@app.route("/json")
définit une route qui renvoie une réponse JSON.
La fonctionjson_response()
crée un dictionnaire Python et utilisejsonify()
pour le transformer automatiquement en JSON.
Flask ajoute aussi l’en-têteContent-Type: application/json
, ce qui indique au client que la réponse est au format JSON.4️⃣ Réponse avec code d’état personnalisé
@app.route("/unauthorized")
définit une route qui renvoie une réponse avec un code HTTP spécifique.
La fonctionunauthorized()
utilisemake_response("Accès non autorisé", 401)
pour renvoyer un texte et un statut 401 Unauthorized.
Cela indique au client que l’accès est interdit.5️⃣ Redirection vers une autre route
@app.route("/old-page")
définit une ancienne page.
La fonctionold_page()
utiliseredirect(url_for("new_page"))
pour envoyer automatiquement l’utilisateur vers la fonctionnew_page()
.
@app.route("/new-page")
définit la nouvelle route qui affiche le texte "Vous êtes sur la nouvelle page.".Lancer l’application Flask
if __name__ == "__main__":
vérifie que le fichier est exécuté directement (et non importé comme module).
app.run(debug=True)
démarre le serveur local Flask en mode debug, accessible par défaut sur http://127.0.0.1:5000/.
Le mode debug permet le rechargement automatique et affiche les erreurs détaillées.