DocsComprendre le modèle
Structure du projet
Chaque fichier d'un projet Nexy a une tâche, et sa destination dépend du routeur : src/routes/ pour le routage basé sur les fichiers, src/apps/ pour le routeur modulaire.
Niveau supérieur
nexy new)Pour choisir un dossier, demandez quel est le fichier :
- Quelque chose que le navigateur peut ouvrir - un itinéraire :
src/routes/. - Une pièce utilisée par plusieurs voies - un composant ou un module :
src/components/,src/. - Un dossier servi tel quel -
public/. - Généré -
__nexy__/; ne le modifiez jamais.
nexy new)Pour choisir un dossier, demandez quel est le fichier :
- Une URL - une méthode d'un contrôleur dans
src/apps/, enregistrée par son module. - Une page - une vue
.nexyà côté de son contrôleur, renvoyée avecuseViews. - Une pièce utilisée par plusieurs vues -
src/components/. - Un dossier servi tel quel -
public/. - Généré -
__nexy__/; ne le modifiez jamais.
nexy new)Pour choisir un dossier, demandez quel est le fichier :
- Un itinéraire de l'application incluse - là où elle se trouve déjà, ici
src/legacy/. - Une nouvelle page ou route -
src/routes/, à côté du routeur inclus. - Un dossier servi tel quel -
public/. - Généré -
__nexy__/; ne le modifiez jamais.
src/routes/
Chaque fichier devient une route, à l'exception des noms réservés ci-dessous. Le chemin du fichier moins l'extension est l'URL - voir routage basé sur les fichiers.
| Fichier | Rôle |
|---|---|
layout.nexy |
enveloppe les pages frères et sœurs et enfants |
errors.nexy |
500 pages pour l'annuaire |
notfound.nexy |
Page 404 pour l'annuaire |
dependencies.py |
dépendances FastAPI partagées pour le répertoire |
__init__.py |
Python marqueur de paquet |
loading.nexy |
réservé - exclu des routes, mais cela n'a pas encore d'effet d'exécution |
Chaque nom de page existe également par framework. Avec react() configuré, layout.jsx et layout.tsx sont réservés exactement comme layout.nexy. Les listes sont construites en nexy/core/config.py (LAYOUT_FILE_NAMES, ERROR_FILE_NAMES, NOTFOUND_FILE_NAMES, LOADING_FILE_NAMES).
src/apps/
Un contrôleur répond aux URL, un module regroupe les contrôleurs et les fournisseurs, et le module racine est monté avec useRouter dans nexyconfig.py :
from nexy.decorators import Controllerfrom nexy.hooks import useViews LAYOUT = "src/apps/layout.nexy" @Controller()class AppController: async def get(self): return useViews(LAYOUT, context={"children": useViews("src/apps/app_view.nexy")})from nexy.decorators import Module from .app_controller import AppController @Module()class AppModule: controllers = [AppController]from nexy.core.models import NexyConfigModel from src.apps.app_module import AppModule class NexyConfig(NexyConfigModel): useRouter = AppModule useAliases = {"@": "src"} # the views import @/components/...Aucun fichier dans src/apps/ n'est une route par son nom : seuls les contrôleurs répertoriés par un module répondent. Voir routage modulaire.
public/
Les fichiers ici sont servis depuis la racine du site : /favicon.ico, /robots.txt, images, polices.
__nexy__/
Généré par nx build (et par nx dev pour les pièces dont il a besoin). Il contient :
- les fichiers
.nexycompilés, sous la forme d'un package Python (__nexy__/src/...) ; - les points d'entrée client générés (
main.ts,vite.ts,*.auto.ts) ; client/après une Vite build - actifs, manifeste, HTML pré-rendu ;build-cache.json.
Traitez l'ensemble du répertoire comme jetable : supprimez-le, reconstruisez-le. Le modifier à la main perd la modification lors de la prochaine version. Ajoutez-le à .gitignore.
Prochaines étapes
- Routage basé sur des fichiers : comment un chemin devient une URL
- Routage modulaire : contrôleurs, modules et fournisseurs
- Routage personnalisé : inclure un routeur FastAPI existant
- Configuration : toutes les options du projet
- Frontend : Vite, style et build client