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
@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)}"
# 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)}"