On affiche le formulaire, mais il ne se passe rien quand on clique.
Retournons dans app.py.
La méthode validate_on_submit()
C'est la méthode magique de Flask-WTF. Elle renvoie True SI ET SEULEMENT SI :
- La requête est un POST.
- Le token CSRF est valide.
- Toutes les données respectent tes validateurs (Email, Length, etc.).
from flask import flash, redirect, url_for
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
# Ici, tout est bon !
email_entré = form.email.data
password_entré = form.password.data
# (Plus tard on vérifiera dans la base de données)
# Feedback utilisateur
flash(f'Connexion réussie pour {email_entré} !', 'success')
return redirect(url_for('dashboard'))
# Si on est ici, c'est soit un GET (premier affichage),
# soit la validation a échoué (les erreurs sont dans l'objet form)
return render_template('login.html', form=form)
Les "Flash Messages" (flash)
flash() permet de stocker un message temporaire qui s'affichera à la prochaine page chargée, puis disparaîtra. C'est parfait pour les notifications "Succès", "Erreur", etc.
Pour les afficher, il faut modifier ton template de base (base.html), juste au-dessus du contenu :
<!-- Dans base.html -->
<div class="container">
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
{% for category, message in messages %}
<div class="alert alert-{{ category }}">
{{ message }}
</div>
{% endfor %}
{% endif %}
{% endwith %}
{% block content %}{% endblock %}
</div>
Ainsi, quand tu fais flash('Bravo', 'success'), ça génère une div avec la classe alert-success.