Outils pour utilisateurs

Outils du site


Panneau latéral

Plan du Site:

python:flask:url

Routes - Url - Redirection

Routes

@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 :

URL

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

URL avec paramètres

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

Redirection

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)

Before Request

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"))

Error Handler

__init__.py
from flask import Flask, render_template
 
...
 
@app.errorhandler(404)
def page_not_found(error):
    return render_template("404.html"), 404
/templates/404.html
{% extends "base.html" %}
 
{% block content %}
 
<h1>Oups, une erreur 404 !!!</h1>
 
{% endblock %}
python/flask/url.txt · Dernière modification: 2022/04/07 05:10 par marclebrun