Le SQL de consultation¶
Objectif : voir le SQL de lecture filtrable des événements.
Ce que vous allez apprendre : get_stats_events_admin_sql construit un SELECT
filtrable (nom, catégorie, limite) ; prepare_stats_events_admin_params fournit ses
paramètres liés. SQL visible, filtres paramétrés.
Premier palier du niveau avancé de la progression stats.
Module opt-in
Ce starter suppose forge-mvc-stats installé (palier « Installation »).
Ce que ce starter montre¶
- un filtre optionnel par catégorie ;
get_stats_events_admin_sql→ leSELECT;prepare_stats_events_admin_params→ ses paramètres.
Classes Forge utilisées¶
| Classe / fonction | Rôle dans ce starter | Référence |
|---|---|---|
forge_mvc_stats.get_stats_events_admin_sql |
Le SELECT filtrable. |
Stats |
forge_mvc_stats.prepare_stats_events_admin_params |
Les paramètres du SELECT. |
Stats |
Tester¶
Ouvrez https://localhost:8000/stats-admin-sql?category=navigation : le SELECT adapté.
Le contrôleur¶
# mvc/controllers/stats_admin_sql_controller.py
from core.http.request import Request
from core.http.response import Response
from core.mvc.controller.base_controller import BaseController
from forge_mvc_stats import get_stats_events_admin_sql, prepare_stats_events_admin_params
class StatsAdminSqlController(BaseController):
@staticmethod
def index(request: Request) -> Response:
category = request.query("category") or None
return BaseController.render(
"stats_admin_sql/index.html",
context={
"category": category or "(toutes)",
"sql": get_stats_events_admin_sql(category=category, limit=20),
"params": list(prepare_stats_events_admin_params(category=category, limit=20)),
},
request=request,
)
Comprendre ce code¶
- Le SQL s'adapte aux filtres fournis (nom, catégorie) tout en restant paramétré.
- Voir le
SELECTavant de l'exécuter garde le comportement transparent (SQL visible). - La limite protège contre les lectures non bornées.
La vue¶
<!-- mvc/views/stats_admin_sql/index.html -->
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Le SQL de consultation — Forge</title>
</head>
<body>
<h1>Le SQL de consultation</h1>
<form method="get" action="/stats-admin-sql">
<label>Catégorie (optionnel) <input type="text" name="category"></label>
<button type="submit">Construire le SELECT</button>
</form>
<p>Catégorie filtrée : <code>{{ category }}</code></p>
<p>Requête <code>SELECT</code> (SQL visible) :</p>
<pre><code>{{ sql }}</code></pre>
<p>Paramètres :</p>
<ul>{% for param in params %}<li><code>{{ param }}</code></li>{% endfor %}</ul>
<p>Le SQL s'adapte aux filtres fournis, toujours en requête paramétrée.</p>
</body>
</html>
La route¶
Dans mvc/routes.py, ajoutez l'import en tête de fichier et la route dans le groupe public.
# mvc/routes.py
from mvc.controllers.stats_admin_sql_controller import StatsAdminSqlController
with router.group("", public=True) as public:
public.add("GET", "/stats-admin-sql", StatsAdminSqlController.index, name="stats_admin_sql_index")
À retenir¶
get_stats_events_admin_sql+ params = leSELECTfiltrable, sans exécuter.- Filtres paramétrés, limite par défaut.
- SQL visible aussi en lecture.
Après ce starter¶
La suite : exécuter cette lecture et obtenir des événements.