Aller au contenu principal

3 formations sont désormais disponibles : Python, Flask et JS.

Aller au contenu principal

Formulaires HTML natifs (Sans Flask-WTF)

Apprendre Flask : Le Guide Ultime
4 min de lecture
Gratuit

Avant de sortir l'artillerie lourde (Flask-WTF), il est important de comprendre comment Flask gère les formulaires "à la main". Parfois, pour un petit truc simple, tu n'as pas besoin d'extension.

1. Le Code HTML (templates/search.html)

Ici, on écrit du HTML pur. Pas de {{ form.field }}.

<!DOCTYPE html>
<html>
<head>
    <title>Recherche</title>
</head>
<body>
    <h1>Rechercher un utilisateur</h1>
    
    <!-- L'action correspond à l'URL cible (ici la même page) -->
    <!-- La méthode est POST pour envoyer des données -->
    <form action="/recherche" method="POST">
        <label for="q">Nom :</label>
        <input type="text" id="q" name="query" placeholder="Ex: Tintin">
        
        <button type="submit">Rechercher</button>
    </form>
</body>
</html>

👀 Point clé : L'attribut name="query" dans l'input. C'est CE nom qu'on utilisera dans Python.

2. Le Code Python (request.form)

Dans Flask, les données envoyées en POST sont accessibles via request.form (qui agit comme un dictionnaire).

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/recherche', methods=['GET', 'POST'])
def recherche():
    if request.method == 'POST':
        # On récupère la valeur de l'input dont le name est "query"
        terme_recherche = request.form.get('query')
        
        # Validation manuelle (C'est là que c'est pénible sans WTForms...)
        if not terme_recherche:
            return "Erreur : Le champ est vide !"
            
        return f"Vous avez cherché : {terme_recherche}"
        
    # Si c'est un GET, on affiche juste le formulaire
    return render_template('search.html')

Les limites de cette méthode

C'est simple, mais ça devient vite le bazar :

  1. Validation : Tu dois écrire des if partout. "Si vide...", "Si pas un email...", "Si trop court...".
  2. Sécurité : Tu n'as pas de protection CSRF par défaut (un site tiers pourrait envoyer ce formulaire à la place de l'utilisateur).
  3. Remplissage : Si l'utilisateur se trompe, le formulaire se vide. Pour garder les valeurs, tu dois faire <input value="{{ request.form.get('query', '') }}"> partout.

C'est pour ça qu'on utilise Flask-WTF pour les vraies applications (voir la léçon suivante !). Mais pour un petit champ de recherche ou un prototype, request.form est parfait.