DocsBasé sur un fichier
Héritage
Plusieurs fichiers dans src/routes/ s'appliquent à tout ce qui se trouve sous leur répertoire. Ils se résolvent tous de la même manière : Nexy commence par le répertoire de l'itinéraire et se dirige vers src/routes/.
| Fichier | Règle |
|---|---|
layout.nexy, layout.tsx, layout.vue, layout.svelte |
chaque mise en page, de la racine à la page, l'enveloppe, le plus à l'extérieur en premier |
middleware.py |
chaque fichier, de la racine à la route, encapsule la requête, le plus externe en premier, avant les dépendances |
dependencies.py |
chaque fichier, de la racine à la route, s'exécute, le plus à l'extérieur en premier, puis les propres gardes du gestionnaire |
notfound.nexy, errors.nexy |
le le plus proche gagne, par code de statut |
Pour la page ci-dessus, les mises en page s'imbriquent sous la forme root layout > (shop) layout > cart layout > page et les dépendances s'exécutent sous la forme root > (shop) > cart > handler guards.
Pourquoi le plus extérieur en premier
Une disposition externe dessine le cadre et une dépendance externe décide qui peut entrer. Les placer en premier signifie que les internes peuvent s'appuyer sur eux : un répertoire qui nécessite une authentification s'exécute avant un gestionnaire qui lit l'utilisateur.
La dépendance (shop) de l'arborescence vérifie le cookie du panier, de sorte que la dépendance du panier en dessous peut lire le panier sans vérifier à nouveau :
from nexy.http import HTTPException, Request def require_cart(request: Request) -> None: if "cart" not in request.cookies: raise HTTPException(status_code=400, detail="No cart") dependencies = [require_cart]Mises en page
Tous les fichiers de mise en page d'une pile de familles de dossiers : voir Mises en page. Les différentes familles ne se mélangent pas : un layout.vue ne enveloppe jamais une page .tsx, et un projet a soit des mises en page layout.nexy, soit des mises en page client, jamais les deux (modes).
La disposition la plus interne de l'arborescence ajoute uniquement son propre cadre : la disposition racine qui l'entoure dessine toujours le document.
children: prop[NexyElement]<section class="cart"> <h2>Your cart</h2> {{ children | safe }}</section>Fichiers middleware
Voir Fichiers Middleware : ils s'exécutent avant les dépendances et peuvent répondre sans atteindre la route.
Une racine middleware.py enveloppe chaque itinéraire de l'arbre, le chariot inclus :
import time from nexy.http import Request async def middleware(request: Request, call_next): start = time.perf_counter() response = await call_next(request) response.headers["x-time-ms"] = f"{(time.perf_counter() - start) * 1000:.1f}" return responseDépendances
Voir Dépendances pour l'ordre dans un fichier de gestionnaire, y compris @UseGuard et @Middleware.
Pages d'erreur
notfound.nexy et errors.nexy sont installés une fois à la racine des routes ; une copie dans un sous-répertoire affine la page pour ce préfixe. Voir Pages d'erreur.
Une copie dans cart/ répond aux 404 sous /cart, et la racine garde le reste :
<h1>This product is gone</h1><p><a href="/cart">Back to your cart</a></p>