Imaginons que tu as un blog. Tu ne vas pas écrire une route pour chaque article (/article/1, /article/2...).
Tu as besoin de routes dynamiques.
La syntaxe <variable>
Tu peux ajouter des parties variables dans l'URL en les mettant entre chevrons < >.
@app.route('/user/<username>')
def show_user_profile(username):
# username est passé comme argument à la fonction
return f'Profil de l\'utilisateur : {username}'
Si tu vas sur /user/michel, ça affiche "Profil de l'utilisateur : michel".
Si tu vas sur /user/josiane, ça affiche "Profil de l'utilisateur : josiane".
Les Convertisseurs (Typage)
Par défaut, tout ce qui est capturé est une chaîne de caractères (string).
Mais si tu veux un ID numérique ?
@app.route('/post/<int:post_id>')
def show_post(post_id):
# post_id est automatiquement converti en entier (int)
return f'Article numéro {post_id}'
Si tu vas sur /post/42, post_id sera l'entier 42.
Si tu vas sur /post/banane, Flask renverra une 404 Not Found (car "banane" n'est pas un entier). C'est génial pour la validation gratuite !
Les principaux convertisseurs :
string: (défaut) accepte tout texte sans slash.int: accepte des entiers positifs.float: accepte des nombres à virgule positive.path: commestring, mais accepte aussi les slashes (utile pour des chemins de fichiers).uuid: accepte des identifiants UUID.
Exemple complexe :
@app.route('/files/<path:filepath>')
def download_file(filepath):
return f'Téléchargement du fichier : {filepath}'
# Si URL = /files/images/vacances.jpg
# filepath = "images/vacances.jpg"