Endpoints CRUD FastAPI avec Pydantic v2, Alembic et tests pytest
Générez un module FastAPI complet pour une ressource : schémas Pydantic v2, modèle et migration Alembic, routeur CRUD paginé et tests pytest avec httpx. Conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Il comprend 5 variables personnalisables et vous pouvez le copier gratuitement en un clic.
Intermédiaire · Code · En attente de relecture éditoriale
Prompt
Agis comme un développeur backend senior spécialisé en Python, FastAPI et SQLAlchemy.
Je veux ajouter à une API FastAPI existante un module complet pour gérer {{ressource}}.
- Champs et types : {{champs}}
- Règles métier : {{regles}}
- Base de données : {{base_donnees}}
- Accès aux données : {{acces}}
Livrables, dans cet ordre :
1. L’arborescence des fichiers (routeur, schémas, modèle, service ou repository, tests) avec une phrase qui justifie ce découpage.
2. Des schémas Pydantic v2 distincts pour la création, la mise à jour partielle et la réponse, avec des validations (`Field`, `field_validator`, `model_validator`) qui appliquent les règles métier.
3. Le modèle de base de données et sa migration Alembic, avec index et contraintes d’unicité là où c’est pertinent.
4. Un routeur avec liste paginée et filtrable, détail, création, mise à jour partielle (PATCH) et suppression. Utilise les bons codes (201, 204, 404, 409, 422) et un `response_model` sur chaque endpoint.
5. Une session de base injectée avec `Depends`, sans état global, et des transactions bien délimitées.
6. Des tests pytest avec `httpx.AsyncClient` (ou `TestClient` si l’accès est synchrone) : cas nominal, validation, ressource inexistante et conflit avec une règle métier, sur une base de test isolée.
7. Les commandes pour lancer l’application, appliquer la migration et exécuter les tests.
Contraintes :
- Python 3.11 ou plus, entièrement typé, sans dépendance inutile.
- N’invente ni champs ni règles : si quelque chose est ambigu, pose-moi la question avant d’écrire du code ou indique [À COMPLÉTER].
- Signale les décisions qui dépendent du reste de mon projet (authentification, configuration, nommage des tables).
Format : un bloc de code par fichier avec son chemin en titre, puis la liste des hypothèses à la fin.Comment l'utiliser
- Décrivez la ressource avec ses vrais champs et les règles que vous appliquez aujourd’hui à la main.
- Choisissez la base de données et le mode d’accès (SQLAlchemy asynchrone, synchrone ou SQLModel).
- Copiez les fichiers, générez la migration et lancez
pytestavant d’intégrer. - Si votre projet a déjà des conventions de dossiers, collez-les pour que le code les respecte.
Exemple d'utilisation
Ressource : réservations de tables · Champs : client, date et heure, nombre de couverts · Règle : 40 couverts max par créneau · PostgreSQL avec SQLAlchemy asynchrone.
Exemple de résultat
2. Schémas Pydantic v2 — app/reservations/schemas.py
from datetime import datetime, timedelta, timezone
from enum import Enum
from pydantic import BaseModel, Field, field_validator
class StatutReservation(str, Enum):
en_attente = "en_attente"
confirmee = "confirmee"
annulee = "annulee"
class ReservationCreate(BaseModel):
nom_client: str = Field(min_length=1, max_length=120)
telephone: str = Field(pattern=r"^\+?[0-9 ]{7,20}$")
date_heure: datetime
couverts: int = Field(ge=1, le=12)
@field_validator("date_heure")
@classmethod
def dans_la_fenetre(cls, v: datetime) -> datetime:
if v.tzinfo is None:
raise ValueError("la date doit inclure un fuseau horaire")
maintenant = datetime.now(timezone.utc)
if v < maintenant or v > maintenant + timedelta(days=60):
raise ValueError("réservation possible uniquement d’aujourd’hui à J+60")
return v
class ReservationUpdate(BaseModel):
date_heure: datetime | None = None
couverts: int | None = Field(default=None, ge=1, le=12)
statut: StatutReservation | None = None
La règle des 40 couverts par créneau de 30 minutes exige une requête en base : elle n’a donc pas sa place dans le schéma. Le service additionne les couverts du créneau dans la même transaction et renvoie 409 en cas de dépassement.
Hypothèses
- Les créneaux commencent à :00 et :30 → [À COMPLÉTER] si ce n’est pas le cas.
- Le format du téléphone est indicatif…
Informations clés
- Catégorie
- Programmation et développement · Python
- Type de résultat
- Code
- Niveau
- Intermédiaire
- Conçu pour
- ChatGPT, Claude, Gemini et Microsoft Copilot
- Vérifié sur
- En attente de vérification éditoriale
- Variables
- Ressource, Champs et types, Règles métier, Base de données et Accès aux données
- Langue
- Français
- Prix
- Gratuit, sans inscription
- Mis à jour
- 07/11/2026
Questions fréquentes
Pourquoi trois schémas Pydantic pour une seule ressource ?
Création, mise à jour et réponse n’ont pas les mêmes champs : en PATCH tout est optionnel et la réponse contient l’identifiant et les dates. Les séparer évite d’exposer des champs internes.
Où placer les règles métier : dans le schéma ou dans le service ?
Les contrôles de format et de plage vont dans Pydantic. Celles qui exigent une requête en base, comme la capacité d’un créneau, vont dans le service et renvoient 409 en cas de conflit.
Est-ce compatible avec SQLModel ?
Oui. Choisissez SQLModel dans la variable d’accès aux données : le prompt adapte modèles et schémas tout en séparant entrée et sortie.
À quoi sert ce prompt ?
Générez un module FastAPI complet pour une ressource : schémas Pydantic v2, modèle et migration Alembic, routeur CRUD paginé et tests pytest avec httpx.
Avec quels outils d'IA fonctionne-t-il ?
Il est conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Nous ne l'avons pas encore vérifié sur ces outils ; les résultats peuvent donc varier de l'un à l'autre.
Comment personnaliser le prompt ?
Cliquez sur « Personnaliser » et remplissez les variables (Ressource, Champs et types, Règles métier, Base de données et Accès aux données). Le texte se met à jour instantanément et vous pouvez ensuite le copier en un clic. Les valeurs sont stockées uniquement dans votre navigateur.
Faut-il de l'expérience pour l'utiliser ?
Il est de niveau intermédiaire : il vaut mieux connaître le sujet pour fournir un bon contexte et relire le résultat d'un œil critique.
Ce prompt est-il gratuit ?
Oui. Tous les prompts de HomeCasa Prompts sont gratuits, sans inscription ni abonnement. Vous pouvez aussi les utiliser dans des projets professionnels.
Puis-je me fier au résultat de l'IA ?
Considérez-le comme un brouillon de qualité : vérifiez toujours les données, les chiffres et les affirmations importantes avant de publier ou de prendre des décisions.