Home Recent changes

turbogears/url_routing

URL Routing

Le routing des URLs se fait au travers des Controllers (bien la preuve que les urls sont des controleurs…)

TGController

La base

C'est le controleur "par défaut" de turbogears. On créé un controlleur pour l'application en le faisant hériter de TGController. Par exemple :

class MonController(TGController):

Ensuite, chaques méthode sera exposée comme une url:

class MonController(TGController):

    def home(self):
        return "Hello here"

ou

class MonController(TGController):

    @expose('myapp.templates.home')
    def home(self):
        return {'message': 'Hello here'}

BaseController

Un contrôleur fournis par Turbogears utilisé à la racine d'un site pour le mapping d'url.

RootController(BaseController):

j'ai vu du code avec le décorateur et du code sans le décorateur.

 Avec le décorateur on spécifie un template dans le décorateur et on renvoie  un dictionnaire.
 Sans le décorateur j'ai vu des dico et des strings... bref, c'est pas très clair.
 Dans le doute et tant que je n'en sais pas plus, on va dire ceci : le  décorateur est obligatoire sur les méthodes que l'on expose (ça se tiens bien je trouve)

@expose

le contenu de "expose" indique quel template retourner. Par exemple:

'wiki20.templates.index'

ce qui va coresspondre à :

wiki20/ (le projet) / templates (le dossier de templates) / index.html (le fichier)

comme on le vois le ".html" est omis.

Le dictionnaire retourné est ensuite utilisé par le template.

Les méthodes spéciales

index

Cette méthode permet de définir la racine d'une application. le code de la fonction va être appelé via site/ et via site/index

_default

Quand aucune URL ne match avec une méthode, c'est cette méthode qui est appelée.

Traversing

Le système de routing commence par le fichier "<app>/controllers/root.py" via la class RootController.

La class RootController hérite de BaseController un controleur fournis par turbogears. Elle définis d'autres controleurs dont je ne connais pas encore l'utilité : SecureController(), AdminController (même si j'ai bien une petite idée)