Gestion des données entrantes (Flask)

Dans Flask, les données entrantes sont toutes les informations que le client envoie à votre application via une requête HTTP.
Ces données peuvent provenir de plusieurs sources : formulaire HTML, URL, paramètres de requête, fichiers, ou JSON dans le corps de la requête.


Comment ça fonctionne ?

Flask fournit un objet request qui contient toutes les données envoyées par le client.

Lorsque le client fait une requête, Flask remplit l’objet request et le rend accessible à l’endpoint correspondant.

L’endpoint peut ensuite lire ces données et les utiliser pour traiter la requête.

Sources principales des données entrantes :

  1. Paramètres d’URL

    • Exemple : /users?id=42request.args contient {'id': '42'}

  2. Formulaires HTML

    • Données envoyées via POST ou PUT avec Content-Type: application/x-www-form-urlencoded ou multipart/form-data

    • Accès via request.form

  3. JSON dans le corps de la requête

    • Très utilisé pour les APIs REST

    • Accès via request.get_json()

  4. Fichiers envoyés par le client

    • Accès via request.files

  5. Cookies et headers HTTP

    • request.cookies et request.headers


Exemple conceptuel


Pourquoi c’est important :


Bonnes pratiques pour la gestion des données entrantes

  1. Validation des données

    • Vérifier que les champs nécessaires sont présents et corrects

    • Utiliser des bibliothèques comme wtforms ou pydantic pour la validation

  2. Sanitisation des données

    • Nettoyer les entrées pour éviter les injections SQL, XSS ou autres attaques

  3. Gestion des erreurs

    • Renvoyer des messages clairs et des codes HTTP adaptés en cas de données invalides (400 Bad Request, 422 Unprocessable Entity…)

  4. Limiter la taille des fichiers

    • Pour éviter les attaques ou surcharge serveur

  5. Documentation

    • Décrire les paramètres attendus et leur format pour faciliter l’utilisation de l’API


En résumé, dans Flask :

Fonctions :

  • Gestion des données entrantes dans Flask (exemple)

    Importation :

    from flask import Flask, request, jsonify

    Exemple de code :

    from flask import Flask, request, jsonify
    
    app = Flask(__name__)
    
    # 1️⃣ Récupérer des données via les paramètres GET (dans l'URL)
    @app.route("/search")
    def search():
        query = request.args.get("q")  # exemple : /search?q=flask
        return f"Vous avez recherché : {query}" if query else "Aucune recherche effectuée."
    
    
    # 2️⃣ Récupérer des données via un formulaire POST
    @app.route("/login", methods=["GET", "POST"])
    def login():
        if request.method == "POST":
            username = request.form.get("username")
            password = request.form.get("password")
            return f"Connexion de {username} avec le mot de passe {password}"
        # Si GET → afficher un formulaire simple
        return '''
            <form method="POST">
                Nom d'utilisateur: <input type="text" name="username"><br>
                Mot de passe: <input type="password" name="password"><br>
                <input type="submit" value="Se connecter">
            </form>
        '''
    
    
    # 3️⃣ Récupérer des données JSON (API REST)
    @app.route("/api/data", methods=["POST"])
    def api_data():
        data = request.get_json()
        if not data:
            return jsonify({"error": "Aucune donnée reçue"}), 400
        return jsonify({
            "message": "Données reçues avec succès",
            "données": data
        })
    
    
    if __name__ == "__main__":
        app.run(debug=True)

    Explication du code :

    from flask import Flask, request, jsonify importe la classe Flask pour créer l’application web, l’objet request pour accéder aux données envoyées par l’utilisateur (formulaires, paramètres, JSON), et jsonify pour renvoyer facilement des réponses au format JSON.

    app = Flask(__name__) crée une instance de l’application Flask, associée au module courant (__name__), ce qui permet à Flask de trouver les ressources liées à cette application.

    1️⃣ Récupérer des données dans l’URL (méthode GET)

    @app.route("/search") définit une route accessible à /search.
    La fonction search() utilise request.args.get("q") pour lire le paramètre q dans l’URL (exemple : /search?q=flask).
    La fonction retourne un message différent selon que l’utilisateur a fourni une valeur ou non.

    2️⃣ Récupérer des données via un formulaire (méthode POST)

    @app.route("/login", methods=["GET", "POST"]) définit une route qui accepte à la fois les requêtes GET et POST.
    - Si la méthode est POST, request.form.get("username") et request.form.get("password") récupèrent les valeurs envoyées par le formulaire.
    - Si la méthode est GET, la fonction retourne un petit formulaire HTML que l’utilisateur peut remplir et soumettre.

    3️⃣ Récupérer des données JSON (API REST)

    @app.route("/api/data", methods=["POST"]) définit une route qui accepte uniquement des requêtes POST.
    La fonction utilise request.get_json() pour récupérer les données JSON envoyées dans la requête.
    - Si aucune donnée n’est envoyée, elle retourne une erreur avec un code HTTP 400.
    - Sinon, elle renvoie une réponse au format JSON grâce à jsonify(), confirmant la réception des données.

    Lancer l’application Flask

    if __name__ == "__main__": vérifie que le fichier est exécuté directement (et non importé comme module dans un autre fichier).
    app.run(debug=True) démarre le serveur Flask en local sur http://127.0.0.1:5000/.
    Le paramètre debug=True active le mode debug, permettant un rechargement automatique du serveur et l’affichage détaillé des erreurs.