Outils pour utilisateurs

Outils du site


dev:frameworks:pyramid:routage

Routage avec Pyramid

Deux principales techno pour le routage

  • URLDispatch
  • Traversal

URLdispatch

A une route on associe un ou plusieurs motifs intégrant des parties constantes (chaînes littérales) et des variables (marqueurs). Lorsqu'il y a correspondance entre l'URL de la requête et le motif, la route est utilisée. Les motifs sont évalués séquentiellement et leur ordre de déclaration est donc important.

  • Le motif commence toujours par '/' même s'il n'est pas explicite . Ainsi 'motif/A' est équivalent à '/motif/A'.
  • Le motif est composé de segments. Le caractère slash sert de séparateur de segments. Un segment est littéral (constant) ou variable. Dans ce second cas il est représenté par un marqueur (entre crochets). Les expressions régulières peuvent être employées pour spécifier les condition de correspondance de chaque marqueur.
Motifs URL correspondant URL rejetée
/home /home /home/
/books/{id}.txt /books/142.txt; /books/ravage.txt /books/142
/books/{id:\d+}.txt /books/142.txt /books/ravage.txt

Lorsqu'une correspondance est établie sur une URL, les objets suivants sont attachés en attributs à l'objet de type pyramid.request.Request:

  • matched_route de type IRoute

Génération d'URLs

Pour générer les URLs correspondant aux motifs des routes déclarées, utiliser la méthode pyramid.request.Request.route_url()

La méthode retourne une chaîne de la forme http://example.com/route/v1/v2

Pour générer uniquement la partie chemin de l'URL utiliser la méthode pyramid.request.Request.route_path()

Routes statiques

Les routes peuvent être déclarées avec un argument static. Lorsque l'argument static est vrai, la route déclarée n'est pas prise en compte lors de la recherche de correspondance (matching) de la requête. En revanche elles sont très utiles pour la génération d'URL:

Ce comportement peut être testé en mode interactif:

>>> from pyramid import testing
 
>>> conf = testing.setUp()
>>> conf.add_route('page', '/page/{action}', static=True)
>>> request = testing.DummyRequest()
 
>>> request.route_url('page', action='about')
'http://example.com/page/about'

Routes externes

dev/frameworks/pyramid/routage.txt · Dernière modification : 2021/02/01 21:51 de 127.0.0.1