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.


Comment ça fonctionne ?

Quand un client envoie une requête à Flask :

  1. Flask appelle la fonction Python associée à la route.

  2. Cette fonction exécute la logique métier (lecture/écriture dans la base de données, calculs, etc.).

  3. La fonction retourne une réponse HTTP à Flask.

  4. Flask envoie cette réponse au client.

Types de réponses possibles :


Exemple conceptuel

Ici, la fonction transforme les données internes en format compréhensible par le client.


Pourquoi c’est important :


Bonnes pratiques pour les réponses Flask :

  1. Retourner du JSON pour les APIs

    • Avec jsonify pour s’assurer que le Content-Type est correct

  2. 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

  3. Renvoyer des messages explicites

    • Exemple : { "error": "Utilisateur non trouvé" }

  4. Redirections claires pour les routes web

    • Utiliser redirect() + url_for()

  5. En-têtes et sécurité

    • Ajouter Content-Type, CORS, cache, etc. si nécessaire


En résumé, dans Flask :

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, et redirect / 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 fonction home() 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 fonction html_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 fonction json_response() crée un dictionnaire Python et utilise jsonify() pour le transformer automatiquement en JSON.
    Flask ajoute aussi l’en-tête Content-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 fonction unauthorized() utilise make_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 fonction old_page() utilise redirect(url_for("new_page")) pour envoyer automatiquement l’utilisateur vers la fonction new_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.