Aller au contenu principal

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

Aller au contenu principal

Afficher le formulaire dans Jinja

Apprendre Flask : Le Guide Ultime
3 min de lecture
Gratuit

Maintenant qu'on a notre classe LoginForm, il faut l'envoyer au template.

Dans app.py :

from forms import LoginForm

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    return render_template('login.html', form=form)

Dans templates/login.html :

<form method="POST">
    <!-- TRÈS IMPORTANT : Le jeton de sécurité CSRF -->
    {{ form.hidden_tag() }}

    <div>
        {{ form.email.label }} <br>
        {{ form.email(size=30, class="form-control") }}
        <!-- Affichage des erreurs éventuelles -->
        {% for error in form.email.errors %}
            <span style="color: red;">{{ error }}</span>
        {% endfor %}
    </div>

    <div>
        {{ form.password.label }} <br>
        {{ form.password() }}
        {% for error in form.password.errors %}
            <span style="color: red;">{{ error }}</span>
        {% endfor %}
    </div>

    <div>
        {{ form.submit() }}
    </div>
</form>

Explications :

  • {{ form.hidden_tag() }} : Génère un champ caché <input type="hidden"> avec le token CSRF. Si tu l'oublies, le formulaire sera rejeté.
  • {{ form.email() }} : Génère le <input type="text" ...>. Tu peux lui passer des attributs CSS comme class="form-control".
  • form.email.errors : Si la validation échoue, la liste des erreurs est ici.

C'est là que les Macros (du module précédent) deviennent utiles pour ne pas répéter la boucle des erreurs à chaque champ !