Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file removed bun.lockb
Binary file not shown.
1,406 changes: 881 additions & 525 deletions package-lock.json

Large diffs are not rendered by default.

205 changes: 205 additions & 0 deletions src/app/docs/basics/body-parser/page.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
# Analyseur de Corps de Requête

Nexy fournit une analyse complète du corps des requêtes grâce à <Badge>FastAPI</Badge>. Contrairement aux frameworks traditionnels qui nécessitent une configuration manuelle des analyseurs, Nexy gère intelligemment le contenu des requêtes en fonction des types MIME et de leur structure.

<Mark>
Nexy analyse automatiquement le JSON, les données de formulaire, les fichiers et même les structures imbriquées complexes. Il suffit de définir votre schéma attendu !
</Mark>

---

## Types d'Analyseurs avec Exemples

### Types de Base

#### Chaîne de caractères (str)
<CodeCard fileName="examples/basic/string.py">
<Code language="python" theme="catppuccin-mocha"
code = {
`def GET(nom: str):
return f"Bonjour {nom}"
`}
/>
</CodeCard>

#### Entier (int)
<CodeCard fileName="examples/basic/integer.py">
<Code language="python" theme="catppuccin-mocha"
code = {
`def GET(age: int):
return f"Vous avez {age} ans"
`}
/>
</CodeCard>

#### Nombre à virgule flottante
<CodeCard fileName="examples/basic/float.py">
<Code language="python" theme="catppuccin-mocha"
code = {
`def GET(prix: float):
return f"Le prix est de {prix:.2f}"
`}
/>
</CodeCard>

#### Booléen
<CodeCard fileName="examples/basic/boolean.py">
<Code language="python" theme="catppuccin-mocha"
code = {
`def GET(est_actif: bool):
return {"statut": "actif" if est_actif else "inactif"}
`}
/>
</CodeCard>

### Collections

#### Liste
<CodeCard fileName="examples/collections/list.py">
<Code language="python" theme="catppuccin-mocha"
code = {
`from typing import List

def POST(etiquettes: List[str]):
return {"etiquettes": etiquettes}
`}
/>
</CodeCard>

#### Dictionnaire
<CodeCard fileName="examples/collections/dict.py">
<Code language="python" theme="catppuccin-mocha"
code = {
`from typing import Dict

def POST(metadonnees: Dict[str, str]):
return {"metadonnees": metadonnees}
`}
/>
</CodeCard>

### Types Spéciaux

#### Email
<CodeCard fileName="examples/special/email.py">
<Code language="python" theme="catppuccin-mocha"
code = {
`from pydantic import EmailStr

def POST(email: EmailStr):
return {"email": email}
`}
/>
</CodeCard>

#### UUID
<CodeCard fileName="examples/special/uuid.py">
<Code language="python" theme="catppuccin-mocha"
code = {
`from uuid import UUID

def GET(identifiant: UUID):
return {"identifiant": str(identifiant)}
`}
/>
</CodeCard>

### Types Temporels

#### DateTime
<CodeCard fileName="examples/time/datetime.py">
<Code language="python" theme="catppuccin-mocha"
code = {
`from datetime import datetime

def POST(date_evenement: datetime):
return {"programmé_pour": date_evenement}
`}
/>
</CodeCard>

### Gestion des Fichiers

#### Téléchargement d'un Fichier
<CodeCard fileName="examples/files/single.py">
<Code language="python" theme="catppuccin-mocha"
code = {
`from fastapi import UploadFile

def POST(fichier: UploadFile):
return {"nom_fichier": fichier.filename}
`}
/>
</CodeCard>

#### Fichiers Multiples
<CodeCard fileName="examples/files/multiple.py">
<Code language="python" theme="catppuccin-mocha"
code = {
`from typing import List
from fastapi import UploadFile

def POST(fichiers: List[UploadFile]):
return {"fichiers": [f.filename for f in fichiers]}
`}
/>
</CodeCard>

### Données de Formulaire

#### Formulaire Simple
<CodeCard fileName="examples/form/simple.py">
<Code language="python" theme="catppuccin-mocha"
code = {
`from fastapi import Form
from typing import Annotated

def POST(nom_utilisateur: Annotated[str, Form()]):
return {"nom_utilisateur": nom_utilisateur}
`}
/>
</CodeCard>

### Métadonnées de Requête

#### En-têtes
<CodeCard fileName="examples/metadata/headers.py">
<Code language="python" theme="catppuccin-mocha"
code = {
`from fastapi import Header
from typing import Annotated

def GET(agent_utilisateur: Annotated[str, Header()]):
return {"agent_utilisateur": agent_utilisateur}
`}
/>
</CodeCard>

#### Cookies
<CodeCard fileName="examples/metadata/cookies.py">
<Code language="python" theme="catppuccin-mocha"
code = {
`from fastapi import Cookie
from typing import Annotated

def GET(session: Annotated[str, Cookie()]):
return {"session": session}
`}
/>
</CodeCard>

---


Le système d'analyse de Nexy est puissant tout en restant simple à utiliser - définissez simplement votre structure de données et laissez Nexy s'occuper du reste !
pour d'informations sur les types d'analyseurs, veuillez vous référer à la documentation de <MDXLink href="https://fastapi.tiangolo.com/tutorial/body/#create-your-data-model">FastAPI</MDXLink>
<SwitchPage
prev = { {
label: "Réponse",
href: "/basics/response"
}}
next ={ {
label: "Validation",
href: "/basics/validation/"
}}
/>
13 changes: 0 additions & 13 deletions src/app/docs/basics/controllers/main.py

This file was deleted.

8 changes: 4 additions & 4 deletions src/app/docs/basics/controllers/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -286,12 +286,12 @@ Maintenant que vous avez appris à propos des contrôleurs et des endpoints, vou
Découvrons comment faire cela dans la section suivante.
<SwitchPage
prev = { {
label: "Guidee de contruction",
href: "/started/"
label: "Structure",
href: "/started/structure"
}}
next ={ {
label: "Installation",
href: "/started/"
label: "Request",
href: "/basics/request"
}}

/>
12 changes: 6 additions & 6 deletions src/app/docs/basics/response/page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ async def generate_data():
"""Génère des données en flux"""
for i in range(10):
data = {"item": i, "timestamp": f"2024-{i:02d}-01"}
yield f"data: {json.dumps(data)}\n\n"
yield f"data: {json.dumps(data)}"
await asyncio.sleep(0.5)

def GET() -> StreamingResponse:
Expand All @@ -191,9 +191,9 @@ code = {
async def GET():
"""Streaming d'un gros fichier CSV"""
def generate_csv():
yield "nom,email,age\n"
yield "nom,email,age"
for i in range(1000):
yield f"User{i},user{i}@example.com,{20+i%50}\n"
yield f"User{i},user{i}@example.com,{20+i%50}"

return StreamingResponse(generate_csv(), media_type="text/csv")
`
Expand Down Expand Up @@ -457,7 +457,7 @@ code = {
def GET():
"""Réponse avec contenu binaire"""
# Exemple : générer une image simple ou des données binaires
binary_data = b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR..." # Example
binary_data = b"\x89PNG\x1a\x00\x00\x00IHDR..." # Example

return Response(
content=binary_data,
Expand All @@ -480,10 +480,10 @@ Vous maîtrisez maintenant toutes les façons de créer et personnaliser des ré
<SwitchPage
prev = { {
label: "Request",
href: "/docs/basics/request/"
href: "/basics/request"
}}
next ={ {
label: "Dépendances",
href: "/docs/basics/dependencies/"
href: "/basics/dependencies/"
}}
/>
Loading