La fonction Flask redirect()
est essentielle pour guider les utilisateurs dans votre application web. Elle permet de faire passer les utilisateurs en douceur vers différentes URL après des actions spécifiques, telles que des soumissions de formulaires ou des connexions. Cependant, une simple redirection ne suffit pas toujours ; vous avez souvent besoin de transmettre des données à la nouvelle page. Cet article explique comment utiliser efficacement redirect()
avec des paramètres dans vos applications Flask, en se concentrant sur les meilleures pratiques de sécurité.
Table des matières
- Comprendre la nécessité du passage de paramètres
- Méthode 1 : Utilisation des paramètres d’URL pour les données non sensibles
- Méthode 2 : Utilisation des sessions Flask pour les données sensibles
- Choisir la bonne méthode
Comprendre la nécessité du passage de paramètres
La fonction redirect()
de base ne prend pas en charge intrinsèquement le passage direct de paramètres. Elle accepte une URL en entrée. Pour transmettre des données, vous devez utiliser des paramètres d’URL ou la gestion des sessions côté serveur.
Méthode 1 : Utilisation des paramètres d’URL pour les données non sensibles
L’approche la plus courante consiste à ajouter des paramètres à l’URL sous forme de chaîne de requête (la partie après le point d’interrogation « ? »). Les paramètres sont des paires clé-valeur séparées par des esperluettes (« & »).
from flask import Flask, render_template, redirect, url_for, request
app = Flask(__name__)
@app.route('/form', methods=['GET', 'POST'])
def my_form():
if request.method == 'POST':
name = request.form['name']
age = request.form['age']
return redirect(url_for('success', name=name, age=age))
return render_template('form.html')
@app.route('/success')
def success():
name = request.args.get('name')
age = request.args.get('age')
return f"Succès ! Nom : {name}, Âge : {age}"
if __name__ == '__main__':
app.run(debug=True)
<form method="POST">
<label for="name">Nom :</label>
<input type="text" id="name" name="name"><br><br>
<label for="age">Âge :</label>
<input type="text" id="age" name="age"><br><br>
<input type="submit" value="Soumettre">
</form>
Cela crée des URL comme /success?name=John&age=30
. url_for
simplifie la gestion des paramètres.
Méthode 2 : Utilisation des sessions Flask pour les données sensibles
Pour les données sensibles (ID utilisateur, jetons d’authentification), n’utilisez jamais de paramètres d’URL. L’objet session de Flask fournit un stockage côté serveur, associant des données à la session d’un utilisateur.
from flask import Flask, render_template, redirect, url_for, request, session
app = Flask(__name__)
app.secret_key = 'your_secret_key' # REMPLACER par une clé forte et générée aléatoirement
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
# ... logique d'authentification ...
if username == "validuser":
session['username'] = username
return redirect(url_for('dashboard'))
return render_template('login.html')
@app.route('/dashboard')
def dashboard():
username = session.get('username')
if username:
return f"Bienvenue, {username} !"
else:
return redirect(url_for('login'))
if __name__ == '__main__':
app.run(debug=True)
Crucialement, définissez une secret_key
forte et générée aléatoirement. Ceci est vital pour le chiffrement des données de session.
Choisir la bonne méthode
Utilisez des paramètres d’URL pour les données non sensibles visibles dans l’URL. Utilisez des sessions pour les données confidentielles qui doivent rester privées.
Ce guide montre comment passer des paramètres de manière sécurisée et efficace avec la fonction redirect()
de Flask, assurant ainsi une expérience utilisateur fluide et sécurisée.