Aller au contenu

Bonjour Forge

Accueil Retour

Premier contact avec Forge : du chemin le plus court entre une requête
HTTP et une réponse texte. Sans base de données. Sans entité. Sans
template Jinja2. Sans CRUD.

Ce parcours suit l'ordre pédagogique du starter d'entrée
Bonjour Forge :

forge run → route → contrôleur → Request → Response.text(...)

Forge n'est pas encore installé ?

Commencez par le parcours d'installation :
VM Debian vierge,
poste Linux (pipx),
depuis GitHub,
Windows + WSL (parcours complet).


1. Lancer Forge avec forge run

Une fois Forge installé et un projet créé (forge new mon-projet), la
commande officielle de développement est :

forge run

forge run lit APP_ENV (défaut dev), démarre le serveur de
développement et active l'autoreload : python app.py est redémarré
automatiquement dès qu'un fichier applicatif change. Pour désactiver
l'autoreload (chemin legacy) :

forge run --no-reload

En production (APP_ENV=prod), forge run refuse de démarrer le
serveur intégré et affiche la stratégie WSGI recommandée, voir
Déploiement WSGI minimal.

Une fois le serveur démarré, ouvrez https://localhost:8000/welcome
dans votre navigateur.


2. Comprendre la route

Toutes les routes Forge sont déclarées explicitement dans
mvc/routes.py. Aucune découverte automatique, aucune convention
cachée :

# mvc/routes.py
from mvc.controllers.welcome_controller import WelcomeController

with router.group("", public=True) as public:
    public.add("GET", "/welcome",       WelcomeController.index, name="welcome-index")
    public.add("GET", "/welcome/greet", WelcomeController.greet, name="welcome-greet")

Chaque ligne associe une méthode HTTP et un chemin à une méthode de
contrôleur. Ce qui est dans mvc/routes.py est exactement ce qui est
routé.


3. Comprendre le contrôleur

Un contrôleur Forge est une classe Python qui reçoit une Request et
retourne une Response. Les méthodes sont statiques, typées et
explicites :

from core.http.request import Request
from core.http.response import Response
from core.mvc.controller.base_controller import BaseController


class WelcomeController(BaseController):
    @staticmethod
    def index(request: Request) -> Response:
        ...

Les annotations request: Request -> Response sont systématiques pour
que Pylance/VS Code propose l'autocomplétion sur request.query(...),
request.form(...), request.json(...), request.file(...),
request.route(...) et request.header(...) sans import manuel.
Voir Convention HTTP inspectable.


4. Retourner Response.text("Bonjour Forge")

La méthode la plus courte : aucun template, aucun moteur Jinja2.

@staticmethod
def index(request: Request) -> Response:
    return Response.text("Bonjour Forge")

Response.text(...) produit une réponse text/plain; charset=utf-8.
Le navigateur sur /welcome affiche simplement :

Bonjour Forge

Le cycle complet est minimal :

Navigateur → GET /welcome → Router → WelcomeController.index(request) → Response.text(...)

5. Utiliser request.query(...)

request.query("name", default="Forge") retourne la première valeur
du paramètre ?name=..., ou la valeur par défaut.

@staticmethod
def greet(request: Request) -> Response:
    name = request.query("name", default="Forge")
    return Response.text(f"Bonjour {name}")
  • https://localhost:8000/welcome/greet?name=RogerBonjour Roger
  • https://localhost:8000/welcome/greetBonjour Forge

D'autres accesseurs nommés couvrent les autres canaux d'entrée :

Accesseur Lit Retourne
request.query(key, default=None) query string str ou default
request.form(key, default=None) formulaire application/x-www-form-urlencoded str ou default
request.json(key, default=None) body JSON valeur JSON ou default
request.header(name, default=None) en-têtes HTTP (insensible à la casse) str ou default
request.route(key, default=None) paramètres dynamiques (/contacts/{id}) str ou default
request.file(key, default=None) upload multipart/form-data UploadedFile ou default

Récapitulatif des outils livrés

Cette progression met en jeu les briques DX livrées depuis la phase beta 11 :

Brique Rôle
forge run Point d'entrée officiel, autoreload par défaut en dev
Request inspectable Accesseurs nommés (param, form, json, header, …)
Response.text(...) Réponse text/plain; charset=utf-8
Response.html(...) Réponse text/html; charset=utf-8
Response.json(...) Réponse application/json; charset=utf-8
Squelettes typés request: Request -> Response partout par défaut
Starter welcome (Bonjour Forge) Parcours d'entrée sans BDD ni template

Aller plus loin

Une fois ce premier contact assimilé :

Étape Ressource
Progression officielle des starters Progression recommandée
Démarrer un projet réel Démarrer avec Forge
Parcours guidé avec MariaDB Guide de démarrage
Première application complète Application complète
Catalogue des starters Vue d'ensemble des starters
Détails du starter welcome Bonjour Forge, starter
Référence HTTP complète Convention HTTP inspectable
Toutes les commandes CLI Commandes CLI

Ne sautez pas directement vers le CRUD Contacts

Le starter Contacts CRUD est l'étape 9 d'une progression de
neuf paliers. Plusieurs notions intermédiaires (vue Jinja2, route
dynamique, formulaire POST, validation, SQL) méritent leurs propres
starters, voir la
progression recommandée.


Voir aussi