Cela fonctionne grĂące Ă **Pydantic**, qui offre une [prise en charge interne des `dataclasses`](https://docs.pydantic.dev/latest/concepts/dataclasses/#use-of-stdlib-dataclasses-with-basemodel).
C'est toujours pris en charge grĂące Ă **Pydantic**, qui offre une [prise en charge interne des `dataclasses`](https://docs.pydantic.dev/latest/concepts/dataclasses/#use-of-stdlib-dataclasses-with-basemodel).
Ainsi, mĂȘme avec le code ciâdessus qui n'emploie pas explicitement Pydantic, FastAPI utilise Pydantic pour convertir ces dataclasses standard en la variante de dataclasses de Pydantic.
Ainsi, mĂȘme avec le code ciâdessus qui n'emploie pas explicitement Pydantic, FastAPI utilise Pydantic pour convertir ces dataclasses standard en la variante de dataclasses de Pydantic.
# Inclure WSGI - Flask, Django, autres { #including-wsgi-flask-django-others }
# Inclure WSGI - Flask, Django, autres { #including-wsgi-flask-django-others }
Vous pouvez monter des applications WSGI comme vous l'avez vu avec [Sous-applications - Montages](sub-applications.md), [DerriĂšre un proxy](behind-a-proxy.md).
Vous pouvez monter des applications WSGI comme vous l'avez vu avec [Sous-applications - Montages](sub-applications.md), [DerriĂšre un proxy](behind-a-proxy.md).
Pour cela, vous pouvez utiliser `WSGIMiddleware` et l'utiliser pour envelopper votre application WSGI, par exemple Flask, Django, etc.
Pour cela, vous pouvez utiliser `WSGIMiddleware` et l'utiliser pour envelopper votre application WSGI, par exemple Flask, Django, etc.
Vous amenez votre crush đ dans votre fast food đ favori, et faites la queue pendant que le serveur đ prend les commandes des personnes devant vous.
Vous allez avec votre crush chercher de la nourriture dans un fast food, vous faites la queue pendant que le caissier prend les commandes des personnes devant vous. đ
Mais ensuite, mĂȘme si vous n'avez pas encore vos burgers đ, votre travail avec le serveur đ est « en pause » âž, car vous devez attendre đ que vos burgers soient prĂȘts.
Mais ensuite, mĂȘme si vous n'avez toujours pas vos burgers, votre travail avec le caissier est « en pause » âž, car vous devez attendre đ que vos burgers soient prĂȘts.
Vous attendez donc que votre crush đ finisse son histoire, souriez gentiment et dites que vous allez chercher les burgers âž.
Vous attendez donc que votre crush finisse son histoire (termine le travail actuel ⯠/ la tĂąche en cours de traitement đ€), souriez gentiment et dites que vous allez chercher les burgers âž.
Vous allez avec votre crush chercher de la nourriture dans un fast food parallĂšle.
Vous attendez pendant que plusieurs (disons 8) serveurs qui sont aussi des cuisiniers đšâđłđšâđłđšâđłđšâđłđšâđłđšâđłđšâđłđšâđł prennent les commandes des personnes devant vous.
Vous attendez pendant que plusieurs (disons 8) caissiers qui sont en mĂȘme temps cuisiniers prennent les commandes des personnes devant vous.
Le fast-food a 8 processeurs (serveurs/cuisiniers) đšâđłđšâđłđšâđłđšâđłđšâđłđšâđłđšâđłđšâđł. Alors que le fast-food de burgers concurrents en avait 2 (un serveur et un cuisinier).
Le fast food a 8 processeurs (caissiers/cuisiniers). Alors que le fast food de burgers concurrents aurait pu n'en avoir que 2 (un caissier et un cuisinier).
Vous pourriez avoir des tours comme dans l'exemple des burgers, d'abord le salon, puis la cuisine, mais comme vous n'attendez đ rien, vous ne faites que nettoyer et nettoyer, les tours ne changeraient rien.
Mais dans ce cas, si pouviez amener 8 ex-serveurs/cuisiniers/devenus-nettoyeurs đšâđłđšâđłđšâđłđšâđłđšâđłđšâđłđšâđłđšâđł, et que chacun d'eux (plus vous) pouvait prendre une zone de la maison pour la nettoyer, vous pourriez faire tout le travail en parallĂšle, et finir plus tĂŽt.
Si vous avez de bonnes connaissances techniques (coroutines, threads, code bloquant, etc.) et ĂȘtes curieux de comment **FastAPI** gĂšre `async def` versus le `def` classique, cette partie est faite pour vous.
Si vous avez de bonnes connaissances techniques (coroutines, threads, code bloquant, etc.) et ĂȘtes curieux de comment FastAPI gĂšre `async def` versus le `def` classique, cette partie est faite pour vous.
///
///
### Fonctions de chemin d'accĂšs { #path-operation-functions }
### Fonctions de chemin d'accĂšs { #path-operation-functions }
Vous pouvez en lire davantage dans la [documentation Docker sur les formes shell et exec](https://docs.docker.com/reference/dockerfile/#shell-and-exec-form).
Vous pouvez en lire davantage dans la [documentation Docker sur les formes shell et exec](https://docs.docker.com/reference/dockerfile/#shell-and-exec-form).
Vous obtiendriez probablement un serveur cloud (une machine virtuelle) ou quelque chose de similaire, et il aurait une adresse IP publique <dfntitle="Ne change pas dans le temps. Pas dynamique.">fixe</dfn>.
Vous obtiendriez probablement un serveur cloud (une machine virtuelle) ou quelque chose de similaire, et il aurait une **adresse IP publique**<dfntitle="Ne change pas dans le temps. Pas dynamique.">fixe</dfn>.
Dans le ou les serveurs DNS, vous configureriez un enregistrement (un « `A record` ») pour faire pointer **votre domaine** vers l'**adresse IP publique de votre serveur**.
Dans le ou les serveurs DNS, vous configureriez un enregistrement (un « `A record` ») pour faire pointer **votre domaine** vers l'**adresse IP publique de votre serveur**.
Si vous acceptez de mettre Ă jour la variable d'environnement `PATH`, l'installateur ajoutera `/opt/custompython/bin` Ă la variable d'environnement `PATH`.
Si vous acceptez de mettre Ă jour la variable d'environnement `PATH`, l'installateur ajoutera `/opt/custompython/bin` Ă la variable d'environnement `PATH`.
@ -17,7 +17,7 @@ Documentation d'API interactive et interfaces web d'exploration. Comme le framew
* [**Swagger UI**](https://github.com/swagger-api/swagger-ui), avec exploration interactive, appelez et testez votre API directement depuis le navigateur.
* [**Swagger UI**](https://github.com/swagger-api/swagger-ui), avec exploration interactive, appelez et testez votre API directement depuis le navigateur.
## Autres paramĂštres de Swagger UI { #other-swagger-ui-parameters }
## Autres paramĂštres de Swagger UI { #other-swagger-ui-parameters }
Pour voir toutes les autres configurations possibles que vous pouvez utiliser, lisez les [documents officiels pour les paramĂštres de Swagger UI](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/).
Pour voir toutes les autres configurations possibles que vous pouvez utiliser, lisez les documents officiels [pour les paramĂštres de Swagger UI](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/).
Vous pouvez donc mettre Ă niveau Pydantic vers la derniĂšre version 2 et modifier les imports pour utiliser le sous-module `pydantic.v1`, et dans de nombreux cas cela fonctionnera tel quel.
Vous pouvez donc mettre Ă niveau Pydantic vers la derniĂšre version 2 et modifier les imports pour utiliser le sous-module `pydantic.v1`, et dans de nombreux cas cela fonctionnera tel quel.
* **Rapide** : trĂšs hautes performances, au niveau de **NodeJS** et **Go** (grĂące Ă Starlette et Pydantic). [L'un des frameworks Python les plus rapides](#performance).
* **Rapide** : trĂšs hautes performances, au niveau de **NodeJS** et **Go** (grĂące Ă Starlette et Pydantic). [L'un des frameworks Python les plus rapides](#performance).
Dans cet exemple, nous passons `Union[PlaneItem, CarItem]` comme valeur de l'argument `response_model`.
Dans cet exemple, nous passons `Union[PlaneItem, CarItem]` comme valeur de l'argument `response_model`.
Comme nous le passons comme valeur d'un argument au lieu de l'utiliser dans une annotation de type, nous devons utiliser `Union` mĂȘme en Python 3.10.
Comme nous le passons comme **valeur Ă un argument** au lieu de l'utiliser dans une **annotation de type**, nous devons utiliser `Union` mĂȘme en Python 3.10.
S'il s'agissait d'une annotation de type, nous pourrions utiliser la barre verticale, comme :
S'il s'agissait d'une annotation de type, nous pourrions utiliser la barre verticale, comme:
ou n'importe quelle autre variation de casse (tout en majuscules, uniquement la premiĂšre lettre en majuscule, etc.), votre fonction verra le paramĂštre `short` avec une valeur `bool` Ă `True`. Sinon la valeur sera Ă `False`.
ou n'importe quelle autre variation de casse (tout en majuscules, uniquement la premiĂšre lettre en majuscule, etc.), votre fonction verra le paramĂštre `short` avec une valeur `bool` Ă `True`. Sinon la valeur sera Ă `False`.
## Multiples paramĂštres de chemin et de requĂȘte { #multiple-path-and-query-parameters }
## Multiples paramĂštres de chemin et de requĂȘte { #multiple-path-and-query-parameters }
Comme Swagger UI ne prenait pas en charge plusieurs exemples JSON Schema (au 2023-08-26), les utilisateurs n'avaient pas de moyen d'afficher plusieurs exemples dans les documents.
Maintenant, comme Swagger UI ne prenait pas en charge plusieurs exemples JSON Schema (au 2023-08-26), les utilisateurs n'avaient pas de moyen d'afficher plusieurs exemples dans les documents.
Vous pouvez en apprendre beaucoup plus dans la documentation**SQLModel**, il y a un mini [tutoriel plus long sur l'utilisation de SQLModel avec **FastAPI**](https://sqlmodel.tiangolo.com/tutorial/fastapi/). đ
Vous pouvez en apprendre beaucoup plus dans les documents de**SQLModel**, il y a un mini [tutoriel plus long sur l'utilisation de SQLModel avec **FastAPI**](https://sqlmodel.tiangolo.com/tutorial/fastapi/). đ
Cette page vous apprendra Ă utiliser les environnements virtuels et Ă comprendre leur fonctionnement.
Cette page vous apprendra Ă utiliser les **environnements virtuels** et Ă comprendre leur fonctionnement.
Si vous ĂȘtes prĂȘt Ă adopter un outil qui gĂšre tout pour vous (y compris lâinstallation de Python), essayez [uv](https://github.com/astral-sh/uv).
Si vous ĂȘtes prĂȘt Ă adopter un **outil qui gĂšre tout** pour vous (y compris lâinstallation de Python), essayez [uv](https://github.com/astral-sh/uv).
Mais maintenant, le problĂšme est que, si vous installez les packages globalement (dans lâenvironnement global) au lieu de dans un environnement virtuel local, vous devrez choisir quelle version de `harry` installer.
Mais maintenant, le problĂšme est que, si vous installez les packages globalement (dans lâenvironnement global) au lieu de dans un **environnement virtuel** local, vous devrez choisir quelle version de `harry` installer.
@ -778,9 +778,9 @@ Ainsi, vous pouvez confirmer si vous ĂȘtes dans le bon environnement virtuel.
/// tip | Astuce
/// tip | Astuce
Il est facile dâactiver un environnement virtuel, dâobtenir un Python, puis dâaller vers un autre projet.
Il est facile dâactiver un environnement virtuel, dâobtenir un Python, puis dâ**aller vers un autre projet**.
Et le second projet ne fonctionnerait pas parce que vous utilisez le Python incorrect, provenant dâun environnement virtuel dâun autre projet.
Et le second projet **ne fonctionnerait pas** parce que vous utilisez le **Python incorrect**, provenant dâun environnement virtuel dâun autre projet.
Par exemple, vous pourriez travailler sur un projet `philosophers-stone`, activer cet environnement virtuel, installer des packages et travailler avec cet environnement.
Par exemple, vous pourriez travailler sur un projet `philosophers-stone`, **activer cet environnement virtuel**, installer des packages et travailler avec cet environnement.
Puis vous souhaitez travailler sur un autre projet `prisoner-of-azkaban`.
Puis vous souhaitez travailler sur **un autre projet**`prisoner-of-azkaban`.
Vous allez vers ce projet :
Vous allez vers ce projet :
@ -842,23 +842,23 @@ I solemnly swear đș
## Alternatives { #alternatives }
## Alternatives { #alternatives }
Ceci est un guide simple pour vous lancer et vous montrer comment tout fonctionne en dessous.
Ceci est un guide simple pour vous lancer et vous montrer comment tout fonctionne **en dessous**.