Le routeur
Le routeur associe chaque URL entrante à un handler de contrôleur. Les routes sont déclarées explicitement dans mvc/routes.py.
Structure de mvc/routes.py
from core.http.router import Router
from mvc.controllers.welcome_controller import WelcomeController
router = Router()
# Groupe public (pas d'authentification requise)
with router.group("", public=True) as pub:
pub.add("GET", "/welcome", WelcomeController.index, name="welcome_index")
pub.add("GET", "/welcome/cycle", WelcomeController.cycle, name="welcome_cycle")
# ... autres routes welcome
# Groupe protégé (authentification requise)
# with router.group("") as app:
# app.add("GET", "/dashboard", ...) ← déclaré par d'autres starters
Routes statiques
pub.add("GET", "/welcome", WelcomeController.index)
URL fixe. Correspond exactement à /welcome.
Routes dynamiques
pub.add("GET", "/contacts/{id}", ContactController.show)
{id} est capturé dans request.route_params["id"].
Groupe avec préfixe
with router.group("/contacts") as g:
g.add("GET", "", ContactController.index) # → /contacts
g.add("GET", "/{id}", ContactController.show) # → /contacts/123
Le préfixe de groupe est concaténé aux chemins des routes.
Principe Forge : toutes les routes sont déclarées dans un seul fichier visible.
Aucune route auto-découverte, aucune convention magique.
Ce que vous lisez dans mvc/routes.py est exactement ce qui est routé.