API de routage définie par URL

Flask fournit trois façons de définir des règles de routage :@app.route()Décorateur,add_url_rule()Méthodes, opérations directesurl_map。


Convertisseur de variable d'URL

Convertisseur Syntaxe Règles de correspondance Types Python
string <string:name> ou <name> Tout texte sans / (par défaut) str
int <int:id> Entier positif int
float <float:value> Flottant positif float
path <path:filepath> Tout texte (y compris /) str
any <any(a,b,c):item> Correspond à n'importe quelle valeur de la liste str
uuid <uuid:id> Format UUID standard str

Paramètres de add_url_rule

Paramètre Type Description
rule str Chaîne de règle d'URL, telle que "/user/<username>"
endpoint str Nom du point de terminaison, par défaut le nom de la fonction. url_for l'utilise pour référencer la route.
view_func callable Fonction de vue. Peut être omise ; stockée plus tard dans le dictionnaire view_functions.
defaults dict Valeurs par défaut pour les variables d'URL, telles que defaults={"page": 1}
subdomain str Correspondance des sous-domaines. Nécessite l'activation de subdomain_matching
methods liste Méthodes HTTP autorisées. Par défaut ["GET"] (HEAD et OPTIONS sont ajoutés automatiquement)
host str Correspondance du nom d'hôte. Nécessite l'activation de host_matching

Comportement de la barre oblique finale

Règles Accès sans / Accès avec /
@app.route("/projects/") Redirection 308 vers /projects/ Accès normal
@app.route("/about") Accès normal 404 Not Found

Route avec valeur par défaut

Les variables d'URL optionnelles peuvent être implémentées via le paramètre defaults :

Exemple

# Deux URL pointent vers la même fonction ; /users/ est équivalente à /users/page/1
@app.route("/users/", defaults={"page": 1})
@app.route("/users/page/<int:page>")
def show_users(page):
    return f"Affichage de la page {page}"

# Accès /users/ → page=1
# Accès /users/page/3 → page=3

Si la route avec valeur par défaut et la route avec variables existent toutes les deux, l'accès à l'URL avec les valeurs par défaut sera redirigé en 308 vers la forme simplifiée.


Convertisseur personnalisé

Exemple

from werkzeug.routing import BaseConverter

# Définir un convertisseur de type personnalisé
class ListConverter(BaseConverter):
    """Correspond à une liste séparée par des virgules, par exemple, /tags/python,flask"""
    def to_python(self, value):
        return value.split(",")

    def to_url(self, values):
        return ",".join(values)

# Enregistrer dans url_map
app.url_map.converters["list"] = ListConverter

# Utiliser un convertisseur personnalisé
@app.route("/tags/<list:tags>")
def show_tags(tags):
    # tags est une liste Python : ["python", "flask", "web"]
    return f"Tags: {', '.join(tags)}"
autres extensions