@app.route("/home") @app.route("/home/<string:name>") def hello(name="tout le monde"): return "Bonjour " + name @app.route("/home/user/<string:name>/post/<int:id>") def post(name, id): return "Voici le post " + str(id) + " de " + name
Afficher toutes les routes de l'application :
La fonction url_for renvoie l'adresse selon un nom de fonction :
from flask import url_for @app.route("/login") def login(): ... @app.route("/") def home(): url = url_for("login") html = "<a href=\"%s\">Login</a>" % url return html
Pour une route avec paramètres, ajouter les noms des paramètres et leurs valeurs à la suite du nom de la fonction.
<nom> | Paramètre non typé |
---|---|
<int:nom> | Paramètre de type int |
<string:nom> | Paramètre de type string |
from flask import url_for @app.route("/article/<int:id>") def article_by_id(id): return "<h1>Voici l'article %d</h1>" % id @app.route("/article/<string:slug>") def article_by_slug(slug): return "<h1>Article "%s"</h1>" % slug @app.route("/") def home(): url = url_for("article", id=3) html = "<a href=\"%s\">Article n°3</a>" % url return html
La fonction redirect envoie une réponse HTTP 302 afin de rediriger vers une autre URL :
from flask import redirect, url_for @app.route("/admin") def admin(): if not logged_in: return redirect(url_for("login")) ...
Pour rediriger vers la même URL de la requête en cours :
from flask import redirect, request @app.route("/login") def login(): ... if ...: return redirect(request.url)
Pour effectuer des traitements à faire lors de chaque requête, par exemple écrire dans un journal ou initialiser des valeurs dans l'objet global g :
from flask import Flask, g @app.before_request def before_request(): g.sidebar_content = ...
Pour limiter l'accès à certaines routes sous certaines conditions (droits, etc.) :
from flask import Flask, request, redirect, url_for @app.before_request def before_request(): if request.endpoint == "app.index": # autoriser l'accès public sans condition return None else: # n'autoriser l'accès que si une condition est définie if condition: # accès autorisé return None else: # redirection vers la page de login return redirect(url_for("app.login"))
from flask import Flask, render_template ... @app.errorhandler(404) def page_not_found(error): return render_template("404.html"), 404
{% extends "base.html" %} {% block content %} <h1>Oups, une erreur 404 !!!</h1> {% endblock %}