]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Update translations for fr (update-outdated) (#15897)
authorSebastiĂĄn RamĂ­rez <tiangolo@gmail.com>
Wed, 1 Jul 2026 14:06:27 +0000 (16:06 +0200)
committerGitHub <noreply@github.com>
Wed, 1 Jul 2026 14:06:27 +0000 (14:06 +0000)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
60 files changed:
docs/fr/docs/_llm-test.md
docs/fr/docs/advanced/additional-status-codes.md
docs/fr/docs/advanced/advanced-dependencies.md
docs/fr/docs/advanced/dataclasses.md
docs/fr/docs/advanced/events.md
docs/fr/docs/advanced/generate-clients.md
docs/fr/docs/advanced/json-base64-bytes.md
docs/fr/docs/advanced/openapi-callbacks.md
docs/fr/docs/advanced/response-change-status-code.md
docs/fr/docs/advanced/response-cookies.md
docs/fr/docs/advanced/response-headers.md
docs/fr/docs/advanced/security/oauth2-scopes.md
docs/fr/docs/advanced/settings.md
docs/fr/docs/advanced/stream-data.md
docs/fr/docs/advanced/wsgi.md
docs/fr/docs/alternatives.md
docs/fr/docs/async.md
docs/fr/docs/deployment/cloud.md
docs/fr/docs/deployment/concepts.md
docs/fr/docs/deployment/docker.md
docs/fr/docs/deployment/https.md
docs/fr/docs/deployment/manually.md
docs/fr/docs/editor-support.md
docs/fr/docs/environment-variables.md
docs/fr/docs/features.md
docs/fr/docs/help-fastapi.md
docs/fr/docs/how-to/configure-swagger-ui.md
docs/fr/docs/how-to/custom-request-and-route.md
docs/fr/docs/how-to/graphql.md
docs/fr/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
docs/fr/docs/how-to/separate-openapi-schemas.md
docs/fr/docs/index.md
docs/fr/docs/project-generation.md
docs/fr/docs/python-types.md
docs/fr/docs/tutorial/bigger-applications.md
docs/fr/docs/tutorial/body-nested-models.md
docs/fr/docs/tutorial/body.md
docs/fr/docs/tutorial/debugging.md
docs/fr/docs/tutorial/dependencies/dependencies-with-yield.md
docs/fr/docs/tutorial/extra-data-types.md
docs/fr/docs/tutorial/extra-models.md
docs/fr/docs/tutorial/first-steps.md
docs/fr/docs/tutorial/handling-errors.md
docs/fr/docs/tutorial/index.md
docs/fr/docs/tutorial/metadata.md
docs/fr/docs/tutorial/path-operation-configuration.md
docs/fr/docs/tutorial/query-params-str-validations.md
docs/fr/docs/tutorial/query-params.md
docs/fr/docs/tutorial/request-files.md
docs/fr/docs/tutorial/request-forms.md
docs/fr/docs/tutorial/response-status-code.md
docs/fr/docs/tutorial/schema-extra-example.md
docs/fr/docs/tutorial/security/first-steps.md
docs/fr/docs/tutorial/security/get-current-user.md
docs/fr/docs/tutorial/security/oauth2-jwt.md
docs/fr/docs/tutorial/security/simple-oauth2.md
docs/fr/docs/tutorial/sql-databases.md
docs/fr/docs/tutorial/static-files.md
docs/fr/docs/tutorial/testing.md
docs/fr/docs/virtual-environments.md

index 9ee61126e63f0c1b7f87a4ca75e135a3255b0fe0..02092c89ddfbb04b7d2cdddc600bce881f494a07 100644 (file)
@@ -148,7 +148,7 @@ Du texte
 
 //// tab | Info
 
-Les onglets et les blocs Â« Info Â»/« Note Â»/« Warning Â»/etc. doivent avoir la traduction de leur titre ajoutĂ©e aprĂšs une barre verticale (« | Â»).
+Les onglets et les blocs Â« Info Â»/« Note Â»/« Warning Â»/etc. doivent avoir la traduction de leur titre ajoutĂ©e aprĂšs une barre verticale (`|`).
 
 Voir les sections `### Special blocks` et `### Tab blocks` dans l’invite gĂ©nĂ©rale dans `scripts/translate.py`.
 
index 59e8c3eae9ce9bc4e3fd2655faa0d5bcb6529411..5d50666f5c2ff371988c0f5b78da68fdcedc9254 100644 (file)
@@ -1,6 +1,6 @@
 # Codes HTTP supplĂ©mentaires { #additional-status-codes }
 
-Par dĂ©faut, **FastAPI** renverra les rĂ©ponses Ă  l'aide d'une structure de donnĂ©es `JSONResponse`, en plaçant la rĂ©ponse de votre  *chemin d'accĂšs* Ă  l'intĂ©rieur de cette `JSONResponse`.
+Par dĂ©faut, **FastAPI** renverra les rĂ©ponses en utilisant une `JSONResponse`, en plaçant le contenu que vous renvoyez depuis votre *chemin d'accĂšs* Ă  l'intĂ©rieur de cette `JSONResponse`.
 
 Il utilisera le code HTTP par dĂ©faut ou celui que vous avez dĂ©fini dans votre *chemin d'accĂšs*.
 
index 4ff72581c5cf23ed67e5a092fac562f2804355fb..e0003552d881eafb82f7bb179ea82d8531314772 100644 (file)
@@ -36,7 +36,7 @@ Nous pouvons crĂ©er une instance de cette classe avec :
 
 {* ../../docs_src/dependencies/tutorial011_an_py310.py hl[18] *}
 
-Et de cette façon, nous pouvons Â« paramĂ©trer Â» notre dĂ©pendance, qui contient maintenant Â« bar Â», en tant qu’attribut `checker.fixed_content`.
+Et de cette façon, nous pouvons Â« paramĂ©trer Â» notre dĂ©pendance, qui contient maintenant `"bar"`, en tant qu’attribut `checker.fixed_content`.
 
 ## Utiliser l'instance comme dĂ©pendance { #use-the-instance-as-a-dependency }
 
index 057e49df28aaa288b4ff1b4805470d74575d466b..01d136910b9bd781464e492849f8c40a547e2036 100644 (file)
@@ -6,7 +6,7 @@ Mais FastAPI prend aussi en charge l'utilisation de [`dataclasses`](https://docs
 
 {* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *}
 
-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.
 
@@ -20,7 +20,7 @@ Cela fonctionne de la mĂȘme maniĂšre qu'avec les modĂšles Pydantic. Et, en rĂ©al
 
 /// note | Remarque
 
-Gardez Ă  l'esprit que les dataclasses ne peuvent pas tout ce que peuvent faire les modĂšles Pydantic.
+Gardez Ă  l'esprit que les dataclasses ne peuvent pas faire tout ce que peuvent faire les modĂšles Pydantic.
 
 Vous pourriez donc avoir encore besoin d'utiliser des modĂšles Pydantic.
 
index 5b90c7b2e8f8f812a605023d9014f277edf5793f..4ab1752393bd9086d3ee61885fb3e49cfcb2730f 100644 (file)
@@ -102,7 +102,7 @@ Ces fonctions peuvent ĂȘtre dĂ©clarĂ©es avec `async def` ou un `def` normal.
 
 ### Ă‰vĂ©nement `startup` { #startup-event }
 
-Pour ajouter une fonction qui doit ĂȘtre exĂ©cutĂ©e avant le dĂ©marrage de l'application, dĂ©clarez-la avec l'Ă©vĂ©nement Â« startup Â» :
+Pour ajouter une fonction qui doit ĂȘtre exĂ©cutĂ©e avant le dĂ©marrage de l'application, dĂ©clarez-la avec l'Ă©vĂ©nement `"startup"` :
 
 {* ../../docs_src/events/tutorial001_py310.py hl[8] *}
 
@@ -114,11 +114,11 @@ Et votre application ne commencera pas Ă  recevoir des requĂȘtes avant que tous
 
 ### Ă‰vĂ©nement `shutdown` { #shutdown-event }
 
-Pour ajouter une fonction qui doit ĂȘtre exĂ©cutĂ©e lorsque l'application s'arrĂȘte, dĂ©clarez-la avec l'Ă©vĂ©nement Â« shutdown Â» :
+Pour ajouter une fonction qui doit ĂȘtre exĂ©cutĂ©e lorsque l'application s'arrĂȘte, dĂ©clarez-la avec l'Ă©vĂ©nement `"shutdown"` :
 
 {* ../../docs_src/events/tutorial002_py310.py hl[6] *}
 
-Ici, la fonction gestionnaire de l'Ă©vĂ©nement `shutdown` Ă©crira une ligne de texte Â« Application shutdown Â» dans un fichier `log.txt`.
+Ici, la fonction gestionnaire de l'Ă©vĂ©nement `shutdown` Ă©crira une ligne de texte `"Application shutdown"` dans un fichier `log.txt`.
 
 /// note | Remarque
 
index 5625b0648b147a8302bcf6c4c27ab021a1bb7a99..7aa0a5150fe37d5997c3c8a22ca5cb924424b46a 100644 (file)
@@ -20,20 +20,6 @@ FastAPI gĂ©nĂšre automatiquement des spĂ©cifications **OpenAPI 3.1**, donc tout
 
 ///
 
-## GĂ©nĂ©rateurs de SDK par les sponsors de FastAPI { #sdk-generators-from-fastapi-sponsors }
-
-Cette section met en avant des solutions **soutenues par des fonds** et **par des entreprises** qui sponsorisent FastAPI. Ces produits offrent **des fonctionnalitĂ©s supplĂ©mentaires** et **des intĂ©grations** en plus de SDK de haute qualitĂ© gĂ©nĂ©rĂ©s.
-
-En âœš [**sponsorisant FastAPI**](../help-fastapi.md#sponsor-the-author) âœš, ces entreprises contribuent Ă  garantir que le framework et son **Ă©cosystĂšme** restent sains et **durables**.
-
-Leur sponsoring dĂ©montre Ă©galement un fort engagement envers la **communautĂ©** FastAPI (vous), montrant qu’elles se soucient non seulement d’offrir un **excellent service**, mais aussi de soutenir un **framework robuste et florissant**, FastAPI. đŸ™‡
-
-Par exemple, vous pourriez essayer :
-
-* [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral)
-
-Certaines de ces solutions peuvent aussi ĂȘtre open source ou proposer des niveaux gratuits, afin que vous puissiez les essayer sans engagement financier. D’autres gĂ©nĂ©rateurs de SDK commerciaux existent et peuvent ĂȘtre trouvĂ©s en ligne. đŸ€“
-
 ## CrĂ©er un SDK TypeScript { #create-a-typescript-sdk }
 
 Commençons par une application FastAPI simple :
@@ -56,7 +42,7 @@ Ces mĂȘmes informations issues des modĂšles, incluses dans OpenAPI, peuvent ĂȘtr
 
 ### Hey API { #hey-api }
 
-Une fois que vous avez une application FastAPI avec les modĂšles, vous pouvez utiliser Hey API pour gĂ©nĂ©rer un client TypeScript. Le moyen le plus rapide de le faire est via npx.
+Une fois que nous avons une application FastAPI avec les modĂšles, nous pouvons utiliser Hey API pour gĂ©nĂ©rer un client TypeScript. Le moyen le plus rapide de le faire est via npx.
 
 ```sh
 npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client
index 1b5acb08116d05b9a6882a16c2088fb0cfa7361a..4d9bdd6025570a1a200303c35a4ce7db6bc90d29 100644 (file)
@@ -4,7 +4,7 @@ Si votre application doit recevoir et envoyer des donnĂ©es JSON, mais que vous d
 
 ## Base64 vs fichiers { #base64-vs-files }
 
-Envisagez d'abord d'utiliser [Fichiers de requĂȘte](../tutorial/request-files.md) pour tĂ©lĂ©verser des donnĂ©es binaires et [RĂ©ponse personnalisĂ©e - FileResponse](./custom-response.md#fileresponse--fileresponse-) pour envoyer des donnĂ©es binaires, plutĂŽt que de les encoder dans du JSON.
+Envisagez d'abord d'utiliser [Fichiers de requĂȘte](../tutorial/request-files.md) pour tĂ©lĂ©verser des donnĂ©es binaires et [RĂ©ponse personnalisĂ©e - FileResponse](./custom-response.md#fileresponse) pour envoyer des donnĂ©es binaires, plutĂŽt que de les encoder dans du JSON.
 
 JSON ne peut contenir que des chaĂźnes encodĂ©es en UTF-8, il ne peut donc pas contenir d'octets bruts.
 
@@ -14,7 +14,7 @@ N'utilisez base64 que si vous devez absolument inclure des donnĂ©es binaires dan
 
 ## Pydantic `bytes` { #pydantic-bytes }
 
-Vous pouvez dĂ©clarer un modĂšle Pydantic avec des champs `bytes`, puis utiliser `val_json_bytes` dans la configuration du modĂšle pour lui indiquer d'utiliser base64 pour valider les donnĂ©es JSON en entrĂ©e ; dans le cadre de cette validation, il dĂ©codera la chaĂźne base64 en octets.
+Vous pouvez dĂ©clarer un modĂšle Pydantic avec des champs `bytes`, puis utiliser `val_json_bytes` dans la configuration du modĂšle pour lui indiquer d'utiliser base64 pour *valider* les donnĂ©es JSON en entrĂ©e ; dans le cadre de cette validation, il dĂ©codera la chaĂźne base64 en octets.
 
 {* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:9,29:35] hl[9] *}
 
@@ -52,12 +52,12 @@ Vous recevrez une rĂ©ponse comme :
 
 ## Pydantic `bytes` pour les donnĂ©es de sortie { #pydantic-bytes-for-output-data }
 
-Vous pouvez Ă©galement utiliser des champs `bytes` avec `ser_json_bytes` dans la configuration du modĂšle pour les donnĂ©es de sortie ; Pydantic sĂ©rialisera alors les octets en base64 lors de la gĂ©nĂ©ration de la rĂ©ponse JSON.
+Vous pouvez Ă©galement utiliser des champs `bytes` avec `ser_json_bytes` dans la configuration du modĂšle pour les donnĂ©es de sortie ; Pydantic *sĂ©rialisera* alors les octets en base64 lors de la gĂ©nĂ©ration de la rĂ©ponse JSON.
 
 {* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,12:16,29,38:41] hl[16] *}
 
 ## Pydantic `bytes` pour les donnĂ©es d'entrĂ©e et de sortie { #pydantic-bytes-for-input-and-output-data }
 
-Et bien sĂ»r, vous pouvez utiliser le mĂȘme modĂšle configurĂ© pour utiliser base64 afin de gĂ©rer Ă  la fois l'entrĂ©e (valider) avec `val_json_bytes` et la sortie (sĂ©rialiser) avec `ser_json_bytes` lors de la rĂ©ception et de l'envoi de donnĂ©es JSON.
+Et bien sĂ»r, vous pouvez utiliser le mĂȘme modĂšle configurĂ© pour utiliser base64 afin de gĂ©rer Ă  la fois l'entrĂ©e (*valider*) avec `val_json_bytes` et la sortie (*sĂ©rialiser*) avec `ser_json_bytes` lors de la rĂ©ception et de l'envoi de donnĂ©es JSON.
 
 {* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,19:26,29,44:46] hl[23:26] *}
index e21254bc1001684f664df1dd600b09f9e637c360..54f8e3ff7f681c241aeaabf6965329a18f266d1d 100644 (file)
@@ -1,10 +1,10 @@
 # Callbacks OpenAPI { #openapi-callbacks }
 
-Vous pourriez crĂ©er une API avec un *chemin d'accĂšs* qui dĂ©clenche une requĂȘte vers une *API externe* créée par quelqu'un d'autre (probablement la mĂȘme personne dĂ©veloppeuse qui utiliserait votre API).
+Vous pourriez crĂ©er une API avec un *chemin d'accĂšs* qui dĂ©clenche une requĂȘte vers une *API externe* créée par quelqu'un d'autre (probablement la mĂȘme personne dĂ©veloppeuse qui *utiliserait* votre API).
 
-Le processus qui se produit lorsque votre application API appelle l’*API externe* s’appelle un Â« callback Â». Parce que le logiciel Ă©crit par la personne dĂ©veloppeuse externe envoie une requĂȘte Ă  votre API puis votre API Â« rappelle Â», en envoyant une requĂȘte Ă  une *API externe* (probablement créée par la mĂȘme personne dĂ©veloppeuse).
+Le processus qui se produit lorsque votre application API appelle l’*API externe* s’appelle un Â« callback Â». Parce que le logiciel Ă©crit par la personne dĂ©veloppeuse externe envoie une requĂȘte Ă  votre API puis votre API *rappelle*, en envoyant une requĂȘte Ă  une *API externe* (probablement créée par la mĂȘme personne dĂ©veloppeuse).
 
-Dans ce cas, vous pourriez vouloir documenter Ă  quoi cette API externe devrait ressembler. Quel *chemin d'accĂšs* elle devrait avoir, quel corps elle devrait attendre, quelle rĂ©ponse elle devrait renvoyer, etc.
+Dans ce cas, vous pourriez vouloir documenter Ă  quoi cette API externe *devrait* ressembler. Quel *chemin d'accĂšs* elle devrait avoir, quel corps elle devrait attendre, quelle rĂ©ponse elle devrait renvoyer, etc.
 
 ## Une application avec des callbacks { #an-app-with-callbacks }
 
@@ -47,7 +47,7 @@ Le code rĂ©el du callback dĂ©pendra fortement de votre application API.
 
 Et il variera probablement beaucoup d’une application Ă  l’autre.
 
-Cela pourrait ĂȘtre seulement une ou deux lignes de code, comme :
+Cela pourrait ĂȘtre seulement une ou deux lignes de code, comme :
 
 ```Python
 callback_url = "https://example.com/api/v1/invoices/events/"
@@ -96,35 +96,35 @@ Commencez par crĂ©er un nouveau `APIRouter` qui contiendra un ou plusieurs callb
 
 Pour crĂ©er le *chemin d'accĂšs* du callback, utilisez le mĂȘme `APIRouter` que vous avez créé ci-dessus.
 
-Il devrait ressembler exactement Ă  un *chemin d'accĂšs* FastAPI normal :
+Il devrait ressembler exactement Ă  un *chemin d'accĂšs* FastAPI normal :
 
 * Il devrait probablement dĂ©clarer le corps qu’il doit recevoir, par exemple `body: InvoiceEvent`.
 * Et il pourrait aussi dĂ©clarer la rĂ©ponse qu’il doit renvoyer, par exemple `response_model=InvoiceEventReceived`.
 
 {* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[14:16,19:20,26:30] *}
 
-Il y a 2 principales diffĂ©rences par rapport Ă  un *chemin d'accĂšs* normal :
+Il y a 2 principales diffĂ©rences par rapport Ă  un *chemin d'accĂšs* normal :
 
 * Il n’a pas besoin d’avoir de code rĂ©el, car votre application n’appellera jamais ce code. Il sert uniquement Ă  documenter l’*API externe*. La fonction peut donc simplement contenir `pass`.
-* Le *chemin* peut contenir une [expression OpenAPI 3](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression) (voir plus bas) oĂč il peut utiliser des variables avec des paramĂštres et des parties de la requĂȘte originale envoyĂ©e Ă  *votre API*.
+* Le *chemin* peut contenir une [expression OpenAPI 3](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression) (voir plus bas) oĂč il peut utiliser des variables avec des paramĂštres et des parties de la requĂȘte originale envoyĂ©e Ă  *votre API*.
 
 ### L’expression du chemin de callback { #the-callback-path-expression }
 
-Le *chemin* du callback peut contenir une [expression OpenAPI 3](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression) qui peut inclure des parties de la requĂȘte originale envoyĂ©e Ă  *votre API*.
+Le *chemin* du callback peut contenir une [expression OpenAPI 3](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression) qui peut inclure des parties de la requĂȘte originale envoyĂ©e Ă  *votre API*.
 
-Dans ce cas, c’est la `str` :
+Dans ce cas, c’est la `str` :
 
 ```Python
 "{$callback_url}/invoices/{$request.body.id}"
 ```
 
-Ainsi, si l’utilisateur de votre API (la personne dĂ©veloppeuse externe) envoie une requĂȘte Ă  *votre API* vers :
+Ainsi, si l’utilisateur de votre API (la personne dĂ©veloppeuse externe) envoie une requĂȘte Ă  *votre API* vers :
 
 ```
 https://yourapi.com/invoices/?callback_url=https://www.external.org/events
 ```
 
-avec un corps JSON :
+avec un corps JSON :
 
 ```JSON
 {
@@ -134,13 +134,13 @@ avec un corps JSON :
 }
 ```
 
-alors *votre API* traitera la facture et, Ă  un moment ultĂ©rieur, enverra une requĂȘte de callback Ă  `callback_url` (l’*API externe*) :
+alors *votre API* traitera la facture et, Ă  un moment ultĂ©rieur, enverra une requĂȘte de callback Ă  `callback_url` (l’*API externe*) :
 
 ```
 https://www.external.org/events/invoices/2expen51ve
 ```
 
-avec un corps JSON contenant quelque chose comme :
+avec un corps JSON contenant quelque chose comme :
 
 ```JSON
 {
@@ -149,7 +149,7 @@ avec un corps JSON contenant quelque chose comme :
 }
 ```
 
-et elle s’attendra Ă  une rĂ©ponse de cette *API externe* avec un corps JSON comme :
+et elle s’attendrait Ă  une rĂ©ponse de cette *API externe* avec un corps JSON comme :
 
 ```JSON
 {
@@ -167,7 +167,7 @@ Remarquez que l’URL de callback utilisĂ©e contient l’URL reçue en paramĂštr
 
 Ă€ ce stade, vous avez le(s) *chemin(s) d'accĂšs de callback* nĂ©cessaire(s) (celui/ceux que la *personne dĂ©veloppeuse externe* doit implĂ©menter dans l’*API externe*) dans le routeur de callback que vous avez créé ci-dessus.
 
-Utilisez maintenant le paramĂštre `callbacks` dans *le dĂ©corateur de chemin d'accĂšs de votre API* pour passer l’attribut `.routes` depuis ce routeur de callback :
+Utilisez maintenant le paramĂštre `callbacks` dans *le dĂ©corateur de chemin d'accĂšs de votre API* pour passer l’attribut `.routes` depuis ce routeur de callback :
 
 {* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[33] *}
 
@@ -181,6 +181,6 @@ Remarquez que vous ne passez pas le routeur lui-mĂȘme (`invoices_callback_router
 
 Vous pouvez maintenant dĂ©marrer votre application et aller sur [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
 
-Vous verrez votre documentation incluant une section Â« Callbacks Â» pour votre *chemin d'accĂšs* qui montre Ă  quoi l’*API externe* devrait ressembler :
+Vous verrez votre documentation incluant une section Â« Callbacks Â» pour votre *chemin d'accĂšs* qui montre Ă  quoi l’*API externe* devrait ressembler :
 
 <img src="/img/tutorial/openapi-callbacks/image01.png">
index 222825702987496cbc75e82951d13fadb47f4cfe..317fcb03d67bf20222ed0792c7a35dca3c2d6173 100644 (file)
@@ -16,7 +16,7 @@ Pour ces cas, vous pouvez utiliser un paramĂštre `Response`.
 
 ## Utiliser un paramĂštre `Response` { #use-a-response-parameter }
 
-Vous pouvez dĂ©clarer un paramĂštre de type `Response` dans votre fonction de chemin d'accĂšs (comme vous pouvez le faire pour les cookies et les en-tĂȘtes).
+Vous pouvez dĂ©clarer un paramĂštre de type `Response` dans votre *fonction de chemin d'accĂšs* (comme vous pouvez le faire pour les cookies et les en-tĂȘtes).
 
 Vous pouvez ensuite dĂ©finir le `status_code` dans cet objet de rĂ©ponse *temporaire*.
 
index 174c9a72dc71d14f330cf7ff1d6ffa6b23695783..9efa045b19647e7348e2e4f7ea402a428744f5a8 100644 (file)
@@ -1,5 +1,6 @@
 # Cookies de rĂ©ponse { #response-cookies }
 
+
 ## Utiliser un paramĂštre `Response` { #use-a-response-parameter }
 
 Vous pouvez dĂ©clarer un paramĂštre de type `Response` dans votre *fonction de chemin d'accĂšs*.
index b7568b51fcdafe247cedb336f3a919ed7e059c33..e319ffefb81c40d4f212c677461768110ccd9895 100644 (file)
@@ -2,9 +2,9 @@
 
 ## Utiliser un paramĂštre `Response` { #use-a-response-parameter }
 
-Vous pouvez dĂ©clarer un paramĂštre de type `Response` dans votre fonction de chemin d'accĂšs (comme vous pouvez le faire pour les cookies).
+Vous pouvez dĂ©clarer un paramĂštre de type `Response` dans votre *fonction de chemin d'accĂšs* (comme vous pouvez le faire pour les cookies).
 
-Vous pouvez ensuite dĂ©finir des en-tĂȘtes dans cet objet de rĂ©ponse temporaire.
+Vous pouvez ensuite dĂ©finir des en-tĂȘtes dans cet objet de rĂ©ponse *temporaire*.
 
 {* ../../docs_src/response_headers/tutorial002_py310.py hl[1, 7:8] *}
 
@@ -12,7 +12,7 @@ Ensuite, vous pouvez renvoyer n'importe quel objet dont vous avez besoin, comme
 
 Et si vous avez dĂ©clarĂ© un `response_model`, il sera toujours utilisĂ© pour filtrer et convertir l'objet que vous avez renvoyĂ©.
 
-**FastAPI** utilisera cette rĂ©ponse temporaire pour extraire les en-tĂȘtes (ainsi que les cookies et le code de statut), et les placera dans la rĂ©ponse finale qui contient la valeur que vous avez renvoyĂ©e, filtrĂ©e par tout `response_model`.
+**FastAPI** utilisera cette rĂ©ponse *temporaire* pour extraire les en-tĂȘtes (ainsi que les cookies et le code de statut), et les placera dans la rĂ©ponse finale qui contient la valeur que vous avez renvoyĂ©e, filtrĂ©e par tout `response_model`.
 
 Vous pouvez Ă©galement dĂ©clarer le paramĂštre `Response` dans des dĂ©pendances, et y dĂ©finir des en-tĂȘtes (et des cookies).
 
index af63ce55318dc754be78343f3c6e75fb6edea7bc..a193aeacdfe050d236f64365ccd5b90df43d39dc 100644 (file)
@@ -2,11 +2,11 @@
 
 Vous pouvez utiliser des scopes OAuth2 directement avec **FastAPI**, ils sont intĂ©grĂ©s pour fonctionner de maniĂšre transparente.
 
-Cela vous permettrait d’avoir un systĂšme d’autorisations plus fin, conforme au standard OAuth2, intĂ©grĂ© Ă  votre application OpenAPI (et Ă  la documentation de l’API).
+Cela vous permettrait d’avoir un systĂšme d’autorisations plus fin, conforme au standard OAuth2, intĂ©grĂ© Ă  votre application OpenAPI (et aux documents de l’API).
 
 OAuth2 avec scopes est le mĂ©canisme utilisĂ© par de nombreux grands fournisseurs d’authentification, comme Facebook, Google, GitHub, Microsoft, X (Twitter), etc. Ils l’utilisent pour fournir des permissions spĂ©cifiques aux utilisateurs et aux applications.
 
-Chaque fois que vous Â« log in with Â» Facebook, Google, GitHub, Microsoft, X (Twitter), cette application utilise OAuth2 avec scopes.
+Chaque fois que vous utilisez Â« se connecter avec Â» Facebook, Google, GitHub, Microsoft, X (Twitter), cette application utilise OAuth2 avec scopes.
 
 Dans cette section, vous verrez comment gĂ©rer l’authentification et l’autorisation avec le mĂȘme OAuth2 avec scopes dans votre application **FastAPI**.
 
@@ -16,7 +16,7 @@ C’est une section plus ou moins avancĂ©e. Si vous dĂ©butez, vous pouvez la pas
 
 Vous n’avez pas nĂ©cessairement besoin des scopes OAuth2, et vous pouvez gĂ©rer l’authentification et l’autorisation comme vous le souhaitez.
 
-Mais OAuth2 avec scopes peut s’intĂ©grer Ă©lĂ©gamment Ă  votre API (avec OpenAPI) et Ă  votre documentation d’API.
+Mais OAuth2 avec scopes peut s’intĂ©grer Ă©lĂ©gamment Ă  votre API (avec OpenAPI) et Ă  vos documents d’API.
 
 NĂ©anmoins, c’est toujours Ă  vous de faire appliquer ces scopes, ou toute autre exigence de sĂ©curitĂ©/autorisation, selon vos besoins, dans votre code.
 
@@ -34,7 +34,7 @@ Le contenu de chacune de ces chaĂźnes peut avoir n’importe quel format, mais n
 
 Ces scopes reprĂ©sentent des Â« permissions Â».
 
-Dans OpenAPI (par ex. la documentation de l’API), vous pouvez dĂ©finir des Â« schĂ©mas de sĂ©curitĂ© Â».
+Dans OpenAPI (par ex. les documents de l’API), vous pouvez dĂ©finir des Â« schĂ©mas de sĂ©curitĂ© Â».
 
 Lorsqu’un de ces schĂ©mas de sĂ©curitĂ© utilise OAuth2, vous pouvez aussi dĂ©clarer et utiliser des scopes.
 
@@ -74,7 +74,7 @@ Le paramĂštre `scopes` reçoit un `dict` avec chaque scope en clĂ© et la descrip
 
 {* ../../docs_src/security/tutorial005_an_py310.py hl[63:66] *}
 
-Comme nous dĂ©clarons maintenant ces scopes, ils apparaĂźtront dans la documentation de l’API lorsque vous vous authentifiez/autorisez.
+Comme nous dĂ©clarons maintenant ces scopes, ils apparaĂźtront dans les documents de l’API lorsque vous vous authentifiez/autorisez.
 
 Et vous pourrez sĂ©lectionner Ă  quels scopes vous souhaitez accorder l’accĂšs : `me` et `items`.
 
@@ -235,11 +235,11 @@ Elles seront vĂ©rifiĂ©es indĂ©pendamment pour chaque *chemin d’accĂšs*.
 
 ## Tester { #check-it }
 
-Si vous ouvrez la documentation de l’API, vous pouvez vous authentifier et spĂ©cifier quels scopes vous voulez autoriser.
+Si vous ouvrez les documents de l’API, vous pouvez vous authentifier et spĂ©cifier quels scopes vous voulez autoriser.
 
 <img src="/img/tutorial/security/image11.png">
 
-Si vous ne sĂ©lectionnez aucun scope, vous serez Â« authenticated Â», mais lorsque vous essayerez d’accĂ©der Ă  `/users/me/` ou `/users/me/items/`, vous obtiendrez une erreur indiquant que vous n’avez pas suffisamment de permissions. Vous pourrez toujours accĂ©der Ă  `/status/`.
+Si vous ne sĂ©lectionnez aucun scope, vous serez Â« authentifiĂ© Â», mais lorsque vous essayerez d’accĂ©der Ă  `/users/me/` ou `/users/me/items/`, vous obtiendrez une erreur indiquant que vous n’avez pas suffisamment de permissions. Vous pourrez toujours accĂ©der Ă  `/status/`.
 
 Et si vous sĂ©lectionnez le scope `me` mais pas le scope `items`, vous pourrez accĂ©der Ă  `/users/me/` mais pas Ă  `/users/me/items/`.
 
index e6eb52a4ee0eba5da678d4232777a157a10bad93..722274d5726ddf1b863d7418a99ff5b5fb503dd7 100644 (file)
@@ -144,7 +144,7 @@ Pour l'instant, vous pouvez supposer que `get_settings()` est une fonction norma
 
 ///
 
-Nous pouvons ensuite l'exiger depuis la fonction de chemin d'accĂšs comme dĂ©pendance et l'utiliser oĂč nous en avons besoin.
+Nous pouvons ensuite l'exiger depuis la *fonction de chemin d'accĂšs* comme dĂ©pendance et l'utiliser oĂč nous en avons besoin.
 
 {* ../../docs_src/settings/app02_an_py310/main.py hl[17,19:21] *}
 
index e4939f2563c1bf08d759e01b7e5e7616155bd11c..23884b2f04a00f0fc59fd72f6710c75d401b5c17 100644 (file)
@@ -2,7 +2,7 @@
 
 Si vous voulez diffuser des donnĂ©es pouvant ĂȘtre structurĂ©es en JSON, vous devez [Diffuser des JSON Lines](../tutorial/stream-json-lines.md).
 
-Mais si vous voulez diffuser des donnĂ©es binaires pures ou des chaĂźnes, voici comment procĂ©der.
+Mais si vous voulez **diffuser des donnĂ©es binaires pures** ou des chaĂźnes, voici comment procĂ©der.
 
 /// note | Remarque
 
@@ -14,7 +14,7 @@ AjoutĂ© dans FastAPI 0.134.0.
 
 Vous pouvez l'utiliser si vous souhaitez diffuser des chaĂźnes pures, par exemple directement depuis la sortie d'un service d'**IA LLM**.
 
-Vous pouvez Ă©galement l'utiliser pour diffuser de gros fichiers binaires, en envoyant chaque bloc de donnĂ©es au fur et Ă  mesure de la lecture, sans tout charger en mĂ©moire d'un coup.
+Vous pouvez Ă©galement l'utiliser pour diffuser de **gros fichiers binaires**, en envoyant chaque bloc de donnĂ©es au fur et Ă  mesure de la lecture, sans tout charger en mĂ©moire d'un coup.
 
 Vous pouvez aussi diffuser de la **vidĂ©o** ou de l'**audio** de cette maniĂšre ; cela peut mĂȘme ĂȘtre gĂ©nĂ©rĂ© au fil du traitement et de l'envoi.
 
@@ -26,7 +26,7 @@ Si vous dĂ©clarez un `response_class=StreamingResponse` dans votre *fonction de
 
 FastAPI transmettra chaque bloc de donnĂ©es Ă  la `StreamingResponse` tel quel ; il n'essaiera pas de le convertir en JSON ni autre chose similaire.
 
-### Fonctions de chemin d'accĂšs non async { #non-async-path-operation-functions }
+### *Fonctions de chemin d'accĂšs* non async { #non-async-path-operation-functions }
 
 Vous pouvez Ă©galement utiliser des fonctions `def` classiques (sans `async`), et utiliser `yield` de la mĂȘme maniĂšre.
 
@@ -40,7 +40,7 @@ Comme FastAPI n'essaiera pas de convertir les donnĂ©es en JSON avec Pydantic ni
 
 {* ../../docs_src/stream_data/tutorial001_py310.py ln[32:35] hl[33] *}
 
-Cela signifie aussi qu'avec `StreamingResponse` vous avez la libertĂ© â€” et la responsabilitĂ© â€” de produire et d'encoder les octets de donnĂ©es exactement comme vous avez besoin de les envoyer, indĂ©pendamment des annotations de type. đŸ€“
+Cela signifie aussi qu'avec `StreamingResponse` vous avez la **libertĂ©** et la **responsabilitĂ©** de produire et d'encoder les octets de donnĂ©es exactement comme vous avez besoin de les envoyer, indĂ©pendamment des annotations de type. đŸ€“
 
 ### Diffuser des bytes { #stream-bytes }
 
index a1e56a45d6fe6de4caaa602661e7d47896a48375..6e6ce85c865f57d87bba27a752e7686e1ebf7442 100644 (file)
@@ -1,5 +1,6 @@
 # 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).
 
 Pour cela, vous pouvez utiliser `WSGIMiddleware` et l'utiliser pour envelopper votre application WSGI, par exemple Flask, Django, etc.
index b56d104812ae3f21c9cd0e78286a921f10cd743b..91a81e2dc965f8669708462ce09526a2ba43bf29 100644 (file)
@@ -39,19 +39,19 @@ premiĂšres idĂ©es qui a inspirĂ© Â« la recherche de Â» **FastAPI**.
 
 /// note | Remarque
 
-Django REST Framework a Ă©tĂ© créé par Tom Christie. Le crĂ©ateur de Starlette et Uvicorn, sur lesquels **FastAPI** est basĂ©.
+Django REST Framework a Ă©tĂ© créé par Tom Christie. Le mĂȘme crĂ©ateur de Starlette et Uvicorn, sur lesquels **FastAPI** est basĂ©.
 
 ///
 
 /// tip | A inspirĂ© **FastAPI** Ă 
 
-Avoir une interface de documentation automatique de l'API.
+Avoir une interface utilisateur web de documentation automatique de l'API.
 
 ///
 
 ### [Flask](https://flask.palletsprojects.com) { #flask }
 
-Flask est un Â« micro‑framework Â», il ne comprend pas d'intĂ©grations de bases de donnĂ©es ni beaucoup de choses qui sont fournies par dĂ©faut dans Django.
+Flask est un Â« microframework Â», il ne comprend pas d'intĂ©grations de bases de donnĂ©es ni beaucoup de choses qui sont fournies par dĂ©faut dans Django.
 
 Cette simplicitĂ© et cette flexibilitĂ© permettent d'utiliser des bases de donnĂ©es NoSQL comme principal systĂšme de stockage de donnĂ©es.
 
@@ -60,22 +60,22 @@ technique par moments.
 
 Il est aussi couramment utilisĂ© pour d'autres applications qui n'ont pas nĂ©cessairement besoin d'une base de donnĂ©es, de gestion des utilisateurs ou de l'une des nombreuses fonctionnalitĂ©s prĂ©installĂ©es dans Django. Bien que beaucoup de ces fonctionnalitĂ©s puissent ĂȘtre ajoutĂ©es avec des plug-ins.
 
-Ce dĂ©couplage des parties, et le fait d'ĂȘtre un Â« micro‑framework Â» qui puisse ĂȘtre Ă©tendu pour couvrir exactement ce
+Ce dĂ©couplage des parties, et le fait d'ĂȘtre un Â« microframework Â» qui puisse ĂȘtre Ă©tendu pour couvrir exactement ce
 qui est nĂ©cessaire, Ă©tait une caractĂ©ristique clĂ© que je voulais conserver.
 
 Compte tenu de la simplicitĂ© de Flask, il semblait bien adaptĂ© Ă  la crĂ©ation d'API. La prochaine chose Ă  trouver Ă©tait un Â« Django REST Framework Â» pour Flask.
 
 /// tip | A inspirĂ© **FastAPI** Ă 
 
-Être un micro‑framework. Il est donc facile de combiner les outils et les piĂšces nĂ©cessaires.
+Être un micro-framework. Il est donc facile de combiner les outils et les piĂšces nĂ©cessaires.
 
-Proposer un systĂšme de routage simple et facile Ă  utiliser.
+Proposer un systĂšme de routing simple et facile Ă  utiliser.
 
 ///
 
 ### [Requests](https://requests.readthedocs.io) { #requests }
 
-**FastAPI** n'est pas rĂ©ellement une alternative Ă  **Requests**. Leur cadre est trĂšs diffĂ©rent.
+**FastAPI** n'est pas rĂ©ellement une alternative Ă  **Requests**. Leur portĂ©e est trĂšs diffĂ©rente.
 
 Il serait en fait plus courant d'utiliser Requests _Ă  l'intĂ©rieur_ d'une application FastAPI.
 
@@ -85,7 +85,7 @@ Mais quand mĂȘme, FastAPI s'est inspirĂ© de Requests.
 
 Ils sont, plus ou moins, aux extrĂ©mitĂ©s opposĂ©es, se complĂ©tant l'un l'autre.
 
-Requests a un design trĂšs simple et intuitif, il est trĂšs facile Ă  utiliser, avec des valeurs par dĂ©faut raisonnables, tout en Ă©tant trĂšs puissant et personnalisable.
+Requests a un design trĂšs simple et intuitif, il est trĂšs facile Ă  utiliser, avec des valeurs par dĂ©faut raisonnables. Mais en mĂȘme temps, il est trĂšs puissant et personnalisable.
 
 C'est pourquoi, comme le dit le site officiel :
 
@@ -97,7 +97,7 @@ La façon dont vous l'utilisez est trĂšs simple. Par exemple, pour faire une req
 response = requests.get("http://example.com/some/url")
 ```
 
-L’opĂ©ration de chemin d'accĂšs correspondante dans **FastAPI** pourrait ressembler Ă  ceci :
+Le *chemin d'accĂšs* d'API correspondant dans **FastAPI** pourrait ressembler Ă  ceci :
 
 ```Python hl_lines="1"
 @app.get("/some/url")
@@ -117,7 +117,7 @@ Notez les similitudes entre `requests.get(...)` et `@app.get(...)`.
 
 ### [Swagger](https://swagger.io/) / [OpenAPI](https://github.com/OAI/OpenAPI-Specification/) { #swagger-openapi }
 
-La principale fonctionnalitĂ© que j'ai empruntĂ© Ă  Django REST Framework Ă©tait la documentation automatique des API.
+La principale fonctionnalitĂ© que j'ai empruntĂ©e Ă  Django REST Framework Ă©tait la documentation automatique des API.
 
 Puis j'ai dĂ©couvert qu'il existait une norme pour documenter les API, en utilisant JSON (ou YAML, une extension de JSON) appelĂ©e Swagger.
 
@@ -132,12 +132,12 @@ C'est pourquoi, lorsqu'on parle de la version 2.0, il est courant de dire Â« Swa
 
 Adopter et utiliser une norme ouverte pour les spĂ©cifications des API, au lieu d'un schĂ©ma personnalisĂ©.
 
-IntĂ©grer des outils d'interface utilisateur basĂ©s sur des normes :
+Et intĂ©grer des outils d'interface utilisateur basĂ©s sur des normes :
 
 * [Swagger UI](https://github.com/swagger-api/swagger-ui)
 * [ReDoc](https://github.com/Rebilly/ReDoc)
 
-Ces deux-lĂ  ont Ă©tĂ© choisis parce qu'ils sont populaires et stables, mais en faisant une recherche rapide, vous pourriez trouver des dizaines d'alternatives supplĂ©mentaires pour OpenAPI (que vous pouvez utiliser avec **FastAPI**).
+Ces deux-lĂ  ont Ă©tĂ© choisis parce qu'ils sont populaires et stables, mais en faisant une recherche rapide, vous pourriez trouver des dizaines d'interfaces utilisateur alternatives pour OpenAPI (que vous pouvez utiliser avec **FastAPI**).
 
 ///
 
@@ -149,14 +149,13 @@ permanents qui les rendent inadaptĂ©s.
 
 ### [Marshmallow](https://marshmallow.readthedocs.io/en/stable/) { #marshmallow }
 
-L'une des principales fonctionnalitĂ©s nĂ©cessaires aux systĂšmes API est la Â« <dfn title="aussi appelĂ© marshalling, conversion">sĂ©rialisation</dfn> Â» des donnĂ©es, qui consiste Ă  prendre les donnĂ©es du code (Python) et Ă 
+L'une des principales fonctionnalitĂ©s nĂ©cessaires aux systĂšmes API est la Â« <dfn title="aussi appelĂ© marshalling, conversion">sĂ©rialisation</dfn> Â» des donnĂ©es, qui consiste Ă  prendre les donnĂ©es du code (Python) et Ă 
 les convertir en quelque chose qui peut ĂȘtre envoyĂ© sur le rĂ©seau. Par exemple, convertir un objet contenant des
 donnĂ©es provenant d'une base de donnĂ©es en un objet JSON. Convertir des objets `datetime` en strings, etc.
 
 La validation des donnĂ©es est une autre fonctionnalitĂ© importante dont ont besoin les API. Elle permet de s'assurer
 que les donnĂ©es sont valides, compte tenu de certains paramĂštres. Par exemple, qu'un champ est un `int`, et non un
-string.
-Ceci est particuliĂšrement utile pour les donnĂ©es entrantes.
+string. Ceci est particuliĂšrement utile pour les donnĂ©es entrantes.
 
 Sans un systĂšme de validation des donnĂ©es, vous devriez effectuer toutes les vĂ©rifications Ă  la main, dans le code.
 
@@ -182,7 +181,7 @@ C'est un outil formidable et je l'ai beaucoup utilisĂ© aussi, avant d'avoir **Fa
 
 /// note | Remarque
 
-Webargs a Ă©tĂ© créé par les dĂ©veloppeurs de Marshmallow.
+Webargs a Ă©tĂ© créé par les mĂȘmes dĂ©veloppeurs de Marshmallow.
 
 ///
 
@@ -206,13 +205,13 @@ Et il gĂ©nĂšre des schĂ©mas OpenAPI.
 
 C'est ainsi que cela fonctionne dans Flask, Starlette, Responder, etc.
 
-Mais alors, nous avons Ă  nouveau le problĂšme d'avoir une micro-syntaxe, dans une docstring Python (un gros morceau de YAML).
+Mais alors, nous avons Ă  nouveau le problĂšme d'avoir une micro-syntaxe, dans une string Python (un gros morceau de YAML).
 
 L'Ă©diteur ne peut guĂšre aider en la matiĂšre. Et si nous modifions les paramĂštres ou les schĂ©mas Marshmallow et que nous oublions de modifier Ă©galement cette docstring YAML, le schĂ©ma gĂ©nĂ©rĂ© deviendrait obsolĂšte.
 
 /// note | Remarque
 
-APISpec a Ă©tĂ© créé par les dĂ©veloppeurs de Marshmallow.
+APISpec a Ă©tĂ© créé par les mĂȘmes dĂ©veloppeurs de Marshmallow.
 
 ///
 
@@ -241,11 +240,11 @@ j'ai (ainsi que plusieurs Ă©quipes externes) utilisĂ©es jusqu'Ă  prĂ©sent :
 * [https://github.com/tiangolo/full-stack-flask-couchbase](https://github.com/tiangolo/full-stack-flask-couchbase)
 * [https://github.com/tiangolo/full-stack-flask-couchdb](https://github.com/tiangolo/full-stack-flask-couchdb)
 
-Ces mĂȘmes gĂ©nĂ©rateurs full-stack ont servi de base aux [GĂ©nĂ©rateurs de projets pour **FastAPI**](project-generation.md).
+Et ces mĂȘmes gĂ©nĂ©rateurs full-stack ont servi de base aux [GĂ©nĂ©rateurs de projets **FastAPI**](project-generation.md).
 
 /// note | Remarque
 
-Flask-apispec a Ă©tĂ© créé par les dĂ©veloppeurs de Marshmallow.
+Flask-apispec a Ă©tĂ© créé par les mĂȘmes dĂ©veloppeurs de Marshmallow.
 
 ///
 
@@ -284,9 +283,9 @@ C'Ă©tait l'un des premiers frameworks Python extrĂȘmement rapides basĂ©s sur `as
 
 /// note | DĂ©tails techniques
 
-Il utilisait [`uvloop`](https://github.com/MagicStack/uvloop) au lieu du systĂšme par dĂ©faut de Python `asyncio`. C'est ce qui l'a rendu si rapide.
+Il utilisait [`uvloop`](https://github.com/MagicStack/uvloop) au lieu de la boucle par dĂ©faut de Python `asyncio`. C'est ce qui l'a rendu si rapide.
 
-Il a clairement inspirĂ© Uvicorn et Starlette, qui sont actuellement plus rapides que Sanic dans les benchmarks.
+Il a clairement inspirĂ© Uvicorn et Starlette, qui sont actuellement plus rapides que Sanic dans les benchmarks ouverts.
 
 ///
 
@@ -304,7 +303,7 @@ Falcon est un autre framework Python haute performance, il est conçu pour ĂȘtre
 
 Il est conçu pour avoir des fonctions qui reçoivent deux paramĂštres, une Â« requĂȘte Â» et une Â« rĂ©ponse Â». Ensuite, vous
 Â« lisez Â» des parties de la requĂȘte et Â« Ă©crivez Â» des parties dans la rĂ©ponse. En raison de cette conception, il n'est
-pas possible de dĂ©clarer des paramĂštres de requĂȘte et des corps avec des indications de type Python standard comme paramĂštres de fonction.
+pas possible de dĂ©clarer des paramĂštres de requĂȘte et des corps avec des annotations de type Python standard comme paramĂštres de fonction.
 
 Ainsi, la validation, la sĂ©rialisation et la documentation des donnĂ©es doivent ĂȘtre effectuĂ©es dans le code, et non pas automatiquement. Ou bien elles doivent ĂȘtre implĂ©mentĂ©es comme un framework au-dessus de Falcon, comme Hug. Cette mĂȘme distinction se retrouve dans d'autres frameworks qui s'inspirent de la conception de Falcon, qui consiste Ă  avoir un objet de requĂȘte et un objet de rĂ©ponse comme paramĂštres.
 
@@ -326,7 +325,7 @@ J'ai dĂ©couvert Molten lors des premiĂšres Ă©tapes de dĂ©veloppement de **FastAP
 * Validation et documentation via ces types.
 * SystĂšme d'injection de dĂ©pendances.
 
-Il n'utilise pas une librairie tiers de validation, sĂ©rialisation et de documentation tel que Pydantic, il utilise son propre systĂšme. Ainsi, ces dĂ©finitions de types de donnĂ©es ne sont pas rĂ©utilisables aussi facilement.
+Il n'utilise pas une librairie tierce de validation, sĂ©rialisation et de documentation telle que Pydantic, il utilise son propre systĂšme. Ainsi, ces dĂ©finitions de types de donnĂ©es ne sont pas rĂ©utilisables aussi facilement.
 
 Il nĂ©cessite une configuration un peu plus verbeuse. Et comme il est basĂ© sur WSGI (au lieu d'ASGI), il n'est pas
 conçu pour profiter des hautes performances fournies par des outils comme Uvicorn, Starlette et Sanic.
@@ -363,7 +362,7 @@ Comme il est basĂ© sur l'ancienne norme pour les frameworks web Python synchrone
 
 /// note | Remarque
 
-Hug a Ă©tĂ© créé par Timothy Crosley, le crĂ©ateur de [`isort`](https://github.com/timothycrosley/isort), un excellent outil pour trier automatiquement les imports dans les fichiers Python.
+Hug a Ă©tĂ© créé par Timothy Crosley, le mĂȘme crĂ©ateur de [`isort`](https://github.com/timothycrosley/isort), un excellent outil pour trier automatiquement les imports dans les fichiers Python.
 
 ///
 
@@ -388,11 +387,11 @@ et les requĂȘtes que j'ai vues (avant NestJS et Molten). Je l'ai trouvĂ© plus ou
 
 Il disposait de la validation automatique, sĂ©rialisation des donnĂ©es et d'une gĂ©nĂ©ration de schĂ©ma OpenAPI basĂ©e sur les mĂȘmes annotations de type Ă  plusieurs endroits.
 
-La dĂ©finition du schĂ©ma de corps de requĂȘte n'utilisait pas les mĂȘmes annotations de type Python que Pydantic, il Ă©tait un peu plus proche de Marshmallow, donc le support de l'Ă©diteur n'Ă©tait pas aussi bon, mais APIStar Ă©tait quand mĂȘme la meilleure option disponible.
+Les dĂ©finitions de schĂ©ma de corps n'utilisaient pas les mĂȘmes annotations de type Python que Pydantic, c'Ă©tait un peu plus proche de Marshmallow, donc le support de l'Ă©diteur n'Ă©tait pas aussi bon, mais APIStar Ă©tait quand mĂȘme la meilleure option disponible.
 
 Il avait les meilleures performances d'aprĂšs les benchmarks de l'Ă©poque (seulement surpassĂ© par Starlette).
 
-Au dĂ©part, il ne disposait pas d'une interface web de documentation automatique de l'API, mais je savais que je pouvais lui ajouter une interface Swagger.
+Au dĂ©part, il ne disposait pas d'une interface utilisateur web de documentation automatique de l'API, mais je savais que je pouvais lui ajouter Swagger UI.
 
 Il avait un systĂšme d'injection de dĂ©pendances. Il nĂ©cessitait un prĂ©-enregistrement des composants, comme d'autres outils discutĂ©s ci-dessus. Mais c'Ă©tait quand mĂȘme une excellente fonctionnalitĂ©.
 
@@ -422,7 +421,7 @@ L'idĂ©e de dĂ©clarer plusieurs choses (validation des donnĂ©es, sĂ©rialisation e
 
 Et aprĂšs avoir longtemps cherchĂ© un framework similaire et testĂ© de nombreuses alternatives, APIStar Ă©tait la meilleure option disponible.
 
-Puis APIStar a cessĂ© d'exister en tant que serveur et Starlette a Ă©tĂ© créé, et a constituĂ© une meilleure base pour un tel systĂšme. Ce fut l'inspiration finale pour construire **FastAPI**.
+Puis APIStar a cessĂ© d'exister en tant que serveur et Starlette a Ă©tĂ© créé, et a constituĂ© une nouvelle base meilleure pour un tel systĂšme. Ce fut l'inspiration finale pour construire **FastAPI**.
 
 Je considĂšre **FastAPI** comme un Â« successeur spirituel Â» d'APIStar, tout en amĂ©liorant et en augmentant les fonctionnalitĂ©s, le systĂšme de typage et d'autres parties, sur la base des enseignements tirĂ©s de tous ces outils prĂ©cĂ©dents.
 
@@ -441,7 +440,7 @@ basĂ© sur les mĂȘmes annotations de type Python, le support de l'Ă©diteur est gr
 
 /// tip | **FastAPI** l'utilise pour
 
-GĂ©rer toute la validation des donnĂ©es, leur sĂ©rialisation et la documentation automatique du modĂšle (basĂ©e sur le schĂ©ma JSON).
+GĂ©rer toute la validation des donnĂ©es, leur sĂ©rialisation et la documentation automatique du modĂšle (basĂ©e sur JSON Schema).
 
 **FastAPI** prend ensuite ces donnĂ©es JSON Schema et les place dans OpenAPI, en plus de toutes les autres choses qu'il fait.
 
@@ -455,20 +454,20 @@ Il est trĂšs simple et intuitif. Il est conçu pour ĂȘtre facilement extensible
 
 Il offre :
 
-- Des performances vraiment impressionnantes.
-- Le support des WebSockets.
-- Les tĂąches d'arriĂšre-plan.
-- Les Ă©vĂ©nements de dĂ©marrage et d'arrĂȘt.
-- Un client de test basĂ© sur HTTPX.
-- CORS, GZip, fichiers statiques, streaming des rĂ©ponses.
-- Le support des sessions et des cookies.
-- Une couverture de test Ă  100 %.
-- 100 % de la base de code avec des annotations de type.
-- Peu de dĂ©pendances strictes.
+* Des performances vraiment impressionnantes.
+* Le support de WebSocket.
+* Les tĂąches d'arriĂšre-plan in-process.
+* Les Ă©vĂ©nements de dĂ©marrage et d'arrĂȘt.
+* Un client de test basĂ© sur HTTPX.
+* CORS, GZip, fichiers statiques, streaming des rĂ©ponses.
+* Le support des sessions et des cookies.
+* Une couverture de test Ă  100 %.
+* 100 % de la base de code avec des annotations de type.
+* Peu de dĂ©pendances strictes.
 
 Starlette est actuellement le framework Python le plus rapide testĂ©. Seulement dĂ©passĂ© par Uvicorn, qui n'est pas un framework, mais un serveur.
 
-Starlette fournit toutes les fonctionnalitĂ©s de base d'un micro‑framework web.
+Starlette fournit toutes les fonctionnalitĂ©s de base d'un microframework web.
 
 Mais il ne fournit pas de validation automatique des donnĂ©es, de sĂ©rialisation ou de documentation.
 
@@ -496,7 +495,7 @@ Ainsi, tout ce que vous pouvez faire avec Starlette, vous pouvez le faire direct
 
 Uvicorn est un serveur ASGI rapide comme l'Ă©clair, basĂ© sur uvloop et httptools.
 
-Il ne s'agit pas d'un framework web, mais d'un serveur. Par exemple, il ne fournit pas d'outils pour le routing. C'est
+Il ne s'agit pas d'un framework web, mais d'un serveur. Par exemple, il ne fournit pas d'outils pour le routing par chemins. C'est
 quelque chose qu'un framework comme Starlette (ou **FastAPI**) fournirait par-dessus.
 
 C'est le serveur recommandĂ© pour Starlette et **FastAPI**.
index b3fc9169abf75ee89fa08ed7e2de9b1800d5ef9c..ccd176072584bea075106685dab5b8e66169e4a6 100644 (file)
@@ -44,19 +44,19 @@ Si votre application (d'une certaine maniĂšre) n'a pas Ă  communiquer avec une a
 
 ---
 
-Si vous ne savez pas, utilisez seulement `def`.
+Si vous ne savez pas, utilisez un `def` normal.
 
 ---
 
-Note : vous pouvez mĂ©langer `def` et `async def` dans vos *fonctions de chemin d'accĂšs* autant que nĂ©cessaire, et dĂ©finir chacune avec l’option la plus adaptĂ©e pour vous. FastAPI fera ce qu'il faut avec elles.
+**Remarque** : vous pouvez mĂ©langer `def` et `async def` dans vos *fonctions de chemin d'accĂšs* autant que nĂ©cessaire, et dĂ©finir chacune avec l’option la plus adaptĂ©e pour vous. FastAPI fera ce qu'il faut avec elles.
 
 Au final, peu importe le cas parmi ceux ci-dessus, FastAPI fonctionnera de maniĂšre asynchrone et sera extrĂȘmement rapide.
 
-Mais si vous suivez bien les instructions ci-dessus, il pourra effectuer quelques optimisations et ainsi amĂ©liorer les performances.
+Mais si vous suivez bien les Ă©tapes ci-dessus, il pourra effectuer quelques optimisations de performance.
 
 ## DĂ©tails techniques { #technical-details }
 
-Les versions modernes de Python supportent le **code asynchrone** grĂące aux **« coroutines Â»** avec les syntaxes **`async` et `await`**.
+Les versions modernes de Python supportent le **« code asynchrone Â»** en utilisant quelque chose appelĂ© **« coroutines Â»**, avec la syntaxe **`async` et `await`**.
 
 Analysons les diffĂ©rentes parties de cette phrase dans les sections suivantes :
 
@@ -70,7 +70,7 @@ Faire du code asynchrone signifie que le langage đŸ’Ź est capable de dire Ă  l'o
 
 Donc, pendant ce temps, l'ordinateur pourra effectuer d'autres tĂąches, pendant que Â« slow-file Â» đŸ“ se termine.
 
-Ensuite l'ordinateur / le programme đŸ€– reviendra Ă  chaque fois qu'il en a la chance que ce soit parce qu'il attend Ă  nouveau, ou car il đŸ€– a fini tout le travail qu'il avait Ă  faire. Il đŸ€– regardera donc si les tĂąches qu'il attend ont terminĂ© d'ĂȘtre effectuĂ©es.
+Ensuite l'ordinateur / le programme đŸ€– reviendra Ă  chaque fois qu'il en a la chance, parce qu'il attend Ă  nouveau, ou quand il đŸ€– a fini tout le travail qu'il avait Ă  faire Ă  ce moment-lĂ . Et il đŸ€– regardera si des tĂąches qu'il attendait ont dĂ©jĂ  terminĂ©, en faisant ce qu'il devait faire.
 
 Ensuite, il đŸ€– prendra la premiĂšre tĂąche Ă  finir (disons, notre Â« slow-file Â» đŸ“) et continuera Ă  faire avec cette derniĂšre ce qu'il Ă©tait censĂ©.
 
@@ -80,18 +80,18 @@ Ce Â« attendre quelque chose d'autre Â» fait gĂ©nĂ©ralement rĂ©fĂ©rence Ă  des o
 * de la donnĂ©e envoyĂ©e depuis votre programme soit reçue par le client Ă  travers le rĂ©seau
 * le contenu d'un fichier sur le disque soit lu par le systĂšme et passĂ© Ă  votre programme
 * le contenu que votre programme a passĂ© au systĂšme soit Ă©crit sur le disque
-* une opĂ©ration effectuĂ©e Ă  distance par une API se termine
+* une opĂ©ration effectuĂ©e Ă  distance par une API
 * une opĂ©ration en base de donnĂ©es se termine
 * une requĂȘte Ă  une base de donnĂ©es renvoie un rĂ©sultat
 * etc.
 
 Le temps d'exĂ©cution Ă©tant consommĂ© majoritairement par l'attente d'opĂ©rations <abbr title="Input and Output - EntrĂ©es et sorties">I/O</abbr>, on appelle ceci des opĂ©rations Â« I/O bound Â».
 
-Ce concept se nomme Â« asynchrone Â» car l'ordinateur / le programme n'a pas besoin d'ĂȘtre Â« synchronisĂ© Â» avec la tĂąche, attendant le moment exact oĂč cette derniĂšre se terminera en ne faisant rien, pour ĂȘtre capable de rĂ©cupĂ©rer le rĂ©sultat de la tĂąche et l'utiliser dans la suite des opĂ©rations.
+Ce concept se nomme Â« asynchrone Â» car l'ordinateur / le programme n'a pas besoin d'ĂȘtre Â« synchronisĂ© Â» avec la tĂąche lente, attendant le moment exact oĂč cette derniĂšre se terminera en ne faisant rien, pour ĂȘtre capable de rĂ©cupĂ©rer le rĂ©sultat de la tĂąche et l'utiliser dans la suite des opĂ©rations.
 
-À la place, en Ă©tant Â« asynchrone Â», une fois terminĂ©e, une tĂąche peut lĂ©gĂšrement attendre (quelques microsecondes) que l'ordinateur / le programme finisse ce qu'il Ă©tait en train de faire, et revienne rĂ©cupĂ©rer le rĂ©sultat.
+À la place, en Ă©tant un systĂšme Â« asynchrone Â», une fois terminĂ©e, la tĂąche peut attendre un peu dans la file (quelques microsecondes) que l'ordinateur / le programme finisse ce qu'il Ă©tait en train de faire, puis revienne rĂ©cupĂ©rer les rĂ©sultats et continue Ă  travailler avec eux.
 
-Pour parler de tĂąches Â« synchrones Â» (en opposition Ă  Â« asynchrones Â»), on utilise souvent le terme Â« sĂ©quentiel Â», car l'ordinateur / le programme va effectuer toutes les Ă©tapes d'une tĂąche sĂ©quentiellement avant de passer Ă  une autre tĂąche, mĂȘme si ces Ă©tapes impliquent de l'attente.
+Pour parler de tĂąches Â« synchrones Â» (en opposition Ă  Â« asynchrones Â»), on utilise souvent aussi le terme Â« sĂ©quentiel Â», car l'ordinateur / le programme va effectuer toutes les Ă©tapes d'une tĂąche sĂ©quentiellement avant de passer Ă  une autre tĂąche, mĂȘme si ces Ă©tapes impliquent de l'attente.
 
 ### Concurrence et Burgers { #concurrency-and-burgers }
 
@@ -99,49 +99,49 @@ L'idĂ©e de code **asynchrone** dĂ©crite ci-dessus est parfois aussi appelĂ©e **
 
 La **concurrence** et le **parallĂ©lisme** sont tous deux liĂ©s Ă  l'idĂ©e de Â« diffĂ©rentes choses arrivant plus ou moins au mĂȘme moment Â».
 
-Mais les dĂ©tails entre la **concurrence** et le **parallĂ©lisme** diffĂšrent sur de nombreux points.
+Mais les dĂ©tails entre la *concurrence* et le *parallĂ©lisme* sont assez diffĂ©rents.
 
-Pour expliquer la diffĂ©rence, voici une histoire de burgers :
+Pour expliquer la diffĂ©rence, imaginez l'histoire suivante Ă  propos de burgers :
 
 ### Burgers concurrents { #concurrent-burgers }
 
-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. đŸ˜
 
 <img src="/img/async/concurrent-burgers/concurrent-burgers-01.png" class="illustration">
 
-Puis vient votre tour, vous commandez alors 2 magnifiques burgers đŸ” pour votre crush đŸ˜ et vous.
+Puis vient votre tour, vous commandez alors 2 burgers trĂšs sophistiquĂ©s pour votre crush et vous. đŸ”đŸ”
 
 <img src="/img/async/concurrent-burgers/concurrent-burgers-02.png" class="illustration">
 
-Le serveur đŸ’ dit quelque chose Ă  son collĂšgue dans la cuisine đŸ‘šâ€đŸł pour qu'il sache qu'il doit prĂ©parer vos burgers đŸ” (bien qu'il soit dĂ©jĂ  en train de prĂ©parer ceux des clients prĂ©cĂ©dents).
+Le caissier dit quelque chose au cuisinier dans la cuisine pour qu'il sache qu'il doit prĂ©parer vos burgers (bien qu'il soit dĂ©jĂ  en train de prĂ©parer ceux des clients prĂ©cĂ©dents).
 
 <img src="/img/async/concurrent-burgers/concurrent-burgers-03.png" class="illustration">
 
-Vous payez đŸ’ž.
+Vous payez. đŸ’ž
 
-Le serveur đŸ’ vous donne le numĂ©ro assignĂ© Ă  votre commande.
+Le caissier vous donne le numĂ©ro de votre tour.
 
 <img src="/img/async/concurrent-burgers/concurrent-burgers-04.png" class="illustration">
 
-Pendant que vous attendez, vous allez choisir une table avec votre crush đŸ˜, vous discutez avec votre crush đŸ˜ pendant un long moment (les burgers Ă©tant Â« magnifiques Â» ils sont trĂšs longs Ă  prĂ©parer âœšđŸ”✚).
+Pendant que vous attendez, vous allez choisir une table avec votre crush, vous vous asseyez et discutez avec votre crush pendant un long moment (vos burgers Ă©tant trĂšs sophistiquĂ©s, ils prennent du temps Ă  prĂ©parer).
 
-Pendant que vous ĂȘtes assis Ă  table, en attendant que les burgers đŸ” soient prĂȘts, vous pouvez passer ce temps Ă  admirer Ă  quel point votre crush đŸ˜ est gĂ©niale, mignonne et intelligente âœšđŸ˜âœš.
+Pendant que vous ĂȘtes assis Ă  table avec votre crush, en attendant les burgers, vous pouvez passer ce temps Ă  admirer Ă  quel point votre crush est gĂ©niale, mignonne et intelligente âœšđŸ˜âœš.
 
 <img src="/img/async/concurrent-burgers/concurrent-burgers-05.png" class="illustration">
 
-Pendant que vous discutez avec votre crush đŸ˜, de temps en temps vous jetez un coup d’Ɠil au nombre affichĂ© au-dessus du comptoir pour savoir si c'est Ă  votre tour d'ĂȘtre servis.
+Pendant que vous attendez et discutez avec votre crush, de temps en temps, vous jetez un coup d’Ɠil au nombre affichĂ© au-dessus du comptoir pour savoir si c'est dĂ©jĂ  votre tour.
 
-Jusqu'au moment oĂč c'est (enfin) votre tour. Vous allez au comptoir, rĂ©cupĂ©rez vos burgers đŸ” et revenez Ă  votre table.
+Puis, Ă  un moment, c'est enfin votre tour. Vous allez au comptoir, rĂ©cupĂ©rez vos burgers et revenez Ă  votre table.
 
 <img src="/img/async/concurrent-burgers/concurrent-burgers-06.png" class="illustration">
 
-Vous et votre crush đŸ˜ mangez les burgers đŸ” et passez un bon moment âœš.
+Vous et votre crush mangez les burgers et passez un bon moment. âœš
 
 <img src="/img/async/concurrent-burgers/concurrent-burgers-07.png" class="illustration">
 
 /// note | Remarque
 
-Illustrations proposĂ©es par [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). đŸŽš
+Belles illustrations par [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). đŸŽš
 
 ///
 
@@ -149,103 +149,103 @@ Illustrations proposĂ©es par [Ketrina Thompson](https://www.instagram.com/ketrin
 
 Imaginez que vous ĂȘtes l'ordinateur / le programme đŸ€– dans cette histoire.
 
-Pendant que vous faites la queue, vous ĂȘtre simplement inactif đŸ˜Ž, attendant votre tour, ne faisant rien de Â« productif Â». Mais la queue est rapide car le serveur đŸ’ prend seulement les commandes (et ne les prĂ©pare pas), donc tout va bien.
+Pendant que vous faites la queue, vous ĂȘtes simplement inactif đŸ˜Ž, attendant votre tour, ne faisant rien de trĂšs Â« productif Â». Mais la queue est rapide car le caissier prend seulement les commandes (et ne les prĂ©pare pas), donc tout va bien.
 
-Ensuite, quand c'est votre tour, vous faites des actions Â« productives Â» đŸ€“, vous Ă©tudiez le menu, dĂ©cidez ce que vous voulez, demandez Ă  votre crush đŸ˜ son choix, payez đŸ’ž, vĂ©rifiez que vous utilisez la bonne carte de crĂ©dit, vĂ©rifiez que le montant dĂ©bitĂ© sur la carte est correct, vĂ©rifiez que la commande contient les bons produits, etc.
+Ensuite, quand c'est votre tour, vous faites du vrai travail Â« productif Â», vous Ă©tudiez le menu, dĂ©cidez ce que vous voulez, demandez Ă  votre crush son choix, payez, vĂ©rifiez que vous donnez le bon billet ou la bonne carte, vĂ©rifiez que le montant dĂ©bitĂ© est correct, vĂ©rifiez que la commande contient les bons produits, etc.
 
-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.
 
-AprĂšs vous ĂȘtre Ă©cartĂ© du comptoir et vous ĂȘtre assis Ă  votre table avec le numĂ©ro de votre commande, vous pouvez tourner đŸ”€ votre attention vers votre crush đŸ˜, et Â« travailler Â» âŻ đŸ€“ lĂ -dessus. Vous ĂȘtes donc Ă  nouveau en train de faire quelque chose de Â« productif Â» đŸ€“, vous flirtez avec votre crush đŸ˜.
+Mais lorsque vous vous Ă©cartez du comptoir et vous asseyez Ă  table avec un numĂ©ro pour votre tour, vous pouvez tourner đŸ”€ votre attention vers votre crush, et Â« travailler Â» âŻ đŸ€“ lĂ -dessus. Vous ĂȘtes donc Ă  nouveau en train de faire quelque chose de trĂšs Â« productif Â», comme flirter avec votre crush đŸ˜.
 
-Puis le serveur đŸ’ dit Â« J'ai fini de prĂ©parer les burgers Â» đŸ” en mettant votre numĂ©ro sur l'affichage du comptoir, mais vous ne courez pas immĂ©diatement au moment oĂč votre numĂ©ro s'affiche. Vous savez que personne ne volera vos burgers đŸ” car vous avez votre numĂ©ro et les autres clients ont le leur.
+Puis le caissier đŸ’ dit Â« J'ai fini de faire les burgers Â» en mettant votre numĂ©ro sur l'affichage du comptoir, mais vous ne sautez pas comme un fou immĂ©diatement quand le numĂ©ro affichĂ© change pour devenir votre numĂ©ro. Vous savez que personne ne volera vos burgers car vous avez le numĂ©ro de votre tour, et les autres ont le leur.
 
-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 âž.
 
-Pour finir vous allez au comptoir đŸ”€, vers la tĂąche initiale qui est dĂ©sormais terminĂ©e âŻ, rĂ©cupĂ©rez les burgers đŸ”, remerciez le serveur et ramenez les burgers đŸ” Ă  votre table. Ceci termine l'Ă©tape / la tĂąche d'interaction avec le comptoir âč. Ce qui ensuite, crĂ©e une nouvelle tĂąche de Â« manger les burgers Â» đŸ”€ âŻ, mais la prĂ©cĂ©dente, Â« rĂ©cupĂ©rer les burgers Â» est terminĂ©e âč.
+Puis vous allez au comptoir đŸ”€, vers la tĂąche initiale qui est dĂ©sormais terminĂ©e âŻ, rĂ©cupĂ©rez les burgers, remerciez et ramenez les burgers Ă  votre table. Ceci termine l'Ă©tape / la tĂąche d'interaction avec le comptoir âč. Ce qui ensuite crĂ©e une nouvelle tĂąche, Â« manger les burgers Â» đŸ”€ âŻ, mais la prĂ©cĂ©dente, Â« rĂ©cupĂ©rer les burgers Â», est terminĂ©e âč.
 
 ### Burgers parallĂšles { #parallel-burgers }
 
-Imaginons dĂ©sormais que ce ne sont pas des Â« burgers concurrents Â» mais des Â« burgers parallĂšles Â».
+Imaginons dĂ©sormais que ce ne sont pas des Â« Burgers concurrents Â» mais des Â« Burgers parallĂšles Â».
 
-Vous allez avec votre crush đŸ˜ dans un fast food đŸ” parallĂ©lisĂ©.
+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.
 
-Chaque personne devant vous attend đŸ•™ que son burger đŸ” soit prĂȘt avant de quitter le comptoir car chacun des 8 serveurs va lui-mĂȘme prĂ©parer le burger directement avant de prendre la commande suivante.
+Chaque personne devant vous attend que son burger soit prĂȘt avant de quitter le comptoir car chacun des 8 caissiers va prĂ©parer le burger directement avant de prendre la commande suivante.
 
 <img src="/img/async/parallel-burgers/parallel-burgers-01.png" class="illustration">
 
-Puis c'est enfin votre tour, vous commandez 2 magnifiques burgers đŸ” pour vous et votre crush đŸ˜.
+Puis c'est enfin votre tour, vous commandez 2 burgers trĂšs sophistiquĂ©s pour vous et votre crush.
 
 Vous payez đŸ’ž.
 
 <img src="/img/async/parallel-burgers/parallel-burgers-02.png" class="illustration">
 
-Le serveur va dans la cuisine đŸ‘šâ€đŸł.
+Le caissier va dans la cuisine.
 
-Vous attendez devant le comptoir afin que personne ne prenne vos burgers đŸ” avant vous, vu qu'il n'y a pas de numĂ©ro de commande.
+Vous attendez, debout devant le comptoir đŸ•™, afin que personne d'autre ne prenne vos burgers avant vous, vu qu'il n'y a pas de numĂ©ros pour les tours.
 
 <img src="/img/async/parallel-burgers/parallel-burgers-03.png" class="illustration">
 
-Vous et votre crush đŸ˜ Ă©tant occupĂ©s Ă  vĂ©rifier que personne ne passe devant vous prendre vos burgers au moment oĂč ils arriveront đŸ•™, vous ne pouvez pas vous prĂ©occuper de votre crush đŸ˜ž.
+Vous et votre crush Ă©tant occupĂ©s Ă  ne laisser personne passer devant vous et prendre vos burgers au moment oĂč ils arriveront, vous ne pouvez pas prĂȘter attention Ă  votre crush. đŸ˜ž
 
-C'est du travail Â« synchrone Â», vous ĂȘtre Â« synchronisĂ©s Â» avec le serveur/cuisinier đŸ‘šâ€đŸł. Vous devez attendre đŸ•™ et ĂȘtre prĂ©sent au moment exact oĂč le serveur/cuisinier đŸ‘šâ€đŸł finira les burgers đŸ” et vous les donnera, sinon quelqu'un risque de vous les prendre.
+C'est du travail Â« synchrone Â», vous ĂȘtre Â« synchronisĂ©s Â» avec le caissier/cuisinier đŸ‘šâ€đŸł. Vous devez attendre đŸ•™ et ĂȘtre prĂ©sent au moment exact oĂč le caissier/cuisinier đŸ‘šâ€đŸł finira les burgers et vous les donnera, sinon quelqu'un d'autre risque de vous les prendre.
 
 <img src="/img/async/parallel-burgers/parallel-burgers-04.png" class="illustration">
 
-Puis le serveur/cuisinier đŸ‘šâ€đŸł revient enfin avec vos burgers đŸ”, aprĂšs un long moment d'attente đŸ•™ devant le comptoir.
+Puis votre caissier/cuisinier đŸ‘šâ€đŸł revient enfin avec vos burgers, aprĂšs un long moment d'attente đŸ•™ devant le comptoir.
 
 <img src="/img/async/parallel-burgers/parallel-burgers-05.png" class="illustration">
 
-Vous prenez vos burgers đŸ” et allez Ă  une table avec votre crush đŸ˜
+Vous prenez vos burgers et allez Ă  une table avec votre crush.
 
-Vous les mangez, et vous avez terminĂ© đŸ” âč.
+Vous les mangez simplement, et vous avez terminĂ©. âč
 
 <img src="/img/async/parallel-burgers/parallel-burgers-06.png" class="illustration">
 
-Durant tout ce processus, il n'y a presque pas eu de discussions ou de flirts car la plupart de votre temps Ă  Ă©tĂ© passĂ© Ă  attendre đŸ•™ devant le comptoir đŸ˜ž.
+Il n'y a pas eu beaucoup de discussions ou de flirts car la plupart du temps a Ă©tĂ© passĂ© Ă  attendre đŸ•™ devant le comptoir. đŸ˜ž
 
 /// note | Remarque
 
-Illustrations proposĂ©es par [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). đŸŽš
+Belles illustrations par [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). đŸŽš
 
 ///
 
 ---
 
-Dans ce scĂ©nario de burgers parallĂšles, vous ĂȘtes un ordinateur / programme đŸ€– avec deux processeurs (vous et votre crush đŸ˜) attendant đŸ•™ Ă  deux et dĂ©diant votre attention âŻ Ă  Â« attendre devant le comptoir Â» đŸ•™ pour une longue durĂ©e.
+Dans ce scĂ©nario de burgers parallĂšles, vous ĂȘtes un ordinateur / programme đŸ€– avec deux processeurs (vous et votre crush), tous deux attendant đŸ•™ et dĂ©diant leur attention âŻ Ă  Â« attendre devant le comptoir Â» đŸ•™ pour une longue durĂ©e.
 
-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).
 
-Et pourtant l'expĂ©rience finale n'est pas meilleure đŸ˜ž.
+Mais tout de mĂȘme, l'expĂ©rience finale n'est pas la meilleure. đŸ˜ž
 
 ---
 
-C'est donc l'histoire Ă©quivalente parallĂšle pour les burgers đŸ”.
+Ce serait donc l'histoire Ă©quivalente parallĂšle pour les burgers. đŸ”
 
-Pour un exemple plus courant dans la Â« vie rĂ©elle Â», imaginez une banque.
+Pour un exemple plus Â« vie rĂ©elle Â», imaginez une banque.
 
-Jusqu'Ă  rĂ©cemment, la plupart des banques avaient plusieurs caisses (et banquiers) đŸ‘šâ€đŸ’ŒđŸ‘šâ€đŸ’ŒđŸ‘šâ€đŸ’ŒđŸ‘šâ€đŸ’Œ et une unique file d'attente đŸ•™đŸ•™đŸ•™đŸ•™đŸ•™đŸ•™đŸ•™đŸ•™.
+Jusqu'Ă  rĂ©cemment, la plupart des banques avaient plusieurs caissiers đŸ‘šâ€đŸ’ŒđŸ‘šâ€đŸ’ŒđŸ‘šâ€đŸ’ŒđŸ‘šâ€đŸ’Œ et une grande file d'attente đŸ•™đŸ•™đŸ•™đŸ•™đŸ•™đŸ•™đŸ•™đŸ•™.
 
-Tous les banquiers faisaient l'intĂ©gralitĂ© du travail avec chaque client avant de passer au suivant đŸ‘šâ€đŸ’ŒâŻ.
+Tous les caissiers faisaient tout le travail avec chaque client avant de passer au suivant đŸ‘šâ€đŸ’ŒâŻ.
 
-Et vous deviez attendre đŸ•™ dans la file pendant un long moment ou vous perdiez votre place.
+Et vous devez attendre đŸ•™ dans la file pendant un long moment ou vous perdez votre tour.
 
-Vous n'auriez donc probablement pas envie d'amener votre crush đŸ˜ avec vous Ă  la banque đŸŠ.
+Vous n'auriez donc probablement pas envie d'amener votre crush đŸ˜ avec vous pour faire des dĂ©marches Ă  la banque đŸŠ.
 
 ### Conclusion sur les burgers { #burger-conclusion }
 
-Dans ce scĂ©nario des Â« burgers du fast-food avec votre crush Â», comme il y a beaucoup d'attente đŸ•™, il est trĂšs logique d'avoir un systĂšme concurrent âžđŸ”€âŻ.
+Dans ce scĂ©nario des Â« burgers de fast food avec votre crush Â», comme il y a beaucoup d'attente đŸ•™, il est beaucoup plus logique d'avoir un systĂšme concurrent âžđŸ”€âŻ.
 
-Et c'est le cas pour la plupart des applications web.
+C'est le cas pour la plupart des applications web.
 
-Vous aurez de nombreux, nombreux utilisateurs, mais votre serveur attendra đŸ•™ que leur connexion peu performante envoie des requĂȘtes.
+De trĂšs, trĂšs nombreux utilisateurs, mais votre serveur attend đŸ•™ que leur connexion pas trĂšs bonne envoie leurs requĂȘtes.
 
-Puis vous attendrez đŸ•™ de nouveau que leurs rĂ©ponses reviennent.
+Puis attend đŸ•™ de nouveau que les rĂ©ponses reviennent.
 
-Cette Â« attente Â» đŸ•™ se mesure en microsecondes, mais tout de mĂȘme, en cumulĂ© cela fait beaucoup d'attente.
+Cette Â« attente Â» đŸ•™ se mesure en microsecondes, mais tout de mĂȘme, en les cumulant toutes, cela fait beaucoup d'attente au final.
 
-C'est pourquoi il est logique d'utiliser du code asynchrone âžđŸ”€âŻ pour des APIs web.
+C'est pourquoi il est trĂšs logique d'utiliser du code asynchrone âžđŸ”€âŻ pour des APIs web.
 
 Ce type d'asynchronicitĂ© est ce qui a rendu NodeJS populaire (bien que NodeJS ne soit pas parallĂšle) et c'est la force de Go en tant que langage de programmation.
 
@@ -255,11 +255,11 @@ Et comme on peut avoir du parallĂ©lisme et de l'asynchronicitĂ© en mĂȘme temps,
 
 ### Est-ce que la concurrence est mieux que le parallĂ©lisme ? { #is-concurrency-better-than-parallelism }
 
-Nope ! C'est Ă§a la morale de l'histoire.
+Nope ! Ce n'est pas la morale de l'histoire.
 
-La concurrence est diffĂ©rente du parallĂ©lisme. C'est mieux sur des scĂ©narios **spĂ©cifiques** qui impliquent beaucoup d'attente. Ă€ cause de Ă§a, c'est gĂ©nĂ©ralement bien meilleur que le parallĂ©lisme pour le dĂ©veloppement d'applications web. Mais pas pour tout.
+La concurrence est diffĂ©rente du parallĂ©lisme. Et c'est mieux dans des scĂ©narios **spĂ©cifiques** qui impliquent beaucoup d'attente. Ă€ cause de Ă§a, c'est gĂ©nĂ©ralement bien meilleur que le parallĂ©lisme pour le dĂ©veloppement d'applications web. Mais pas pour tout.
 
-Donc pour Ă©quilibrer tout Ă§a, imaginez l'histoire suivante :
+Donc pour Ă©quilibrer tout Ă§a, imaginez l'histoire courte suivante :
 
 > Vous devez nettoyer une grande et sale maison.
 
@@ -269,42 +269,42 @@ Donc pour Ă©quilibrer tout Ă§a, imaginez l'histoire suivante :
 
 Il n'y a plus d'attente đŸ•™ nulle part, juste beaucoup de travail Ă  effectuer, dans diffĂ©rentes piĂšces de la maison.
 
-Vous pourriez diviser en diffĂ©rentes sections comme avec les burgers, d'abord le salon, puis la cuisine, etc. Mais vous n'attendez đŸ•™ rien, vous ne faites que nettoyer et nettoyer, la sĂ©paration en sections ne changerait rien au final.
+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.
 
-Cela prendrait autant de temps pour finir avec ou sans sections (concurrence) et vous auriez effectuĂ© la mĂȘme quantitĂ© de travail.
+Cela prendrait autant de temps pour finir avec ou sans tours (concurrence) et vous auriez effectuĂ© la mĂȘme quantitĂ© de travail.
 
-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.
+Mais dans ce cas, si vous pouviez amener les 8 ex-caissiers/cuisiniers/dĂ©sormais-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**, avec l'aide supplĂ©mentaire, et finir beaucoup plus tĂŽt.
 
 Dans ce scĂ©nario, chacun des nettoyeurs (vous y compris) serait un processeur, faisant sa partie du travail.
 
-Et comme la plupart du temps d'exĂ©cution est pris par du Â« vrai Â» travail (et non de l'attente), et que le travail dans un ordinateur est fait par un <abbr title="Central Processing Unit - UnitĂ© centrale de traitement">CPU</abbr>, ce sont des problĂšmes dits Â« CPU bound Â».
+Et comme la plupart du temps d'exĂ©cution est pris par du vrai travail (et non de l'attente), et que le travail dans un ordinateur est fait par un <abbr title="Central Processing Unit - UnitĂ© centrale de traitement">CPU</abbr>, ce sont des problĂšmes dits Â« CPU bound Â».
 
 ---
 
-Des exemples communs d'opĂ©rations Â« CPU bound Â» sont les procĂ©dĂ©s qui requiĂšrent des traitements mathĂ©matiques complexes.
+Des exemples communs d'opĂ©rations CPU bound sont les choses qui requiĂšrent des traitements mathĂ©matiques complexes.
 
 Par exemple :
 
-* Traitements d'**audio** et d'**images**.
-* La **vision par ordinateur** : une image est composĂ©e de millions de pixels, chaque pixel ayant 3 valeurs / couleurs, les traiter tous va nĂ©cessiter d'effectuer des traitements sur chaque pixel, et de prĂ©fĂ©rence tous en mĂȘme temps.
-* L'apprentissage automatique (ou **Machine Learning**) : cela nĂ©cessite de nombreuses multiplications de matrices et vecteurs. Imaginez une Ă©norme feuille de calcul remplie de nombres que vous multiplierez entre eux tous au mĂȘme moment.
-* L'apprentissage profond (ou **Deep Learning**) : est un sous-domaine du **Machine Learning**, donc les mĂȘmes raisons s'appliquent. Avec la diffĂ©rence qu'il n'y a pas une unique feuille de calcul de nombres Ă  multiplier, mais une Ă©norme quantitĂ© d'entre elles, et dans de nombreux cas, on utilise un processeur spĂ©cial pour construire et / ou utiliser ces modĂšles.
+* Traitements d'**audio** ou d'**images**.
+* **Computer vision** : une image est composĂ©e de millions de pixels, chaque pixel ayant 3 valeurs / couleurs, les traiter nĂ©cessite normalement d'effectuer des calculs sur ces pixels, tous en mĂȘme temps.
+* **Machine Learning** : cela nĂ©cessite normalement de nombreuses multiplications de Â« matrices Â» et de Â« vecteurs Â». Imaginez une Ă©norme feuille de calcul remplie de nombres et les multiplier tous ensemble au mĂȘme moment.
+* **Deep Learning** : c'est un sous-domaine du Machine Learning, donc les mĂȘmes raisons s'appliquent. C'est juste qu'il n'y a pas une unique feuille de calcul de nombres Ă  multiplier, mais une Ă©norme quantitĂ© d'entre elles, et dans de nombreux cas, on utilise un processeur spĂ©cial pour construire et / ou utiliser ces modĂšles.
 
 ### Concurrence + ParallĂ©lisme : Web + Machine Learning { #concurrency-parallelism-web-machine-learning }
 
-Avec **FastAPI** vous pouvez bĂ©nĂ©ficier de la concurrence qui est trĂšs courante en dĂ©veloppement web (c'est l'attrait principal de NodeJS).
+Avec **FastAPI** vous pouvez bĂ©nĂ©ficier de la concurrence qui est trĂšs courante en dĂ©veloppement web (le mĂȘme attrait principal de NodeJS).
 
-Mais vous pouvez aussi profiter du parallĂ©lisme et du multiprocessing (plusieurs processus s'exĂ©cutant en parallĂšle) afin de gĂ©rer des charges **CPU bound** qui sont rĂ©currentes dans les systĂšmes de *Machine Learning*.
+Mais vous pouvez aussi profiter du parallĂ©lisme et du multiprocessing (plusieurs processus s'exĂ©cutant en parallĂšle) afin de gĂ©rer des charges **CPU bound** comme celles des systĂšmes de Machine Learning.
 
-Ça, ajoutĂ© au fait que Python soit le langage le plus populaire pour la **Data Science**, le **Machine Learning** et surtout le **Deep Learning**, font de **FastAPI** un trĂšs bon choix pour les APIs et applications de **Data Science** / **Machine Learning**.
+Ça, ajoutĂ© au simple fait que Python soit le langage principal pour la **Data Science**, le Machine Learning et surtout le Deep Learning, fait de FastAPI un trĂšs bon choix pour les APIs web et applications de Data Science / Machine Learning (entre autres).
 
-Pour comprendre comment mettre en place ce parallĂ©lisme en production, allez lire la section [DĂ©ploiement](deployment/index.md).
+Pour comprendre comment mettre en place ce parallĂ©lisme en production, consultez la section sur le [DĂ©ploiement](deployment/index.md).
 
 ## `async` et `await` { #async-and-await }
 
-Les versions modernes de Python ont une maniĂšre trĂšs intuitive de dĂ©finir le code asynchrone, tout en gardant une apparence de code Â« sĂ©quentiel Â» classique en laissant Python faire l'attente pour vous au bon moment.
+Les versions modernes de Python ont une maniĂšre trĂšs intuitive de dĂ©finir le code asynchrone. Cela le fait ressembler Ă  du code Â« sĂ©quentiel Â» normal et effectue l'« attente Â» pour vous aux bons moments.
 
-Pour une opĂ©ration qui nĂ©cessite de l'attente avant de donner un rĂ©sultat et qui supporte ces nouvelles fonctionnalitĂ©s Python, vous pouvez l'utiliser comme tel :
+Pour une opĂ©ration qui nĂ©cessite de l'attente avant de donner un rĂ©sultat et qui supporte ces nouvelles fonctionnalitĂ©s Python, vous pouvez l'Ă©crire comme ceci :
 
 ```Python
 burgers = await get_burgers(2)
@@ -312,7 +312,7 @@ burgers = await get_burgers(2)
 
 Le mot-clĂ© important ici est `await`. Il informe Python qu'il faut attendre âž que `get_burgers(2)` finisse d'effectuer ses opĂ©rations đŸ•™ avant de stocker les rĂ©sultats dans la variable `burgers`. GrĂące Ă  cela, Python saura qu'il peut aller effectuer d'autres opĂ©rations đŸ”€ âŻ pendant ce temps (comme par exemple recevoir une autre requĂȘte).
 
-Pour que `await` fonctionne, il doit ĂȘtre placĂ© dans une fonction qui supporte l'asynchronicitĂ©. Pour que Ă§a soit le cas, il faut dĂ©clarer cette derniĂšre avec `async def` :
+Pour que `await` fonctionne, il doit ĂȘtre placĂ© dans une fonction qui supporte cette asynchronicitĂ©. Pour que Ă§a soit le cas, il faut dĂ©clarer cette derniĂšre avec `async def` :
 
 ```Python hl_lines="1"
 async def get_burgers(number: int):
@@ -320,7 +320,7 @@ async def get_burgers(number: int):
     return burgers
 ```
 
-... et non `def` :
+... au lieu de `def` :
 
 ```Python hl_lines="2"
 # Ceci n'est pas asynchrone
@@ -331,16 +331,16 @@ def get_sequential_burgers(number: int):
 
 Avec `async def`, Python sait que dans cette fonction il doit prendre en compte les expressions `await`, et qu'il peut mettre en pause âž l'exĂ©cution de la fonction pour aller faire autre chose đŸ”€ avant de revenir.
 
-Pour appeler une fonction dĂ©finie avec `async def`, vous devez utiliser `await`. Donc ceci ne marche pas :
+Lorsque vous voulez appeler une fonction `async def`, vous devez l'« attendre Â». Donc ceci ne marche pas :
 
 ```Python
-# Ceci ne fonctionne pas, car get_burgers a Ă©tĂ© dĂ©fini avec async def
+# Ceci ne fonctionne pas, car get_burgers a Ă©tĂ© dĂ©fini avec async def
 burgers = get_burgers(2)
 ```
 
 ---
 
-Donc, si vous utilisez une bibliothĂšque qui nĂ©cessite que ses fonctions soient appelĂ©es avec `await`, vous devez dĂ©finir la *fonction de chemin d'accĂšs* en utilisant `async def` comme dans :
+Donc, si vous utilisez une bibliothĂšque qui vous indique que vous pouvez l'appeler avec `await`, vous devez crĂ©er les *fonctions de chemin d'accĂšs* qui l'utilisent avec `async def`, comme dans :
 
 ```Python hl_lines="2-3"
 @app.get('/burgers')
@@ -351,13 +351,13 @@ async def read_burgers():
 
 ### Plus de dĂ©tails techniques { #more-technical-details }
 
-Vous avez donc compris que `await` peut seulement ĂȘtre utilisĂ© dans des fonctions dĂ©finies avec `async def`.
+Vous avez peut-ĂȘtre remarquĂ© que `await` peut seulement ĂȘtre utilisĂ© dans des fonctions dĂ©finies avec `async def`.
 
-Mais en mĂȘme temps, les fonctions dĂ©finies avec `async def` doivent ĂȘtre appelĂ©es avec `await` et donc dans des fonctions dĂ©finies elles aussi avec `async def`.
+Mais en mĂȘme temps, les fonctions dĂ©finies avec `async def` doivent ĂȘtre Â« attendues Â». Donc, les fonctions avec `async def` peuvent seulement ĂȘtre appelĂ©es Ă  l'intĂ©rieur de fonctions dĂ©finies elles aussi avec `async def`.
 
-Vous avez donc remarquĂ© ce paradoxe d'Ɠuf et de la poule, comment appelle-t-on la premiĂšre fonction `async` ?
+Donc, Ă  propos de l'Ɠuf et de la poule, comment appelle-t-on la premiĂšre fonction `async` ?
 
-Si vous utilisez **FastAPI**, pas besoin de vous en inquiĂ©ter, car cette Â« premiĂšre Â» fonction sera votre *fonction de chemin d'accĂšs* ; et **FastAPI** saura comment arriver au rĂ©sultat attendu.
+Si vous utilisez **FastAPI**, pas besoin de vous en inquiĂ©ter, car cette Â« premiĂšre Â» fonction sera votre *fonction de chemin d'accĂšs*, et FastAPI saura comment faire ce qu'il faut.
 
 Mais si vous souhaitez utiliser `async` / `await` sans FastAPI, vous pouvez Ă©galement le faire.
 
@@ -367,7 +367,7 @@ Starlette (et **FastAPI**) s’appuie sur [AnyIO](https://anyio.readthedocs.io/e
 
 En particulier, vous pouvez utiliser directement [AnyIO](https://anyio.readthedocs.io/en/stable/) pour vos cas d’usage de concurrence avancĂ©s qui nĂ©cessitent des schĂ©mas plus Ă©laborĂ©s dans votre propre code.
 
-Et mĂȘme si vous n’utilisiez pas FastAPI, vous pourriez aussi Ă©crire vos propres applications async avec [AnyIO](https://anyio.readthedocs.io/en/stable/) pour une grande compatibilitĂ© et pour bĂ©nĂ©ficier de ses avantages (par ex. la Â« structured concurrency Â»).
+Et mĂȘme si vous n’utilisiez pas FastAPI, vous pourriez aussi Ă©crire vos propres applications async avec [AnyIO](https://anyio.readthedocs.io/en/stable/) pour une grande compatibilitĂ© et pour bĂ©nĂ©ficier de ses avantages (par ex. la *structured concurrency*).
 
 J’ai créé une autre bibliothĂšque au-dessus d’AnyIO, comme une fine surcouche, pour amĂ©liorer un peu les annotations de type et obtenir une meilleure **autocomplĂ©tion**, des **erreurs en ligne**, etc. Elle propose Ă©galement une introduction et un tutoriel accessibles pour vous aider Ă  **comprendre** et Ă©crire **votre propre code async** : [Asyncer](https://asyncer.tiangolo.com/). Elle sera particuliĂšrement utile si vous devez **combiner du code async avec du code classique** (bloquant/synchrone).
 
@@ -377,25 +377,25 @@ L'utilisation d'`async` et `await` est relativement nouvelle dans ce langage.
 
 Mais cela rend la programmation asynchrone bien plus simple.
 
-Cette mĂȘme syntaxe (ou presque) a aussi Ă©tĂ© incluse rĂ©cemment dans les versions modernes de JavaScript (dans les navigateurs et NodeJS).
+Cette mĂȘme syntaxe (ou presque) a aussi Ă©tĂ© incluse rĂ©cemment dans les versions modernes de JavaScript (dans le navigateur et NodeJS).
 
 Mais avant Ă§a, gĂ©rer du code asynchrone Ă©tait bien plus complexe et difficile.
 
-Dans les versions prĂ©cĂ©dentes de Python, vous auriez utilisĂ© des threads ou [Gevent](https://www.gevent.org/).  Mais le code aurait Ă©tĂ© bien plus difficile Ă  comprendre, dĂ©bugger, et concevoir.
+Dans les versions prĂ©cĂ©dentes de Python, vous auriez pu utiliser des threads ou [Gevent](https://www.gevent.org/). Mais le code est bien plus difficile Ă  comprendre, dĂ©bugger, et concevoir.
 
-Dans les versions prĂ©cĂ©dentes de JavaScript cĂŽtĂ© navigateur / NodeJS, vous auriez utilisĂ© des Â« callbacks Â». Menant potentiellement Ă  ce que l'on appelle le Â« callback hell Â».
+Dans les versions prĂ©cĂ©dentes de NodeJS / JavaScript de navigateur, vous auriez utilisĂ© des Â« callbacks Â». Ce qui mĂšne au Â« callback hell Â».
 
 ## Coroutines { #coroutines }
 
-« Coroutine Â» est juste un terme Ă©laborĂ© pour dĂ©signer ce qui est retournĂ© par une fonction dĂ©finie avec `async def`. Python sait que c'est comme une fonction classique qui va dĂ©marrer Ă  un moment et terminer Ă  un autre, mais qu'elle peut aussi ĂȘtre mise en pause âž, du moment qu'il y a un `await` dans son contenu.
+**Coroutine** est juste un terme Ă©laborĂ© pour dĂ©signer ce qui est retournĂ© par une fonction dĂ©finie avec `async def`. Python sait que c'est comme une fonction, qui peut dĂ©marrer et qui se terminera Ă  un moment, mais qu'elle peut aussi ĂȘtre mise en pause âž en interne, quand il y a un `await` Ă  l'intĂ©rieur.
 
 Mais toutes ces fonctionnalitĂ©s d'utilisation de code asynchrone avec `async` et `await` sont souvent rĂ©sumĂ©es comme l'utilisation des Â« coroutines Â». On peut comparer cela Ă  la principale fonctionnalitĂ© clĂ© de Go, les Â« Goroutines Â».
 
 ## Conclusion { #conclusion }
 
-Reprenons la phrase du dĂ©but de la page :
+Reprenons la mĂȘme phrase ci-dessus :
 
-> Les versions modernes de Python supportent le **code asynchrone** grĂące aux **« coroutines Â»** avec les syntaxes **`async` et `await`**.
+> Les versions modernes de Python supportent le **« code asynchrone Â»** en utilisant quelque chose appelĂ© **« coroutines Â»**, avec la syntaxe **`async` et `await`**.
 
 Ceci devrait ĂȘtre plus comprĂ©hensible dĂ©sormais. âœš
 
@@ -409,25 +409,25 @@ Vous pouvez probablement ignorer cela.
 
 Ce sont des dĂ©tails trĂšs poussĂ©s sur comment **FastAPI** fonctionne en arriĂšre-plan.
 
-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 }
 
-Quand vous dĂ©clarez une *fonction de chemin d'accĂšs* avec un `def` normal et non `async def`, elle est exĂ©cutĂ©e dans un groupe de threads (threadpool) externe qui est ensuite attendu, plutĂŽt que d'ĂȘtre appelĂ©e directement (car cela bloquerait le serveur).
+Quand vous dĂ©clarez une *fonction de chemin d'accĂšs* avec un `def` normal et non `async def`, elle est exĂ©cutĂ©e dans une threadpool externe qui est ensuite attendue, plutĂŽt que d'ĂȘtre appelĂ©e directement (car cela bloquerait le serveur).
 
-Si vous venez d'un autre framework asynchrone qui ne fonctionne pas comme de la façon dĂ©crite ci-dessus et que vous ĂȘtes habituĂ© Ă  dĂ©finir des *fonctions de chemin d'accĂšs* basiques et purement calculatoires avec un simple `def` pour un faible gain de performance (environ 100 nanosecondes), veuillez noter que dans **FastAPI**, l'effet serait plutĂŽt contraire. Dans ces cas-lĂ , il vaut mieux utiliser `async def` Ă  moins que votre *fonction de chemin d'accĂšs* utilise du code qui effectue des opĂ©rations <abbr title="Input/Output - EntrĂ©es/Sorties: lecture ou Ă©criture sur le disque, communications rĂ©seau.">I/O</abbr> bloquantes.
+Si vous venez d'un autre framework async qui ne fonctionne pas de la façon dĂ©crite ci-dessus et que vous ĂȘtes habituĂ© Ă  dĂ©finir des *fonctions de chemin d'accĂšs* triviales faisant uniquement du calcul avec un simple `def` pour un faible gain de performance (environ 100 nanosecondes), veuillez noter que dans **FastAPI**, l'effet serait plutĂŽt contraire. Dans ces cas-lĂ , il vaut mieux utiliser `async def` Ă  moins que vos *fonctions de chemin d'accĂšs* utilisent du code qui effectue des opĂ©rations <abbr title="Input/Output - EntrĂ©es/Sorties: lecture ou Ă©criture sur le disque, communications rĂ©seau.">I/O</abbr> bloquantes.
 
-Au final, dans les deux situations, il est fort probable que **FastAPI** soit tout de mĂȘme [plus rapide](index.md#performance) que (ou au moins de vitesse Ă©gale Ă ) votre framework prĂ©cĂ©dent.
+Au final, dans les deux situations, il est fort probable que **FastAPI** soit [tout de mĂȘme plus rapide](index.md#performance) que (ou au moins comparable Ă ) votre framework prĂ©cĂ©dent.
 
 ### DĂ©pendances { #dependencies }
 
-La mĂȘme chose s'applique aux [dĂ©pendances](tutorial/dependencies/index.md). Si une dĂ©pendance est dĂ©finie avec `def` plutĂŽt que `async def`, elle est exĂ©cutĂ©e dans la threadpool externe.
+La mĂȘme chose s'applique aux [dĂ©pendances](tutorial/dependencies/index.md). Si une dĂ©pendance est une fonction standard `def` plutĂŽt qu'`async def`, elle est exĂ©cutĂ©e dans la threadpool externe.
 
 ### Sous-dĂ©pendances { #sub-dependencies }
 
-Vous pouvez avoir de multiples dĂ©pendances et [sous-dĂ©pendances](tutorial/dependencies/sub-dependencies.md) dĂ©pendant les unes des autres (en tant que paramĂštres de la dĂ©finition de la *fonction de chemin d'accĂšs*), certaines créées avec `async def` et d'autres avec `def`. Cela fonctionnerait aussi, et celles dĂ©finies avec un simple `def` seraient exĂ©cutĂ©es sur un thread externe (venant de la threadpool) plutĂŽt que d'ĂȘtre Â« attendues Â».
+Vous pouvez avoir de multiples dĂ©pendances et [sous-dĂ©pendances](tutorial/dependencies/sub-dependencies.md) dĂ©pendant les unes des autres (en tant que paramĂštres des dĂ©finitions des fonctions), certaines créées avec `async def` et d'autres avec un `def` normal. Cela fonctionnerait aussi, et celles dĂ©finies avec un `def` normal seraient appelĂ©es sur un thread externe (venant de la threadpool) plutĂŽt que d'ĂȘtre Â« attendues Â».
 
 ### Autres fonctions utilitaires { #other-utility-functions }
 
@@ -435,10 +435,10 @@ Toute autre fonction utilitaire que vous appelez directement peut ĂȘtre créée
 
 Contrairement aux fonctions que FastAPI appelle pour vous : les *fonctions de chemin d'accĂšs* et dĂ©pendances.
 
-Si votre fonction utilitaire est une fonction classique dĂ©finie avec `def`, elle sera appelĂ©e directement (telle qu'Ă©crite dans votre code), pas dans une threadpool ; si la fonction est dĂ©finie avec `async def` alors vous devrez attendre (avec `await`) que cette fonction se termine avant de passer Ă  la suite du code.
+Si votre fonction utilitaire est une fonction classique dĂ©finie avec `def`, elle sera appelĂ©e directement (telle qu'Ă©crite dans votre code), pas dans une threadpool ; si la fonction est dĂ©finie avec `async def` alors vous devez `await` cette fonction lorsque vous l'appelez dans votre code.
 
 ---
 
 Encore une fois, ce sont des dĂ©tails trĂšs techniques qui peuvent ĂȘtre utiles si vous venez ici les chercher.
 
-Sinon, les instructions de la section <a href="#in-a-hurry">Vous ĂȘtes pressĂ©s ?</a> ci-dessus sont largement suffisantes.
+Sinon, les instructions de la section ci-dessus sont largement suffisantes : <a href="#in-a-hurry">Vous ĂȘtes pressĂ©s ?</a>.
index 1ed030f0acfca051ed6b1c22227ae22f16f0384f..36896637210d8be57e38b7526626ac8335ca99c2 100644 (file)
@@ -1,6 +1,6 @@
 # DĂ©ployer FastAPI sur des fournisseurs cloud { #deploy-fastapi-on-cloud-providers }
 
-Vous pouvez utiliser pratiquement n'importe quel fournisseur cloud pour dĂ©ployer votre application FastAPI.
+Vous pouvez utiliser pratiquement **n'importe quel fournisseur cloud** pour dĂ©ployer votre application FastAPI.
 
 Dans la plupart des cas, les principaux fournisseurs cloud proposent des guides pour dĂ©ployer FastAPI avec leurs services.
 
@@ -16,7 +16,7 @@ FastAPI Cloud est le sponsor principal et le financeur des projets open source *
 
 ## Fournisseurs cloud - Sponsors { #cloud-providers-sponsors }
 
-D'autres fournisseurs cloud âœš [**parrainent FastAPI**](../help-fastapi.md#sponsor-the-author) âœš Ă©galement. đŸ™‡
+Certains autres fournisseurs cloud âœš [**parrainent FastAPI**](https://github.com/sponsors/tiangolo) âœš Ă©galement. đŸ™‡
 
 Vous pouvez Ă©galement envisager ces fournisseurs pour suivre leurs guides et essayer leurs services :
 
index 1d5497d93cecfb4a1b98404c7151322e84202e52..d6940c6836c8a889cc3e35f0081aed85eaf29232 100644 (file)
@@ -1,5 +1,6 @@
 # Concepts de dĂ©ploiement { #deployments-concepts }
 
+
 Lorsque vous dĂ©ployez une application **FastAPI**, ou en fait n'importe quel type de web API, il existe plusieurs concepts qui vous importent probablement, et en les utilisant vous pouvez trouver la maniĂšre la **plus appropriĂ©e** de **dĂ©ployer votre application**.
 
 Parmi les concepts importants, on trouve :
index 5184d51df6437cce62a24f7768e9e2b921555257..688f3b5d8cc6725fea4f34ef06a80ab935f63fb8 100644 (file)
@@ -232,7 +232,7 @@ Passez en revue ce que fait chaque ligne en cliquant sur chaque bulle numĂ©rotĂ©
 
 /// warning | Alertes
 
-Vous devez vous assurer d'utiliser **toujours** la **forme exec** de l'instruction `CMD`, comme expliquĂ© ci-dessous.
+Vous devez **toujours** utiliser la **forme exec** de l'instruction `CMD`, comme expliquĂ© ci-dessous.
 
 ///
 
@@ -254,7 +254,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80"]
 CMD fastapi run app/main.py --port 80
 ```
 
-Assurez-vous d'utiliser toujours la forme **exec** pour garantir que FastAPI peut s'arrĂȘter proprement et que les [Ă©vĂ©nements de cycle de vie](../advanced/events.md) sont dĂ©clenchĂ©s.
+Vous devez toujours utiliser la forme **exec** pour garantir que FastAPI peut s'arrĂȘter proprement et que les [Ă©vĂ©nements de cycle de vie](../advanced/events.md) sont dĂ©clenchĂ©s.
 
 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).
 
index 34922f1686277cb8534caf0c9cd67853472bdbdb..5150ecdeb86968f6120c9475257b5ac6ee0b3ee3 100644 (file)
@@ -10,9 +10,9 @@ Si vous ĂȘtes pressĂ© ou si cela ne vous intĂ©resse pas, continuez avec les sect
 
 ///
 
-Pour apprendre les bases du HTTPS, du point de vue d'un utilisateur, consultez [https://howhttps.works/](https://howhttps.works/).
+Pour **apprendre les bases du HTTPS**, du point de vue d'un utilisateur, consultez [https://howhttps.works/](https://howhttps.works/).
 
-Maintenant, du point de vue d'un dĂ©veloppeur, voici plusieurs choses Ă  avoir en tĂȘte en pensant au HTTPS :
+Maintenant, du **point de vue d'un dĂ©veloppeur**, voici plusieurs choses Ă  avoir en tĂȘte en pensant au HTTPS :
 
 * Pour le HTTPS, **le serveur** doit **disposer de Â« certificats Â»** gĂ©nĂ©rĂ©s par une **tierce partie**.
     * Ces certificats sont en rĂ©alitĂ© **acquis** auprĂšs de la tierce partie, et non Â« gĂ©nĂ©rĂ©s Â».
@@ -65,7 +65,7 @@ Voici un exemple de ce Ă  quoi pourrait ressembler une API HTTPS, Ă©tape par Ă©t
 
 Tout commencerait probablement par le fait que vous **acquĂ©riez** un **nom de domaine**. Ensuite, vous le configureriez dans un serveur DNS (possiblement le mĂȘme que votre fournisseur cloud).
 
-Vous obtiendriez probablement un serveur cloud (une machine virtuelle) ou quelque chose de similaire, et il aurait une adresse IP publique <dfn title="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** <dfn title="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**.
 
index 90dd31d854ef2dd16f7097720dec7ff27ef7432b..2d9cc4f8ffdc50694c52a9da346a3778c416dcb0 100644 (file)
@@ -40,7 +40,7 @@ $ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid
 
 Cela fonctionnerait pour la plupart des cas. đŸ˜Ž
 
-Vous pourriez utiliser cette commande par exemple pour dĂ©marrer votre application **FastAPI** dans un conteneur, sur un serveur, etc.
+Vous pourriez utiliser cette commande par exemple pour dĂ©marrer votre **FastAPI** app dans un conteneur, sur un serveur, etc.
 
 ## Serveurs ASGI { #asgi-servers }
 
@@ -48,7 +48,7 @@ Allons un peu plus en dĂ©tail.
 
 FastAPI utilise un standard pour construire des frameworks web Python et des serveurs appelĂ© <abbr title="Asynchronous Server Gateway Interface - Interface passerelle serveur asynchrone">ASGI</abbr>. FastAPI est un framework web ASGI.
 
-La principale chose dont vous avez besoin pour exĂ©cuter une application **FastAPI** (ou toute autre application ASGI) sur une machine serveur distante est un programme serveur ASGI comme **Uvicorn**, c'est celui utilisĂ© par dĂ©faut par la commande `fastapi`.
+La principale chose dont vous avez besoin pour exĂ©cuter une application **FastAPI** (ou toute autre application ASGI) sur une machine serveur distante est un programme serveur ASGI comme **Uvicorn**, c'est celui fourni par dĂ©faut avec la commande `fastapi`.
 
 Il existe plusieurs alternatives, notamment :
 
@@ -61,9 +61,9 @@ Il existe plusieurs alternatives, notamment :
 
 Il y a un petit dĂ©tail sur les noms Ă  garder Ă  l'esprit. đŸ’Ą
 
-Le mot Â« serveur Â» est couramment utilisĂ© pour dĂ©signer Ă  la fois l'ordinateur distant/cloud (la machine physique ou virtuelle) et Ă©galement le programme qui s'exĂ©cute sur cette machine (par exemple, Uvicorn).
+Le mot Â«Â **serveur** » est couramment utilisĂ© pour dĂ©signer Ă  la fois l'ordinateur distant/cloud (la machine physique ou virtuelle) et Ă©galement le programme qui s'exĂ©cute sur cette machine (par exemple, Uvicorn).
 
-Gardez cela Ă  l'esprit lorsque vous lisez Â« serveur Â» en gĂ©nĂ©ral, cela pourrait faire rĂ©fĂ©rence Ă  l'une de ces deux choses.
+Gardez simplement Ă  l'esprit que lorsque vous lisez Â«Â serveur » en gĂ©nĂ©ral, cela pourrait faire rĂ©fĂ©rence Ă  l'une de ces deux choses.
 
 Lorsqu'on se rĂ©fĂšre Ă  la machine distante, il est courant de l'appeler **serveur**, mais aussi **machine**, **VM** (machine virtuelle), **nƓud**. Tout cela fait rĂ©fĂ©rence Ă  un type de machine distante, exĂ©cutant normalement Linux, sur laquelle vous exĂ©cutez des programmes.
 
@@ -117,7 +117,7 @@ $ uvicorn main:app --host 0.0.0.0 --port 80
 
 La commande `uvicorn main:app` fait rĂ©fĂ©rence Ă Â :
 
-* `main` : le fichier `main.py` (le Â« module Â» Python).
+* `main` : le fichier `main.py` (le Â«Â module » Python).
 * `app` : l'objet créé dans `main.py` avec la ligne `app = FastAPI()`.
 
 C'est Ă©quivalent Ă Â :
index 59e0b3f15198fe4f2261f6c1137b0f03d3b677d7..a29b3b261ce0eb5e5f9ca71c03ccf78b15ee01ac 100644 (file)
@@ -1,6 +1,6 @@
 # Prise en charge des Ă©diteurs { #editor-support }
 
-L’extension officielle [Extension FastAPI](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode) amĂ©liore votre flux de dĂ©veloppement FastAPI grĂące Ă  la dĂ©couverte des chemins d'accĂšs, Ă  la navigation, ainsi qu’au dĂ©ploiement sur FastAPI Cloud et Ă  la diffusion en direct des journaux.
+L’extension officielle [Extension FastAPI](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode) amĂ©liore votre flux de dĂ©veloppement FastAPI grĂące Ă  la dĂ©couverte des *chemins d'accĂšs*, Ă  la navigation, ainsi qu’au dĂ©ploiement sur FastAPI Cloud et Ă  la diffusion en direct des journaux.
 
 Pour plus de dĂ©tails sur l’extension, reportez-vous au README sur le [rĂ©fĂ©rentiel GitHub](https://github.com/fastapi/fastapi-vscode).
 
index 7f052f27f69e9961d42e7d6eb658f6d52f450542..065194700b26b38f0134de31b620adf9d4cf7c89 100644 (file)
@@ -6,13 +6,13 @@ Si vous savez dĂ©jĂ  ce que sont les Â« variables d'environnement Â» et comment
 
 ///
 
-Une variable d'environnement (Ă©galement appelĂ©e Â« env var Â») est une variable qui vit en dehors du code Python, dans le systĂšme d'exploitation, et qui peut ĂȘtre lue par votre code Python (ou par d'autres programmes Ă©galement).
+Une variable d'environnement (Ă©galement appelĂ©e Â« **env var** Â») est une variable qui vit **en dehors** du code Python, dans le **systĂšme d'exploitation**, et qui peut ĂȘtre lue par votre code Python (ou par d'autres programmes Ă©galement).
 
 Les variables d'environnement peuvent ĂȘtre utiles pour gĂ©rer des **paramĂštres** d'application, dans le cadre de l'**installation** de Python, etc.
 
 ## CrĂ©er et utiliser des variables d'environnement { #create-and-use-env-vars }
 
-Vous pouvez crĂ©er et utiliser des variables d'environnement dans le **shell (terminal)**, sans avoir besoin de Python :
+Vous pouvez **crĂ©er** et utiliser des variables d'environnement dans le **shell (terminal)**, sans avoir besoin de Python :
 
 //// tab | Linux, macOS, Windows Bash
 
@@ -54,7 +54,7 @@ Hello Wade Wilson
 
 Vous pouvez Ă©galement crĂ©er des variables d'environnement **en dehors** de Python, dans le terminal (ou par tout autre moyen), puis les **lire en Python**.
 
-Par exemple, vous pouvez avoir un fichier `main.py` contenant :
+Par exemple, vous pouvez avoir un fichier `main.py` contenant :
 
 ```Python hl_lines="3"
 import os
@@ -71,7 +71,7 @@ S'il n'est pas fourni, c'est `None` par dĂ©faut ; ici, nous fournissons `"World"
 
 ///
 
-Vous pouvez ensuite exĂ©cuter ce programme Python :
+Vous pouvez ensuite exĂ©cuter ce programme Python :
 
 //// tab | Linux, macOS, Windows Bash
 
@@ -131,7 +131,7 @@ Comme les variables d'environnement peuvent ĂȘtre dĂ©finies en dehors du code, m
 
 Vous pouvez Ă©galement crĂ©er une variable d'environnement uniquement pour l'**invocation d'un programme spĂ©cifique**, qui ne sera disponible que pour ce programme et uniquement pendant sa durĂ©e d'exĂ©cution.
 
-Pour cela, crĂ©ez-la juste avant le programme, sur la mĂȘme ligne :
+Pour cela, crĂ©ez-la juste avant le programme, sur la mĂȘme ligne :
 
 <div class="termy">
 
@@ -159,7 +159,7 @@ Vous pouvez en lire davantage sur [The Twelve-Factor App : Config](https://12fac
 
 ## GĂ©rer les types et la validation { #types-and-validation }
 
-Ces variables d'environnement ne peuvent gĂ©rer que des **chaĂźnes de texte**, car elles sont externes Ă  Python et doivent ĂȘtre compatibles avec les autres programmes et le reste du systĂšme (et mĂȘme avec diffĂ©rents systĂšmes d'exploitation, comme Linux, Windows, macOS).
+Ces variables d'environnement ne peuvent gĂ©rer que des **chaĂźnes de texte**, car elles sont externes Ă  Python et doivent ĂȘtre compatibles avec les autres programmes et le reste du systĂšme (et mĂȘme avec diffĂ©rents systĂšmes d'exploitation, comme Linux, Windows et macOS).
 
 Cela signifie que **toute valeur** lue en Python Ă  partir d'une variable d'environnement **sera une `str`**, et que toute conversion vers un autre type ou toute validation doit ĂȘtre effectuĂ©e dans le code.
 
@@ -167,11 +167,11 @@ Vous en apprendrez davantage sur l'utilisation des variables d'environnement pou
 
 ## Variable d'environnement `PATH` { #path-environment-variable }
 
-Il existe une **variable d'environnement spĂ©ciale** appelĂ©e **`PATH`** qui est utilisĂ©e par les systĂšmes d'exploitation (Linux, macOS, Windows) pour trouver les programmes Ă  exĂ©cuter.
+Il existe une variable d'environnement **spĂ©ciale** appelĂ©e **`PATH`** qui est utilisĂ©e par les systĂšmes d'exploitation (Linux, macOS, Windows) pour trouver les programmes Ă  exĂ©cuter.
 
 La valeur de la variable `PATH` est une longue chaĂźne composĂ©e de rĂ©pertoires sĂ©parĂ©s par deux-points `:` sous Linux et macOS, et par point-virgule `;` sous Windows.
 
-Par exemple, la variable d'environnement `PATH` peut ressembler Ă  ceci :
+Par exemple, la variable d'environnement `PATH` peut ressembler Ă  ceci :
 
 //// tab | Linux, macOS
 
@@ -179,7 +179,7 @@ Par exemple, la variable d'environnement `PATH` peut ressembler Ă  ceci :
 /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
 ```
 
-Cela signifie que le systĂšme doit rechercher les programmes dans les rĂ©pertoires :
+Cela signifie que le systĂšme doit rechercher les programmes dans les rĂ©pertoires :
 
 * `/usr/local/bin`
 * `/usr/bin`
@@ -195,7 +195,7 @@ Cela signifie que le systĂšme doit rechercher les programmes dans les rĂ©pertoir
 C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32
 ```
 
-Cela signifie que le systĂšme doit rechercher les programmes dans les rĂ©pertoires :
+Cela signifie que le systĂšme doit rechercher les programmes dans les rĂ©pertoires :
 
 * `C:\Program Files\Python312\Scripts`
 * `C:\Program Files\Python312`
@@ -219,7 +219,7 @@ Supposons que vous installiez Python et qu'il se retrouve dans un rĂ©pertoire `/
 
 Si vous acceptez de mettre Ă  jour la variable d'environnement `PATH`, l'installateur ajoutera `/opt/custompython/bin` Ă  la variable d'environnement `PATH`.
 
-Cela pourrait ressembler Ă  ceci :
+Cela pourrait ressembler Ă  ceci :
 
 ```plaintext
 /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/custompython/bin
@@ -243,7 +243,7 @@ Ainsi, lorsque vous tapez `python` dans le terminal, le systĂšme trouvera le pro
 
 ////
 
-Ainsi, si vous tapez :
+Ainsi, si vous tapez :
 
 <div class="termy">
 
@@ -257,7 +257,7 @@ $ python
 
 Le systĂšme va **trouver** le programme `python` dans `/opt/custompython/bin` et l'exĂ©cuter.
 
-Cela reviendrait Ă  peu prĂšs Ă  taper :
+Cela reviendrait Ă  peu prĂšs Ă  taper :
 
 <div class="termy">
 
@@ -273,7 +273,7 @@ $ /opt/custompython/bin/python
 
 Le systĂšme va **trouver** le programme `python` dans `C:\opt\custompython\bin\python` et l'exĂ©cuter.
 
-Cela reviendrait Ă  peu prĂšs Ă  taper :
+Cela reviendrait Ă  peu prĂšs Ă  taper :
 
 <div class="termy">
 
index 0bb16b343793957e432b6db376b923fbb68d965b..4ded18206a6a9516ec818ccc65f5890dad4c4634 100644 (file)
@@ -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 interaction](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)
+![interaction avec Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)
 
 * Documentation d'API alternative avec [**ReDoc**](https://github.com/Rebilly/ReDoc).
 
@@ -85,11 +85,11 @@ Voici comment votre Ă©diteur peut vous aider :
 
 * dans [Visual Studio Code](https://code.visualstudio.com/) :
 
-![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)
+![support de l'Ă©diteur](https://fastapi.tiangolo.com/img/vscode-completion.png)
 
 * dans [PyCharm](https://www.jetbrains.com/pycharm/) :
 
-![editor support](https://fastapi.tiangolo.com/img/pycharm-completion.png)
+![support de l'Ă©diteur](https://fastapi.tiangolo.com/img/pycharm-completion.png)
 
 Vous obtiendrez de l'autocomplĂ©tion dans du code que vous auriez pu considĂ©rer impossible auparavant. Par exemple, la clĂ© `price` Ă  l'intĂ©rieur d'un corps JSON (qui aurait pu ĂȘtre imbriquĂ©) provenant d'une requĂȘte.
 
@@ -105,7 +105,7 @@ Mais par dĂ©faut, tout **« just works Â»**.
 
 * Validation pour la plupart (ou tous ?) des **types de donnĂ©es** Python, y compris :
     * objets JSON (`dict`).
-    * tableaux JSON (`list`) dĂ©finissant les types d'Ă©lĂ©ments.
+    * tableau JSON (`list`) dĂ©finissant les types d'Ă©lĂ©ments.
     * champs String (`str`), dĂ©finition des longueurs minimale et maximale.
     * nombres (`int`, `float`) avec valeurs minimale et maximale, etc.
 
index 7a6da3c0872d94526f3e77d42c193e5f8ffd9205..db46bcbc17e15d76c2a72c4f45669977c0ca239c 100644 (file)
@@ -1,5 +1,6 @@
 # Aider { #help }
 
+
 Souhaitez-vous aider FastAPI ou obtenir de l'aide Ă  propos de FastAPI ?
 
 Il existe des moyens trĂšs simples d'aider et d'obtenir de l'aide.
index 34db055587241da7cb0fb53c1152e2fbb6d1b680..e4f876323307f02e36b32d65f155d6d80715b9df 100644 (file)
@@ -50,11 +50,11 @@ Par exemple, pour dĂ©sactiver `deepLinking`, vous pourriez passer ces paramĂštre
 
 ## 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/).
 
 ## ParamĂštres JavaScript uniquement { #javascript-only-settings }
 
-Swagger UI permet Ă©galement d'autres configurations qui sont des objets rĂ©servĂ©s Ă  JavaScript (par exemple, des fonctions JavaScript).
+Swagger UI permet Ă©galement d'autres configurations qui sont des objets **rĂ©servĂ©s Ă  JavaScript** (par exemple, des fonctions JavaScript).
 
 FastAPI inclut aussi ces paramĂštres `presets` rĂ©servĂ©s Ă  JavaScript :
 
index 4acb6464f84a5709ef1d3586944510e822b63ee8..0b3ab88b984768dba784960abe346fb5254887b8 100644 (file)
@@ -66,7 +66,7 @@ Le `dict` `scope` et la fonction `receive` font tous deux partie de la spĂ©cific
 
 Et ces deux Ă©lĂ©ments, `scope` et `receive`, sont ce dont on a besoin pour crĂ©er une nouvelle instance de `Request`.
 
-Pour en savoir plus sur `Request`, consultez [la documentation de Starlette sur les requĂȘtes](https://www.starlette.dev/requests/).
+Pour en savoir plus sur `Request`, consultez [les documents de Starlette sur les requĂȘtes](https://www.starlette.dev/requests/).
 
 ///
 
index 912608a9814845d057c056341c17246633969a07..10fa6be8a8efd808c52f6389d6869e7d2a7a6b2b 100644 (file)
@@ -19,9 +19,9 @@ Assurez-vous d'Ă©valuer si les **bĂ©nĂ©fices** pour votre cas d'utilisation comp
 Voici quelques bibliothĂšques **GraphQL** qui prennent en charge **ASGI**. Vous pouvez les utiliser avec **FastAPI** :
 
 * [Strawberry](https://strawberry.rocks/) đŸ“
-    * Avec [la documentation pour FastAPI](https://strawberry.rocks/docs/integrations/fastapi)
+    * Avec [les documents pour FastAPI](https://strawberry.rocks/docs/integrations/fastapi)
 * [Ariadne](https://ariadnegraphql.org/)
-    * Avec [la documentation pour FastAPI](https://ariadnegraphql.org/docs/fastapi-integration)
+    * Avec [les documents pour FastAPI](https://ariadnegraphql.org/docs/fastapi-integration)
 * [Tartiflette](https://tartiflette.io/)
     * Avec [Tartiflette ASGI](https://tartiflette.github.io/tartiflette-asgi/) pour fournir l'intĂ©gration ASGI
 * [Graphene](https://graphene-python.org/)
@@ -39,7 +39,7 @@ Voici un petit aperçu de la maniĂšre dont vous pouvez intĂ©grer Strawberry avec
 
 Vous pouvez en apprendre davantage sur Strawberry dans la [documentation de Strawberry](https://strawberry.rocks/).
 
-Et Ă©galement la documentation sur [Strawberry avec FastAPI](https://strawberry.rocks/docs/integrations/fastapi).
+Et Ă©galement les documents sur [Strawberry avec FastAPI](https://strawberry.rocks/docs/integrations/fastapi).
 
 ## Ancien `GraphQLApp` de Starlette { #older-graphqlapp-from-starlette }
 
index 99d68ba817fe1c608301cec0d8149af85430696e..48d4b3f2e693e4b9b2e80806bea0ab220e32330f 100644 (file)
@@ -8,6 +8,8 @@ FastAPI version 0.119.0 a introduit une prise en charge partielle de Pydantic v1
 
 FastAPI 0.126.0 a supprimĂ© la prise en charge de Pydantic v1, tout en continuant Ă  prendre en charge `pydantic.v1` pendant un certain temps.
 
+FastAPI 0.128.0 a Ă©galement supprimĂ© la prise en charge de `pydantic.v1`, donc les derniĂšres versions de FastAPI nĂ©cessitent Pydantic v2.
+
 /// warning | Alertes
 
 L'Ă©quipe Pydantic a arrĂȘtĂ© la prise en charge de Pydantic v1 pour les derniĂšres versions de Python, Ă  partir de **Python 3.14**.
@@ -54,6 +56,16 @@ Cela signifie que vous pouvez installer la derniĂšre version de Pydantic v2 et i
 
 ### Prise en charge de FastAPI pour Pydantic v1 dans v2 { #fastapi-support-for-pydantic-v1-in-v2 }
 
+/// warning | Alertes
+
+Cette prise en charge FastAPI des modĂšles `pydantic.v1` a Ă©tĂ© ajoutĂ©e dans **FastAPI 0.119.0** et supprimĂ©e dans **FastAPI 0.128.0**. Elle Ă©tait destinĂ©e Ă  ĂȘtre une aide temporaire pour la migration vers Pydantic v2.
+
+Dans les versions actuelles de FastAPI, l'utilisation d'un modĂšle `pydantic.v1` dans votre application lĂšvera une erreur.
+
+Le reste de cette section dĂ©crit la prise en charge temporaire disponible uniquement dans ces anciennes versions.
+
+///
+
 Depuis FastAPI 0.119.0, il existe Ă©galement une prise en charge partielle de Pydantic v1 depuis l'intĂ©rieur de Pydantic v2, pour faciliter la migration vers v2.
 
 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.
@@ -122,6 +134,12 @@ Si vous devez utiliser certains des outils spĂ©cifiques Ă  FastAPI pour les para
 
 ### Migrer par Ă©tapes { #migrate-in-steps }
 
+/// warning | Alertes
+
+La migration progressive utilisant Ă  la fois des modĂšles Pydantic v1 et v2 dans la mĂȘme application dĂ©crite ci-dessous ne fonctionne que dans **FastAPI 0.119.0 Ă  0.127.x**. Elle a Ă©tĂ© supprimĂ©e dans **FastAPI 0.128.0**, les derniĂšres versions nĂ©cessitent des modĂšles **Pydantic v2**.
+
+///
+
 /// tip | Astuce
 
 Essayez d'abord avec `bump-pydantic` ; si vos tests passent et que cela fonctionne, vous avez tout terminĂ© en une seule commande. âœš
index aef467ed67fddefb017c5649c8135bc765037793..4cb92c1df844d0caf372b6f96fd31af25fe41522 100644 (file)
@@ -34,7 +34,7 @@ Mais si vous utilisez le mĂȘme modĂšle en sortie, comme ici :
 
 {* ../../docs_src/separate_openapi_schemas/tutorial001_py310.py hl[19] *}
 
-... alors, comme `description` a une valeur par dĂ©faut, si vous ne retournez rien pour ce champ, il aura tout de mĂȘme cette **valeur par dĂ©faut**.
+... alors, comme `description` a une valeur par dĂ©faut, si vous **ne retournez rien** pour ce champ, il aura tout de mĂȘme cette **valeur par dĂ©faut**.
 
 ### ModĂšle pour les donnĂ©es de rĂ©ponse en sortie { #model-for-output-response-data }
 
@@ -52,8 +52,8 @@ La maniĂšre de dĂ©crire cela dans OpenAPI est de marquer ce champ comme **requis
 
 Pour cette raison, le schĂ©ma JSON d'un modĂšle peut ĂȘtre diffĂ©rent selon qu'il est utilisĂ© pour **l'entrĂ©e ou la sortie** :
 
-- pour **l'entrĂ©e**, `description` ne sera **pas requis**
-- pour **la sortie**, il sera **requis** (et Ă©ventuellement `None`, ou en termes JSON, `null`)
+* pour **l'entrĂ©e**, `description` ne sera **pas requis**
+* pour **la sortie**, il sera **requis** (et Ă©ventuellement `None`, ou en termes JSON, `null`)
 
 ### ModĂšle de sortie dans les documents { #model-for-output-in-docs }
 
@@ -79,7 +79,7 @@ Avec cette fonctionnalitĂ© de **Pydantic v2**, la documentation de votre API est
 
 ## Ne pas sĂ©parer les schĂ©mas { #do-not-separate-schemas }
 
-Il existe des cas oĂč vous pourriez vouloir avoir le **mĂȘme schĂ©ma pour l'entrĂ©e et la sortie**.
+Maintenant, il existe des cas oĂč vous pourriez vouloir avoir le **mĂȘme schĂ©ma pour l'entrĂ©e et la sortie**.
 
 Le cas d'usage principal est probablement que vous avez dĂ©jĂ  du code client/SDKs gĂ©nĂ©rĂ©s automatiquement et que vous ne souhaitez pas encore mettre Ă  jour tout ce code client/ces SDKs gĂ©nĂ©rĂ©s automatiquement ; vous le ferez sans doute Ă  un moment donnĂ©, mais peut‑ĂȘtre pas tout de suite.
 
@@ -95,7 +95,7 @@ La prise en charge de `separate_input_output_schemas` a Ă©tĂ© ajoutĂ©e dans Fast
 
 ### Utiliser le mĂȘme schĂ©ma pour les modĂšles d'entrĂ©e et de sortie dans les documents { #same-schema-for-input-and-output-models-in-docs }
 
-DĂ©sormais, il n'y aura qu'un seul schĂ©ma pour l'entrĂ©e et la sortie du modĂšle, uniquement `Item`, et `description` ne sera pas requis :
+DĂ©sormais, il n'y aura qu'un seul schĂ©ma pour l'entrĂ©e et la sortie du modĂšle, uniquement `Item`, et `description` sera **non requis** :
 
 <div class="screenshot">
 <img src="/img/tutorial/separate-openapi-schemas/image05.png">
index 3cfcdfd291bf7586c82f1134f5390d128d954700..ccc00236a6d93f4855908c00ac955bee6e0e66bb 100644 (file)
@@ -45,7 +45,7 @@ Les principales fonctionnalitĂ©s sont :
 * **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 Ă  coder** : augmente la vitesse de dĂ©veloppement des fonctionnalitĂ©s d'environ 200 % Ă  300 %. *
 * **Moins de bugs** : rĂ©duit d'environ 40 % les erreurs induites par le dĂ©veloppeur. *
-* **Intuitif** : excellente compatibilitĂ© avec les Ă©diteurs. <dfn title="Ă©galement connu sous le nom de : auto-complĂ©tion, autocomplĂ©tion, IntelliSense">AutocomplĂ©tion</dfn> partout. Moins de temps passĂ© Ă  dĂ©boguer.
+* **Intuitif** : excellente compatibilitĂ© avec les Ă©diteurs. <dfn title="Ă©galement connu sous le nom de : autocomplĂ©tion, autocomplĂ©tion, IntelliSense">AutocomplĂ©tion</dfn> partout. Moins de temps passĂ© Ă  dĂ©boguer.
 * **Facile** : conçu pour ĂȘtre facile Ă  utiliser et Ă  apprendre. Moins de temps passĂ© Ă  lire les documents.
 * **Concis** : diminue la duplication de code. Plusieurs fonctionnalitĂ©s Ă  partir de chaque dĂ©claration de paramĂštre. Moins de bugs.
 * **Robuste** : obtenez un code prĂȘt pour la production. Avec une documentation interactive automatique.
@@ -192,7 +192,7 @@ $ pip install "fastapi[standard]"
 
 </div>
 
-**Remarque** : Vous devez vous assurer de mettre Â« fastapi[standard] Â» entre guillemets pour garantir que cela fonctionne dans tous les terminaux.
+**Remarque** : Vous devez vous assurer de mettre `"fastapi[standard]"` entre guillemets pour garantir que cela fonctionne dans tous les terminaux.
 
 ## Exemple { #example }
 
@@ -239,7 +239,7 @@ async def read_item(item_id: int, q: str | None = None):
 
 **Remarque** :
 
-Si vous ne savez pas, consultez la section Â« Vous ĂȘtes pressĂ©s ? Â» Ă  propos de [`async` et `await` dans la documentation](https://fastapi.tiangolo.com/fr/async/#in-a-hurry).
+Si vous ne savez pas, consultez la section Â« Vous ĂȘtes pressĂ©s ? Â» Ă  propos de [`async` et `await` dans les documents](https://fastapi.tiangolo.com/fr/async/#in-a-hurry).
 
 </details>
 
index e0636bfe55a9d5d21532113a7003e485fa90c607..b1f3f6cc49fa8611f62a06034343d148b23c9aaf 100644 (file)
@@ -1,5 +1,6 @@
 # ModĂšle Full Stack FastAPI { #full-stack-fastapi-template }
 
+
 Les modĂšles, bien qu'ils soient gĂ©nĂ©ralement livrĂ©s avec une configuration spĂ©cifique, sont conçus pour ĂȘtre flexibles et personnalisables. Cela vous permet de les modifier et de les adapter aux exigences de votre projet, ce qui en fait un excellent point de dĂ©part. đŸ
 
 Vous pouvez utiliser ce modĂšle pour dĂ©marrer, car il inclut une grande partie de la configuration initiale, la sĂ©curitĂ©, la base de donnĂ©es et quelques endpoints d'API dĂ©jĂ  prĂȘts pour vous.
index 55bc8bdc9e3d5bffed5f408e5b2363a91c87580f..8e9dbc598eb93e81ab946ea7b5cb647f0ef8116f 100644 (file)
@@ -44,7 +44,7 @@ C'est un programme trĂšs simple.
 
 Mais maintenant imaginez que vous l'Ă©criviez de zĂ©ro.
 
-À un certain moment, vous auriez commencĂ© la dĂ©finition de la fonction, vous aviez les paramĂštres prĂȘts ...
+À un moment donnĂ©, vous commencez Ă  dĂ©finir la fonction, et vous avez les paramĂštres prĂȘts ...
 
 Mais ensuite vous devez appeler Â« cette mĂ©thode qui convertit la premiĂšre lettre en majuscule Â».
 
@@ -279,13 +279,13 @@ Ensuite, vous crĂ©ez une instance de cette classe avec certaines valeurs et elle
 
 Et vous obtenez tout le support de l'Ă©diteur avec cet objet rĂ©sultant.
 
-Un exemple tirĂ© de la documentation officielle de Pydantic :
+Un exemple tirĂ© des documents officiels de Pydantic :
 
 {* ../../docs_src/python_types/tutorial011_py310.py *}
 
 /// note | Remarque
 
-Pour en savoir plus Ă  propos de [Pydantic, consultez sa documentation](https://docs.pydantic.dev/).
+Pour en savoir plus Ă  propos de [Pydantic, consultez ses documents](https://docs.pydantic.dev/).
 
 ///
 
@@ -305,7 +305,7 @@ Python lui-mĂȘme ne fait rien avec ce `Annotated`. Et pour les Ă©diteurs et autr
 
 Mais vous pouvez utiliser cet espace dans `Annotated` pour fournir Ă  **FastAPI** des mĂ©tadonnĂ©es supplĂ©mentaires sur la façon dont vous voulez que votre application se comporte.
 
-L'important Ă  retenir est que **le premier Â« paramĂštre de type Â»** que vous passez Ă  `Annotated` est le **type rĂ©el**. Le reste n'est que des mĂ©tadonnĂ©es pour d'autres outils.
+L'important Ă  retenir est que **le premier *paramĂštre de type*** que vous passez Ă  `Annotated` est le **type rĂ©el**. Le reste n'est que des mĂ©tadonnĂ©es pour d'autres outils.
 
 Pour l'instant, vous avez juste besoin de savoir que `Annotated` existe, et que c'est du Python standard. đŸ˜Ž
 
index 0e331e13962d58f4b9eebdb911f8354891594ea9..92976bca0373d5cab0422f1b8155fab87ea833ff 100644 (file)
@@ -17,16 +17,16 @@ Supposons que vous ayez une structure de fichiers comme ceci :
 ```
 .
 â”œâ”€â”€ app
-│   â”œâ”€â”€ __init__.py
-│   â”œâ”€â”€ main.py
-│   â”œâ”€â”€ dependencies.py
-│   â””── routers
-│   â”‚   â”œâ”€â”€ __init__.py
-│   â”‚   â”œâ”€â”€ items.py
-│   â”‚   â””── users.py
-│   â””── internal
-│       â”œâ”€â”€ __init__.py
-│       â””── admin.py
+│   â”œâ”€â”€ __init__.py
+│   â”œâ”€â”€ main.py
+│   â”œâ”€â”€ dependencies.py
+│   â””── routers
+│   â”‚   â”œâ”€â”€ __init__.py
+│   â”‚   â”œâ”€â”€ items.py
+│   â”‚   â””── users.py
+│   â””── internal
+│       â”œâ”€â”€ __init__.py
+│       â””── admin.py
 ```
 
 /// tip | Astuce
@@ -283,7 +283,7 @@ Mais nous pouvons toujours ajouter _davantage_ de `tags` qui seront appliquĂ©s 
 
 /// tip | Astuce
 
-Ce dernier *chemin d'accĂšs* aura la combinaison de tags : `["items", "custom"]`.
+Ce dernier chemin d'accĂšs aura la combinaison de tags : `["items", "custom"]`.
 
 Et il aura Ă©galement les deux rĂ©ponses dans la documentation, une pour `404` et une pour `403`.
 
@@ -453,7 +453,7 @@ et cela fonctionnera correctement, avec tous les autres *chemins d'accĂšs* ajout
 
 /// note | DĂ©tails trĂšs techniques
 
-Note : c'est un dĂ©tail trĂšs technique que vous pouvez probablement **simplement ignorer**.
+**Remarque** : c'est un dĂ©tail trĂšs technique que vous pouvez probablement **simplement ignorer**.
 
 ---
 
@@ -490,13 +490,13 @@ Vous pourriez aussi passer le chemin Ă  la commande, comme :
 $ fastapi dev app/main.py
 ```
 
-Mais vous devriez vous rappeler de passer le bon chemin Ă  chaque fois que vous appelez la commande `fastapi`.
+Mais vous devez vous rappeler de passer le bon chemin Ă  chaque fois que vous appelez la commande `fastapi`.
 
 En outre, d'autres outils pourraient ne pas ĂȘtre en mesure de la trouver, par exemple l'[Extension VS Code](../editor-support.md) ou [FastAPI Cloud](https://fastapicloud.com), il est donc recommandĂ© d'utiliser l'`entrypoint` dans `pyproject.toml`.
 
 ///
 
-## Consulter la documentation API automatique { #check-the-automatic-api-docs }
+## Consulter les documents d'API automatiques { #check-the-automatic-api-docs }
 
 Maintenant, exĂ©cutez votre application :
 
@@ -512,7 +512,7 @@ $ fastapi dev
 
 Et ouvrez les documents Ă  [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
 
-Vous verrez la documentation API automatique, incluant les chemins de tous les sous-modules, utilisant les bons chemins (et prĂ©fixes) et les bons tags :
+Vous verrez les documents d'API automatiques, incluant les chemins de tous les sous-modules, utilisant les bons chemins (et prĂ©fixes) et les bons tags :
 
 <img src="/img/tutorial/bigger-applications/image01.png">
 
index 014551bc7d0e2e6f9e69eb3c7736e66148749886..051317a8c80ed717fc4126bab139fd9d943bdf5d 100644 (file)
@@ -1,6 +1,6 @@
 # Corps - ModĂšles imbriquĂ©s { #body-nested-models }
 
-Avec FastAPI, vous pouvez dĂ©finir, valider, documenter et utiliser des modĂšles imbriquĂ©s Ă  n'importe quelle profondeur (grĂące Ă  Pydantic).
+Avec **FastAPI**, vous pouvez dĂ©finir, valider, documenter et utiliser des modĂšles imbriquĂ©s Ă  n'importe quelle profondeur (grĂące Ă  Pydantic).
 
 ## DĂ©clarer des champs de liste { #list-fields }
 
@@ -69,7 +69,7 @@ Nous pouvons ensuite l'utiliser comme type d'un attribut :
 
 {* ../../docs_src/body_nested_models/tutorial004_py310.py hl[18] *}
 
-Cela signifie que FastAPI attendrait un corps similaire Ă  :
+Cela signifie que **FastAPI** attendrait un corps similaire Ă  :
 
 ```JSON
 {
@@ -85,7 +85,7 @@ Cela signifie que FastAPI attendrait un corps similaire Ă  :
 }
 ```
 
-LĂ  encore, avec cette simple dĂ©claration, avec FastAPI vous obtenez :
+LĂ  encore, avec cette simple dĂ©claration, avec **FastAPI** vous obtenez :
 
 - Prise en charge par l'Ă©diteur (autocomplĂ©tion, etc.), mĂȘme pour les modĂšles imbriquĂ©s
 - Conversion des donnĂ©es
@@ -209,7 +209,7 @@ Et le `dict` que vous recevez dans `weights` aura en rĂ©alitĂ© des clĂ©s `int` e
 
 ## RĂ©capitulatif { #recap }
 
-Avec FastAPI, vous bĂ©nĂ©ficiez de la flexibilitĂ© maximale fournie par les modĂšles Pydantic, tout en gardant votre code simple, concis et Ă©lĂ©gant.
+Avec **FastAPI**, vous bĂ©nĂ©ficiez de la flexibilitĂ© maximale fournie par les modĂšles Pydantic, tout en gardant votre code simple, concis et Ă©lĂ©gant.
 
 Mais avec tous les avantages :
 
index 55d184259a97fa2d66932a0ff2fa25ef62ac94ef..2ff71612554dcda6e997258ab8a1f4b21584eca9 100644 (file)
@@ -1,18 +1,18 @@
 # Corps de la requĂȘte { #request-body }
 
-Quand vous avez besoin d'envoyer de la donnĂ©e depuis un client (comme un navigateur) vers votre API, vous l'envoyez en tant que **corps de requĂȘte**.
+Quand vous avez besoin d'envoyer de la donnĂ©e depuis un client (comme un navigateur) vers votre API, vous l'envoyez en tant que **corps de la requĂȘte**.
 
 Le corps d'une **requĂȘte** est de la donnĂ©e envoyĂ©e par le client Ă  votre API. Le corps d'une **rĂ©ponse** est la donnĂ©e envoyĂ©e par votre API au client.
 
-Votre API aura presque toujours Ă  envoyer un corps de **rĂ©ponse**. Mais un client n'a pas toujours Ă  envoyer un **corps de requĂȘte** : parfois il demande seulement un chemin, peut-ĂȘtre avec quelques paramĂštres de requĂȘte, mais n'envoie pas de corps.
+Votre API aura presque toujours Ă  envoyer un corps de **rĂ©ponse**. Mais un client n'a pas toujours Ă  envoyer un **corps de la requĂȘte** : parfois il demande seulement un chemin, peut-ĂȘtre avec quelques paramĂštres de requĂȘte, mais n'envoie pas de corps.
 
 Pour dĂ©clarer un corps de **requĂȘte**, on utilise les modĂšles de [Pydantic](https://docs.pydantic.dev/) en profitant de tous leurs avantages et fonctionnalitĂ©s.
 
 /// note | Remarque
 
-Pour envoyer de la donnĂ©e, vous devez utiliser : `POST` (le plus populaire), `PUT`, `DELETE` ou `PATCH`.
+Pour envoyer de la donnĂ©e, vous devez utiliser l'une de ces mĂ©thodes : `POST` (le plus populaire), `PUT`, `DELETE` ou `PATCH`.
 
-Envoyer un corps dans une requĂȘte `GET` a un comportement non dĂ©fini dans les spĂ©cifications, cela est nĂ©anmoins supportĂ© par **FastAPI**, seulement pour des cas d'utilisation trĂšs complexes/extrĂȘmes.
+Envoyer un corps dans une requĂȘte `GET` a un comportement non dĂ©fini dans les spĂ©cifications, cela est nĂ©anmoins supportĂ© par FastAPI, seulement pour des cas d'utilisation trĂšs complexes/extrĂȘmes.
 
 Ceci Ă©tant dĂ©couragĂ©, la documentation interactive gĂ©nĂ©rĂ©e par Swagger UI ne montrera pas de documentation pour le corps d'une requĂȘte `GET`, et les proxys intermĂ©diaires risquent de ne pas le supporter.
 
@@ -32,6 +32,7 @@ Utilisez les types Python standard pour tous les attributs :
 
 {* ../../docs_src/body/tutorial001_py310.py hl[5:9] *}
 
+
 Tout comme pour la dĂ©claration de paramĂštres de requĂȘte, quand un attribut de modĂšle a une valeur par dĂ©faut, il n'est pas nĂ©cessaire. Sinon, il est requis. Utilisez `None` pour le rendre simplement optionnel.
 
 Par exemple, le modĂšle ci-dessus dĂ©clare un JSON Â« `object` Â» (ou `dict` Python) tel que :
@@ -73,7 +74,7 @@ En utilisant uniquement les dĂ©clarations de type Python, **FastAPI** rĂ©ussit 
 * Passer la donnĂ©e reçue dans le paramĂštre `item`.
     * Ce paramĂštre ayant Ă©tĂ© dĂ©clarĂ© dans la fonction comme Ă©tant de type `Item`, vous aurez aussi tout le support offert par l'Ă©diteur (autocomplĂ©tion, etc.) pour tous les attributs de ce paramĂštre et les types de ces attributs.
 * GĂ©nĂ©rer des dĂ©finitions [JSON Schema](https://json-schema.org) pour votre modĂšle ; vous pouvez Ă©galement les utiliser partout ailleurs si cela a du sens pour votre projet.
-* Ces schĂ©mas participeront Ă  la constitution du schĂ©ma gĂ©nĂ©rĂ© OpenAPI, et seront utilisĂ©s par les documentations automatiques <abbr title="User Interfaces - Interfaces utilisateur">UIs</abbr>.
+* Ces schĂ©mas feront partie du schĂ©ma OpenAPI gĂ©nĂ©rĂ©, et seront utilisĂ©s par les <abbr title="User Interfaces - Interfaces utilisateur">UIs</abbr> de la documentation automatique.
 
 ## Documentation automatique { #automatic-docs }
 
@@ -97,11 +98,11 @@ Et vous obtenez aussi des vĂ©rifications d'erreurs pour les opĂ©rations de types
 
 Ce n'est pas un hasard, ce framework entier a Ă©tĂ© bĂąti avec ce design comme objectif.
 
-Et cela a Ă©tĂ© rigoureusement testĂ© durant la phase de design, avant toute implĂ©mentation, pour vous assurer que cela fonctionnerait avec tous les Ă©diteurs.
+Et cela a Ă©tĂ© rigoureusement testĂ© durant la phase de design, avant toute implĂ©mentation, pour s'assurer que cela fonctionnerait avec tous les Ă©diteurs.
 
 Des changements sur Pydantic ont mĂȘme Ă©tĂ© faits pour supporter cela.
 
-Les captures d'Ă©cran prĂ©cĂ©dentes ont Ă©tĂ© prises sur [Visual Studio Code](https://code.visualstudio.com).
+Les captures d'Ă©cran prĂ©cĂ©dentes ont Ă©tĂ© prises avec [Visual Studio Code](https://code.visualstudio.com).
 
 Mais vous auriez le mĂȘme support de l'Ă©diteur avec [PyCharm](https://www.jetbrains.com/pycharm/) et la majoritĂ© des autres Ă©diteurs de code Python :
 
@@ -129,15 +130,16 @@ Dans la fonction, vous pouvez accĂ©der Ă  tous les attributs de l'objet du modĂš
 
 ## Corps de la requĂȘte + paramĂštres de chemin { #request-body-path-parameters }
 
-Vous pouvez dĂ©clarer des paramĂštres de chemin et un corps de requĂȘte pour la mĂȘme *chemin d'accĂšs*.
+Vous pouvez dĂ©clarer des paramĂštres de chemin et le corps de la requĂȘte en mĂȘme temps.
 
-**FastAPI** est capable de reconnaĂźtre que les paramĂštres de la fonction qui correspondent aux paramĂštres de chemin doivent ĂȘtre **rĂ©cupĂ©rĂ©s depuis le chemin**, et que les paramĂštres de fonctions dĂ©clarĂ©s comme modĂšles Pydantic devraient ĂȘtre **rĂ©cupĂ©rĂ©s depuis le corps de la requĂȘte**.
+**FastAPI** est capable de reconnaĂźtre que les paramĂštres de la fonction qui correspondent aux paramĂštres de chemin doivent ĂȘtre **rĂ©cupĂ©rĂ©s depuis le chemin**, et que les paramĂštres de la fonction dĂ©clarĂ©s comme modĂšles Pydantic devraient ĂȘtre **rĂ©cupĂ©rĂ©s depuis le corps de la requĂȘte**.
 
 {* ../../docs_src/body/tutorial003_py310.py hl[15:16] *}
 
+
 ## Corps de la requĂȘte + paramĂštres de chemin et de requĂȘte { #request-body-path-query-parameters }
 
-Vous pouvez aussi dĂ©clarer un **corps**, et des paramĂštres de **chemin** et de **requĂȘte** dans la mĂȘme *chemin d'accĂšs*.
+Vous pouvez aussi dĂ©clarer un **corps**, et des paramĂštres de **chemin** et de **requĂȘte**, tous en mĂȘme temps.
 
 **FastAPI** saura reconnaĂźtre chacun d'entre eux et rĂ©cupĂ©rer la bonne donnĂ©e au bon endroit.
 
@@ -151,9 +153,9 @@ Les paramĂštres de la fonction seront reconnus comme tel :
 
 /// note | Remarque
 
-**FastAPI** saura que la valeur de `q` n'est pas requise grĂące Ă  la valeur par dĂ©faut `= None`.
+FastAPI saura que la valeur de `q` n'est pas requise grĂące Ă  la valeur par dĂ©faut `= None`.
 
-L'annotation de type `str | None` n'est pas utilisĂ©e par **FastAPI** pour dĂ©terminer que la valeur n'est pas requise, il le saura parce qu'elle a une valeur par dĂ©faut `= None`.
+L'annotation de type `str | None` n'est pas utilisĂ©e par FastAPI pour dĂ©terminer que la valeur n'est pas requise, il le saura parce qu'elle a une valeur par dĂ©faut `= None`.
 
 Mais ajouter ces annotations de type permettra Ă  votre Ă©diteur de vous offrir un meilleur support et de dĂ©tecter des erreurs.
 
index 1a3e9c5090cf662faf24938c80eba3af9ce00b38..cdcfe702e03a1b1acc8c16778be3b488752cab47 100644 (file)
@@ -74,7 +74,7 @@ ne sera pas exĂ©cutĂ©e.
 
 /// note | Remarque
 
-Pour plus d'informations, consultez [la documentation officielle de Python](https://docs.python.org/3/library/__main__.html).
+Pour plus d'informations, consultez [les documents officiels de Python](https://docs.python.org/3/library/__main__.html).
 
 ///
 
@@ -86,10 +86,10 @@ Parce que vous exĂ©cutez le serveur Uvicorn directement depuis votre code, vous
 
 Par exemple, dans Visual Studio Code, vous pouvez :
 
-- Allez dans le panneau Â« Debug Â».
-- Â« Add configuration ... Â».
-- SĂ©lectionnez Â« Python Â».
-- Lancez le <abbr title="En anglais: debugger">dĂ©bogueur</abbr> avec l'option Â« Python: Current File (Integrated Terminal) Â».
+* Allez dans le panneau Â« Debug Â».
+* Â« Add configuration... Â».
+* SĂ©lectionnez Â« Python Â».
+* Lancez le <abbr title="En anglais: debugger">dĂ©bogueur</abbr> avec l'option Â« `Python: Current File (Integrated Terminal)` Â».
 
 Il dĂ©marrera alors le serveur avec votre code **FastAPI**, s'arrĂȘtera Ă  vos points d'arrĂȘt, etc.
 
@@ -99,12 +99,12 @@ Voici Ă  quoi cela pourrait ressembler :
 
 ---
 
-Si vous utilisez Pycharm, vous pouvez :
+Si vous utilisez PyCharm, vous pouvez :
 
-- Ouvrez le menu Â« Run Â».
-- SĂ©lectionnez l'option Â« Debug ... Â».
-- Un menu contextuel s'affiche alors.
-- SĂ©lectionnez le fichier Ă  dĂ©boguer (dans ce cas, `main.py`).
+* Ouvrez le menu Â« Run Â».
+* SĂ©lectionnez l'option Â« Debug... Â».
+* Un menu contextuel s'affiche alors.
+* SĂ©lectionnez le fichier Ă  dĂ©boguer (dans ce cas, `main.py`).
 
 Il dĂ©marrera alors le serveur avec votre code **FastAPI**, s'arrĂȘtera Ă  vos points d'arrĂȘt, etc.
 
index 8da931d11618166f1027870818b1b4ff4c303a14..23114c0cbeef5b3c2cbe36bd5dddb711053dc56c 100644 (file)
@@ -1,6 +1,6 @@
 # Utiliser des dĂ©pendances avec `yield` { #dependencies-with-yield }
 
-FastAPI prend en charge des dĂ©pendances qui effectuent des <dfn title='parfois aussi appelĂ©es Â« exit code Â», Â« cleanup code Â», Â« teardown code Â», Â« closing code Â», Â« context manager exit code Â», etc.'>Ă©tapes supplĂ©mentaires aprĂšs l'exĂ©cution</dfn>.
+FastAPI prend en charge des dĂ©pendances qui effectuent des <dfn title='parfois Ă©galement appelĂ©es Â« code de sortie Â», Â« code de nettoyage Â», Â« code de dĂ©montage Â», Â« code de fermeture Â», Â« code de sortie de gestionnaire de contexte Â», etc.'>Ă©tapes supplĂ©mentaires aprĂšs l'exĂ©cution</dfn>.
 
 Pour cela, utilisez `yield` au lieu de `return`, et Ă©crivez les Ă©tapes supplĂ©mentaires (code) aprĂšs.
 
@@ -194,16 +194,16 @@ Mais si vous savez que vous n'aurez pas besoin d'utiliser la dĂ©pendance aprĂšs
 
 `Depends()` reçoit un paramĂštre `scope` qui peut ĂȘtre :
 
-* Â« function Â» : dĂ©marrer la dĂ©pendance avant la *fonction de chemin d'accĂšs* qui gĂšre la requĂȘte, terminer la dĂ©pendance aprĂšs la fin de la *fonction de chemin d'accĂšs*, mais **avant** que la rĂ©ponse ne soit renvoyĂ©e au client. Ainsi, la fonction de dĂ©pendance sera exĂ©cutĂ©e **autour** de la *fonction de chemin d'accĂšs*.
-* Â« request Â» : dĂ©marrer la dĂ©pendance avant la *fonction de chemin d'accĂšs* qui gĂšre la requĂȘte (similaire Ă  l'utilisation de Â« function Â»), mais terminer **aprĂšs** que la rĂ©ponse a Ă©tĂ© renvoyĂ©e au client. Ainsi, la fonction de dĂ©pendance sera exĂ©cutĂ©e **autour** du cycle **requĂȘte** et rĂ©ponse.
+* `"function"` : dĂ©marrer la dĂ©pendance avant la *fonction de chemin d'accĂšs* qui gĂšre la requĂȘte, terminer la dĂ©pendance aprĂšs la fin de la *fonction de chemin d'accĂšs*, mais **avant** que la rĂ©ponse ne soit renvoyĂ©e au client. Ainsi, la fonction de dĂ©pendance sera exĂ©cutĂ©e **autour** de la *fonction de chemin d'accĂšs*.
+* `"request"` : dĂ©marrer la dĂ©pendance avant la *fonction de chemin d'accĂšs* qui gĂšre la requĂȘte (similaire Ă  l'utilisation de `"function"`), mais terminer **aprĂšs** que la rĂ©ponse a Ă©tĂ© renvoyĂ©e au client. Ainsi, la fonction de dĂ©pendance sera exĂ©cutĂ©e **autour** du cycle **requĂȘte** et rĂ©ponse.
 
-S'il n'est pas spĂ©cifiĂ© et que la dĂ©pendance utilise `yield`, le `scope` sera par dĂ©faut Â« request Â».
+S'il n'est pas spĂ©cifiĂ© et que la dĂ©pendance utilise `yield`, le `scope` sera par dĂ©faut `"request"`.
 
 ### DĂ©finir `scope` pour les sous-dĂ©pendances { #scope-for-sub-dependencies }
 
-Lorsque vous dĂ©clarez une dĂ©pendance avec un `scope="request"` (par dĂ©faut), toute sous-dĂ©pendance doit Ă©galement avoir un `scope` de Â« request Â».
+Lorsque vous dĂ©clarez une dĂ©pendance avec un `scope="request"` (par dĂ©faut), toute sous-dĂ©pendance doit Ă©galement avoir un `scope` de `"request"`.
 
-Mais une dĂ©pendance avec un `scope` de Â« function Â» peut avoir des dĂ©pendances avec un `scope` de Â« function Â» et un `scope` de Â« request Â».
+Mais une dĂ©pendance avec un `scope` de `"function"` peut avoir des dĂ©pendances avec un `scope` de `"function"` et un `scope` de `"request"`.
 
 Cela vient du fait que toute dĂ©pendance doit pouvoir exĂ©cuter son code de sortie avant ses sous-dĂ©pendances, car elle pourrait encore avoir besoin de les utiliser pendant son code de sortie.
 
@@ -234,6 +234,7 @@ participant operation as Path Operation
 Les dĂ©pendances avec `yield` ont Ă©voluĂ© au fil du temps pour couvrir diffĂ©rents cas d'utilisation et corriger certains problĂšmes.
 
 Si vous souhaitez voir ce qui a changĂ© dans diffĂ©rentes versions de FastAPI, vous pouvez en savoir plus dans le guide avancĂ©, dans [DĂ©pendances avancĂ©es - DĂ©pendances avec `yield`, `HTTPException`, `except` et Background Tasks](../../advanced/advanced-dependencies.md#dependencies-with-yield-httpexception-except-and-background-tasks).
+
 ## Gestionnaires de contexte { #context-managers }
 
 ### Que sont les Â« Context Managers Â» { #what-are-context-managers }
index 7ee6816c8251db41f967d43e4f545f589a9f5783..c0c4df137092986560547fa7f7a10aaf2b691c40 100644 (file)
@@ -36,7 +36,7 @@ Voici quelques types de donnĂ©es supplĂ©mentaires que vous pouvez utiliser :
 * `datetime.timedelta` :
     * Un `datetime.timedelta` Python.
     * Dans les requĂȘtes et les rĂ©ponses, il sera reprĂ©sentĂ© sous forme de `float` de secondes totales.
-    * Pydantic permet aussi de le reprĂ©senter sous la forme d'un Â« encodage de diffĂ©rence de temps ISO 8601 Â», [voir la documentation pour plus d'informations](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers).
+    * Pydantic permet aussi de le reprĂ©senter sous la forme d'un Â« encodage de diffĂ©rence de temps ISO 8601 Â», [voir les documents pour plus d'informations](https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers).
 * `frozenset` :
     * Dans les requĂȘtes et les rĂ©ponses, traitĂ© de la mĂȘme maniĂšre qu'un `set` :
         * Dans les requĂȘtes, une liste sera lue, les doublons Ă©liminĂ©s, puis convertie en `set`.
index 24a3fa31b76f9bd4825b98ffdc5646751a4c7987..7d542955b16965a1d06363c6e2e99d3aaeef9551 100644 (file)
@@ -4,9 +4,9 @@ En poursuivant l'exemple prĂ©cĂ©dent, il est courant d'avoir plusieurs modĂšles
 
 C'est particuliĂšrement vrai pour les modĂšles d'utilisateur, car :
 
-* Le modĂšle d'entrĂ©e doit pouvoir contenir un mot de passe.
-* Le modĂšle de sortie ne doit pas avoir de mot de passe.
-* Le modĂšle de base de donnĂ©es devra probablement avoir un mot de passe hachĂ©.
+* Le **modĂšle d'entrĂ©e** doit pouvoir contenir un mot de passe.
+* Le **modĂšle de sortie** ne doit pas avoir de mot de passe.
+* Le **modĂšle de base de donnĂ©es** aurait probablement besoin d'avoir un mot de passe hachĂ©.
 
 /// danger | Danger
 
@@ -30,13 +30,13 @@ Voici une idĂ©e gĂ©nĂ©rale de l'apparence des modĂšles avec leurs champs de mot
 
 Les modĂšles Pydantic ont une mĂ©thode `.model_dump()` qui renvoie un `dict` avec les donnĂ©es du modĂšle.
 
-Ainsi, si nous crĂ©ons un objet Pydantic `user_in` comme :
+Ainsi, si nous crĂ©ons un objet Pydantic `user_in` comme :
 
 ```Python
 user_in = UserIn(username="john", password="secret", email="john.doe@example.com")
 ```
 
-et que nous appelons ensuite :
+et que nous appelons ensuite :
 
 ```Python
 user_dict = user_in.model_dump()
@@ -44,13 +44,13 @@ user_dict = user_in.model_dump()
 
 nous avons maintenant un `dict` avec les donnĂ©es dans la variable `user_dict` (c'est un `dict` au lieu d'un objet modĂšle Pydantic).
 
-Et si nous appelons :
+Et si nous appelons :
 
 ```Python
 print(user_dict)
 ```
 
-nous obtiendrions un `dict` Python contenant :
+nous obtiendrions un `dict` Python contenant :
 
 ```Python
 {
@@ -63,15 +63,15 @@ nous obtiendrions un `dict` Python contenant :
 
 #### DĂ©baller un `dict` { #unpacking-a-dict }
 
-Si nous prenons un `dict` comme `user_dict` et que nous le passons Ă  une fonction (ou une classe) avec `**user_dict`, Python va Â« dĂ©baller Â» ce `dict`. Il passera les clĂ©s et valeurs de `user_dict` directement comme arguments nommĂ©s.
+Si nous prenons un `dict` comme `user_dict` et que nous le passons Ă  une fonction (ou une classe) avec `**user_dict`, Python va Â« dĂ©baller Â» ce `dict`. Il passera les clĂ©s et valeurs de `user_dict` directement comme arguments clĂ©-valeur.
 
-Ainsi, en reprenant `user_dict` ci-dessus, Ă©crire :
+Ainsi, en reprenant `user_dict` ci-dessus, Ă©crire :
 
 ```Python
 UserInDB(**user_dict)
 ```
 
-aurait pour rĂ©sultat quelque chose d'Ă©quivalent Ă Â :
+aurait pour rĂ©sultat quelque chose d'Ă©quivalent Ă  :
 
 ```Python
 UserInDB(
@@ -82,7 +82,7 @@ UserInDB(
 )
 ```
 
-Ou plus exactement, en utilisant `user_dict` directement, quels que soient ses contenus futurs :
+Ou plus exactement, en utilisant `user_dict` directement, quels que soient ses contenus futurs :
 
 ```Python
 UserInDB(
@@ -95,14 +95,14 @@ UserInDB(
 
 #### CrĂ©er un modĂšle Pydantic Ă  partir du contenu d'un autre { #a-pydantic-model-from-the-contents-of-another }
 
-Comme dans l'exemple ci-dessus nous avons obtenu `user_dict` depuis `user_in.model_dump()`, ce code :
+Comme dans l'exemple ci-dessus nous avons obtenu `user_dict` depuis `user_in.model_dump()`, ce code :
 
 ```Python
 user_dict = user_in.model_dump()
 UserInDB(**user_dict)
 ```
 
-serait Ă©quivalent Ă Â :
+serait Ă©quivalent Ă  :
 
 ```Python
 UserInDB(**user_in.model_dump())
@@ -114,13 +114,13 @@ Ainsi, nous obtenons un modĂšle Pydantic Ă  partir des donnĂ©es d'un autre modĂš
 
 #### DĂ©baller un `dict` et ajouter des mots-clĂ©s supplĂ©mentaires { #unpacking-a-dict-and-extra-keywords }
 
-Et en ajoutant ensuite l'argument nommĂ© supplĂ©mentaire `hashed_password=hashed_password`, comme ici :
+Et en ajoutant ensuite l'argument nommĂ© supplĂ©mentaire `hashed_password=hashed_password`, comme ici :
 
 ```Python
 UserInDB(**user_in.model_dump(), hashed_password=hashed_password)
 ```
 
-... revient Ă Â :
+... revient Ă  :
 
 ```Python
 UserInDB(
@@ -152,7 +152,7 @@ Nous pouvons dĂ©clarer un modĂšle `UserBase` qui sert de base Ă  nos autres mod
 
 Toutes les conversions de donnĂ©es, validations, documentation, etc., fonctionneront comme d'habitude.
 
-De cette façon, nous pouvons ne dĂ©clarer que les diffĂ©rences entre les modĂšles (avec `password` en clair, avec `hashed_password` et sans mot de passe) :
+De cette façon, nous pouvons ne dĂ©clarer que les diffĂ©rences entre les modĂšles (avec `password` en clair, avec `hashed_password` et sans mot de passe) :
 
 {* ../../docs_src/extra_models/tutorial002_py310.py hl[7,13:14,17:18,21:22] *}
 
@@ -162,7 +162,7 @@ Vous pouvez dĂ©clarer qu'une rĂ©ponse est l'`Union` de deux types ou plus, ce qu
 
 Cela sera dĂ©fini dans OpenAPI avec `anyOf`.
 
-Pour ce faire, utilisez l'annotation de type Python standard [`typing.Union`](https://docs.python.org/3/library/typing.html#typing.Union) :
+Pour ce faire, utilisez l'annotation de type Python standard [`typing.Union`](https://docs.python.org/3/library/typing.html#typing.Union) :
 
 /// note | Remarque
 
@@ -176,21 +176,21 @@ Lors de la dĂ©finition d'une [`Union`](https://docs.pydantic.dev/latest/concepts
 
 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 :
 
 ```Python
 some_variable: PlaneItem | CarItem
 ```
 
-Mais si nous Ă©crivons cela dans l'affectation `response_model=PlaneItem | CarItem`, nous obtiendrons une erreur, car Python essaierait d'effectuer une Â« opĂ©ration invalide Â» entre `PlaneItem` et `CarItem` au lieu de l'interprĂ©ter comme une annotation de type.
+Mais si nous Ă©crivons cela dans l'affectation `response_model=PlaneItem | CarItem`, nous obtiendrons une erreur, car Python essaierait d'effectuer une **opĂ©ration invalide** entre `PlaneItem` et `CarItem` au lieu de l'interprĂ©ter comme une annotation de type.
 
 ## Liste de modĂšles { #list-of-models }
 
 De la mĂȘme maniĂšre, vous pouvez dĂ©clarer des rĂ©ponses contenant des listes d'objets.
 
-Pour cela, utilisez le `list` Python standard :
+Pour cela, utilisez le `list` Python standard :
 
 {* ../../docs_src/extra_models/tutorial004_py310.py hl[18] *}
 
@@ -200,7 +200,7 @@ Vous pouvez Ă©galement dĂ©clarer une rĂ©ponse en utilisant un simple `dict` arbi
 
 C'est utile si vous ne connaissez pas Ă  l'avance les noms de champs/attributs valides (qui seraient nĂ©cessaires pour un modĂšle Pydantic).
 
-Dans ce cas, vous pouvez utiliser `dict` :
+Dans ce cas, vous pouvez utiliser `dict` :
 
 {* ../../docs_src/extra_models/tutorial005_py310.py hl[6] *}
 
@@ -208,4 +208,4 @@ Dans ce cas, vous pouvez utiliser `dict` :
 
 Utilisez plusieurs modĂšles Pydantic et hĂ©ritez librement selon chaque cas.
 
-Vous n'avez pas besoin d'avoir un seul modĂšle de donnĂ©es par entitĂ© si cette entitĂ© doit pouvoir avoir diffĂ©rents Â« Ă©tats Â». Comme pour l'« entitĂ© Â» utilisateur, avec un Ă©tat incluant `password`, `password_hash` et sans mot de passe.
+Vous n'avez pas besoin d'avoir un seul modĂšle de donnĂ©es par entitĂ© si cette entitĂ© doit pouvoir avoir diffĂ©rents Â« Ă©tats Â». L'« entitĂ© Â» **utilisateur** est un exemple, avec des Ă©tats qui incluent `password`, `password_hash`, ou aucun mot de passe.
index 3d88fe5a9ea85c0b9bdad75a809615459f75b344..9e31e2b55c94576430fc0b48cf691a78e9e4e191 100644 (file)
@@ -145,20 +145,20 @@ Vous pourriez Ă©galement l’utiliser pour gĂ©nĂ©rer du code automatiquement, po
 
 ### Configurer le `entrypoint` de l’application dans `pyproject.toml` { #configure-the-app-entrypoint-in-pyproject-toml }
 
-Vous pouvez configurer l’emplacement de votre application dans un fichier `pyproject.toml` comme :
+Vous pouvez configurer l’emplacement de votre application dans un fichier `pyproject.toml` comme :
 
 ```toml
 [tool.fastapi]
 entrypoint = "main:app"
 ```
 
-Ce `entrypoint` indiquera Ă  la commande `fastapi` qu’elle doit importer l’application comme :
+Ce `entrypoint` indiquera Ă  la commande `fastapi` qu’elle doit importer l’application comme :
 
 ```python
 from main import app
 ```
 
-Si votre code est structurĂ© comme :
+Si votre code est structurĂ© comme :
 
 ```
 .
@@ -167,14 +167,14 @@ Si votre code est structurĂ© comme :
 â”‚   â”œâ”€â”€ __init__.py
 ```
 
-Alors vous dĂ©finiriez le `entrypoint` comme :
+Alors vous dĂ©finiriez le `entrypoint` comme :
 
 ```toml
 [tool.fastapi]
 entrypoint = "backend.main:app"
 ```
 
-ce qui Ă©quivaudrait Ă â€Ż:
+ce qui Ă©quivaudrait Ă  :
 
 ```python
 from backend.main import app
@@ -182,19 +182,19 @@ from backend.main import app
 
 ### `fastapi dev` avec un chemin ou avec l’option CLI `--entrypoint` { #fastapi-dev-with-path-or-with-entrypoint-cli-option }
 
-Vous pouvez Ă©galement passer le chemin du fichier Ă  la commande `fastapi dev`, et elle devinera l’objet d’application FastAPI Ă  utiliser :
+Vous pouvez Ă©galement passer le chemin du fichier Ă  la commande `fastapi dev`, et elle devinera l’objet d’application FastAPI Ă  utiliser :
 
 ```console
 $ fastapi dev main.py
 ```
 
-Ou bien, vous pouvez aussi passer l’option `--entrypoint` Ă  la commande `fastapi dev` :
+Ou bien, vous pouvez aussi passer l’option `--entrypoint` Ă  la commande `fastapi dev` :
 
 ```console
 $ fastapi dev --entrypoint main:app
 ```
 
-Mais vous devrez vous souvenir de passer le chemin\entrypoint correct Ă  chaque exĂ©cution de la commande `fastapi`.
+Mais vous devez vous souvenir de passer le chemin\entrypoint correct Ă  chaque exĂ©cution de la commande `fastapi`.
 
 De plus, d’autres outils pourraient ne pas ĂȘtre capables de le trouver, par exemple l’[Extension VS Code](../editor-support.md) ou [FastAPI Cloud](https://fastapicloud.com), il est donc recommandĂ© d’utiliser le `entrypoint` dans `pyproject.toml`.
 
@@ -244,7 +244,7 @@ Ici, la variable `app` sera une Â« instance Â» de la classe `FastAPI`.
 
 Ce sera le point principal d’interaction pour crĂ©er toute votre API.
 
-### Ă‰tape 3 : crĂ©er un Â« chemin d’accĂšs Â» { #step-3-create-a-path-operation }
+### Ă‰tape 3 : crĂ©er un *chemin d’accĂšs* { #step-3-create-a-path-operation }
 
 #### Chemin { #path }
 
@@ -305,11 +305,11 @@ Donc, dans OpenAPI, chacune des mĂ©thodes HTTP est appelĂ©e une Â« opĂ©ration Â»
 
 Nous allons donc aussi les appeler Â« opĂ©rations Â».
 
-#### DĂ©finir un Â« dĂ©corateur de chemin d’accĂšs Â» { #define-a-path-operation-decorator }
+#### DĂ©finir un *dĂ©corateur de chemin d’accĂšs* { #define-a-path-operation-decorator }
 
 {* ../../docs_src/first_steps/tutorial001_py310.py hl[6] *}
 
-Le `@app.get("/")` indique Ă  **FastAPI** que la fonction juste en dessous est chargĂ©e de gĂ©rer les requĂȘtes qui vont vers :
+Le `@app.get("/")` indique Ă  **FastAPI** que la fonction juste en dessous est chargĂ©e de gĂ©rer les requĂȘtes qui vont vers :
 
 * le chemin `/`
 * en utilisant une <dfn title="une mĂ©thode HTTP GET"><code>get</code> opĂ©ration</dfn>
@@ -318,13 +318,13 @@ Le `@app.get("/")` indique Ă  **FastAPI** que la fonction juste en dessous est c
 
 Cette syntaxe `@something` en Python est appelĂ©e un Â« dĂ©corateur Â».
 
-Vous la mettez au-dessus d’une fonction. Comme un joli chapeau dĂ©coratif (j’imagine que c’est de lĂ  que vient le terme đŸ€·đŸ»â€â™‚).
+Vous la mettez au-dessus d’une fonction. Comme un joli chapeau dĂ©coratif (j’imagine que c’est de lĂ  que vient le terme).
 
 Un Â« dĂ©corateur Â» prend la fonction en dessous et fait quelque chose avec.
 
 Dans notre cas, ce dĂ©corateur indique Ă  **FastAPI** que la fonction en dessous correspond au **chemin** `/` avec une **opĂ©ration** `get`.
 
-C’est le Â« dĂ©corateur de chemin d’accĂšs Â».
+C’est le **« dĂ©corateur de chemin d’accĂšs Â»**.
 
 ///
 
@@ -355,7 +355,7 @@ Par exemple, lorsque vous utilisez GraphQL, vous effectuez normalement toutes le
 
 ### Ă‰tape 4 : dĂ©finir la **fonction de chemin d’accĂšs** { #step-4-define-the-path-operation-function }
 
-Voici notre Â« fonction de chemin d’accĂšs Â» :
+Voici notre **« fonction de chemin d’accĂšs Â»** :
 
 * **chemin** : `/`.
 * **opĂ©ration** : `get`.
@@ -365,7 +365,7 @@ Voici notre Â« fonction de chemin d’accĂšs Â» :
 
 C’est une fonction Python.
 
-Elle sera appelĂ©e par **FastAPI** chaque fois qu’il recevra une requĂȘte vers l’URL Â« / Â» en utilisant une opĂ©ration `GET`.
+Elle sera appelĂ©e par **FastAPI** chaque fois qu’il recevra une requĂȘte vers l’URL Â« `/` Â» en utilisant une opĂ©ration `GET`.
 
 Dans ce cas, c’est une fonction `async`.
 
@@ -377,7 +377,7 @@ Vous pouvez aussi la dĂ©finir comme une fonction normale au lieu de `async def`
 
 /// note | Remarque
 
-Si vous ne connaissez pas la diffĂ©rence, consultez [Asynchrone : Â« PressĂ© ? Â»](../async.md#in-a-hurry).
+Si vous ne connaissez pas la diffĂ©rence, consultez [Asynchrone : *« PressĂ© ? Â»*](../async.md#in-a-hurry).
 
 ///
 
index a697571f33cafcb46d17b8312812b52ccfc360a3..5c52e7be1c63f4259f235081b5622a422a9b8ed3 100644 (file)
@@ -43,7 +43,7 @@ Dans cet exemple, lorsque le client demande un Ă©lĂ©ment par un ID qui n'existe
 
 ### RĂ©ponse rĂ©sultante { #the-resulting-response }
 
-Si le client demande `http://example.com/items/foo` (un `item_id` Â« foo Â»), il recevra un code d'Ă©tat HTTP 200 et une rĂ©ponse JSON :
+Si le client demande `http://example.com/items/foo` (un `item_id` `"foo"`), il recevra un code d'Ă©tat HTTP 200 et une rĂ©ponse JSON :
 
 ```JSON
 {
@@ -51,7 +51,7 @@ Si le client demande `http://example.com/items/foo` (un `item_id` Â« foo Â»), il
 }
 ```
 
-Mais si le client demande `http://example.com/items/bar` (un `item_id` inexistant Â« bar Â»), il recevra un code d'Ă©tat HTTP 404 (l'erreur Â« not found Â») et une rĂ©ponse JSON :
+Mais si le client demande `http://example.com/items/bar` (un `item_id` inexistant `"bar"`), il recevra un code d'Ă©tat HTTP 404 (l'erreur Â« not found Â») et une rĂ©ponse JSON :
 
 ```JSON
 {
index 2fc177ed95bb213714cef96da0fc1e979050b2e1..1e28cfc6d8bae3e73d6e7aec48e01eafc1df97fb 100644 (file)
@@ -1,5 +1,6 @@
 # Tutoriel - Guide utilisateur { #tutorial-user-guide }
 
+
 Ce tutoriel vous montre comment utiliser **FastAPI** avec la plupart de ses fonctionnalitĂ©s, Ă©tape par Ă©tape.
 
 Chaque section s'appuie progressivement sur les prĂ©cĂ©dentes, mais elle est structurĂ©e de maniĂšre Ă  sĂ©parer les sujets, afin que vous puissiez aller directement Ă  l'un d'entre eux pour rĂ©pondre Ă  vos besoins spĂ©cifiques d'API.
index 75a8542f85565e43cb3ebbbf04230d03ca3bb1c2..1f1859eed308f0480ac5a21069701f023d35f396 100644 (file)
@@ -11,7 +11,7 @@ Vous pouvez dĂ©finir les champs suivants qui sont utilisĂ©s dans la spĂ©cificati
 | `title` | `str` | Le titre de l’API. |
 | `summary` | `str` | Un court rĂ©sumĂ© de l’API. <small>Disponible depuis OpenAPI 3.1.0, FastAPI 0.99.0.</small> |
 | `description` | `str` | Une brĂšve description de l’API. Elle peut utiliser Markdown. |
-| `version` | `string` | La version de l’API. C’est la version de votre propre application, pas d’OpenAPI. Par exemple `2.5.0`. |
+| `version` | `str` | La version de l’API. C’est la version de votre propre application, pas d’OpenAPI. Par exemple `2.5.0`. |
 | `terms_of_service` | `str` | Une URL vers les Conditions d’utilisation de l’API. Le cas Ă©chĂ©ant, il doit s’agir d’une URL. |
 | `contact` | `dict` | Les informations de contact pour l’API exposĂ©e. Cela peut contenir plusieurs champs. <details><summary>champs de <code>contact</code></summary><table><thead><tr><th>ParamĂštre</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>str</code></td><td>Le nom identifiant de la personne/organisation de contact.</td></tr><tr><td><code>url</code></td><td><code>str</code></td><td>L’URL pointant vers les informations de contact. DOIT ĂȘtre au format d’une URL.</td></tr><tr><td><code>email</code></td><td><code>str</code></td><td>L’adresse e-mail de la personne/organisation de contact. DOIT ĂȘtre au format d’une adresse e-mail.</td></tr></tbody></table></details> |
 | `license_info` | `dict` | Les informations de licence pour l’API exposĂ©e. Cela peut contenir plusieurs champs. <details><summary>champs de <code>license_info</code></summary><table><thead><tr><th>ParamĂštre</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>name</code></td><td><code>str</code></td><td><strong>OBLIGATOIRE</strong> (si un <code>license_info</code> est dĂ©fini). Le nom de la licence utilisĂ©e pour l’API.</td></tr><tr><td><code>identifier</code></td><td><code>str</code></td><td>Une expression de licence [SPDX](https://spdx.org/licenses/) pour l’API. Le champ <code>identifier</code> est mutuellement exclusif du champ <code>url</code>. <small>Disponible depuis OpenAPI 3.1.0, FastAPI 0.99.0.</small></td></tr><tr><td><code>url</code></td><td><code>str</code></td><td>Une URL vers la licence utilisĂ©e pour l’API. DOIT ĂȘtre au format d’une URL.</td></tr></tbody></table></details> |
index 572d38e0179808012894deabe5d83402190d54da..bd9aed8792248c8b71282f5ad8220f9645169e68 100644 (file)
@@ -1,5 +1,6 @@
 # Configurer les chemins d'accĂšs { #path-operation-configuration }
 
+
 Vous pouvez passer plusieurs paramĂštres Ă  votre *dĂ©corateur de chemin d'accĂšs* pour le configurer.
 
 /// warning | Alertes
index fc979334e4ff9085285abf2b9360d1ccbb671427..1b0fa88b3f7db733e973e5b294543e08eb81fe61 100644 (file)
@@ -81,7 +81,7 @@ FastAPI va maintenant :
 
 - **Valider** les donnĂ©es en s’assurant que la longueur maximale est de 50 caractĂšres
 - Afficher une **erreur claire** au client quand les donnĂ©es ne sont pas valides
-- **Documenter** le paramĂštre dans la *chemin d'accĂšs* du schĂ©ma OpenAPI (il apparaĂźtra donc dans l’**interface de documentation automatique**)
+- **Documenter** le paramĂštre dans le *chemin d'accĂšs* du schĂ©ma OpenAPI (il apparaĂźtra donc dans l’**interface de documentation automatique**)
 
 ## Alternative (ancienne) : `Query` comme valeur par dĂ©faut { #alternative-old-query-as-the-default-value }
 
@@ -89,7 +89,7 @@ Les versions prĂ©cĂ©dentes de FastAPI (avant <dfn title="avant 2023-03">0.95.0</
 
 /// tip | Astuce
 
-Pour du nouveau code et dĂšs que possible, utilisez `Annotated` comme expliquĂ© ci-dessus. Il y a de multiples avantages (expliquĂ©s ci-dessous) et aucun inconvĂ©nient. đŸ°
+Pour du nouveau code et chaque fois que possible, utilisez `Annotated` comme expliquĂ© ci-dessus. Il y a de multiples avantages (expliquĂ©s ci-dessous) et aucun inconvĂ©nient. đŸ°
 
 ///
 
@@ -119,7 +119,7 @@ Ensuite, nous pouvons passer plus de paramĂštres Ă  `Query`. Dans ce cas, le par
 q: str | None = Query(default=None, max_length=50)
 ```
 
-Cela validera les donnĂ©es, affichera une erreur claire lorsque les donnĂ©es ne sont pas valides et documentera le paramĂštre dans la *chemin d'accĂšs* du schĂ©ma OpenAPI.
+Cela validera les donnĂ©es, affichera une erreur claire lorsque les donnĂ©es ne sont pas valides et documentera le paramĂštre dans le *chemin d'accĂšs* du schĂ©ma OpenAPI.
 
 ### `Query` comme valeur par dĂ©faut ou dans `Annotated` { #query-as-the-default-value-or-in-annotated }
 
@@ -241,7 +241,7 @@ Ensuite, avec une URL comme :
 http://localhost:8000/items/?q=foo&q=bar
 ```
 
-vous recevriez les valeurs des multiples paramĂštres de requĂȘte `q` (`foo` et `bar`) dans une `list` Python Ă  l’intĂ©rieur de votre fonction de *chemin d'accĂšs*, dans le *paramĂštre de fonction* `q`.
+vous recevriez les valeurs des multiples paramĂštres de requĂȘte `q` (`foo` et `bar`) dans une `list` Python Ă  l’intĂ©rieur de votre *fonction de chemin d'accĂšs*, dans le *paramĂštre de fonction* `q`.
 
 Donc, la rĂ©ponse pour cette URL serait :
 
index cf84741629203dca0f59c6fa35974c342eed58b4..629e1f91a33e413683b7cf00a7d5697a54c903aa 100644 (file)
@@ -1,6 +1,6 @@
 # ParamĂštres de requĂȘte { #query-parameters }
 
-Quand vous dĂ©clarez d'autres paramĂštres de fonction qui ne font pas partie des paramĂštres de chemin, ils sont automatiquement interprĂ©tĂ©s comme des paramĂštres de Â« query Â».
+Quand vous dĂ©clarez d'autres paramĂštres de fonction qui ne font pas partie des paramĂštres de chemin, ils sont automatiquement interprĂ©tĂ©s comme des paramĂštres de requĂȘte.
 
 {* ../../docs_src/query_params/tutorial001_py310.py hl[9] *}
 
@@ -109,6 +109,7 @@ http://127.0.0.1:8000/items/foo?short=yes
 
 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 }
 
 Vous pouvez dĂ©clarer plusieurs paramĂštres de chemin et paramĂštres de requĂȘte en mĂȘme temps, **FastAPI** sait lequel est lequel.
index 591a4e2e9e7af74cd0f0275a672b87a161987820..79b28d7e62dd52b5fb9f96b29d094e55b4f025a6 100644 (file)
@@ -1,5 +1,6 @@
 # Envoyer des fichiers { #request-files }
 
+
 Vous pouvez dĂ©finir des fichiers Ă  tĂ©lĂ©verser par le client en utilisant `File`.
 
 /// note | Remarque
index bdc8c6fb086541feb19696d8ce6986547ff039dd..442d50558f53ccdebf57a698ebf5dbd9c45fc710 100644 (file)
@@ -56,7 +56,7 @@ Les donnĂ©es issues des formulaires sont normalement encodĂ©es avec le Â« type d
 
 Mais lorsque le formulaire inclut des fichiers, il est encodĂ© en `multipart/form-data`. Vous lirez la gestion des fichiers dans le chapitre suivant.
 
-Si vous voulez en savoir plus sur ces encodages et les champs de formulaire, consultez la [<abbr title="Mozilla Developer Network - RĂ©seau des dĂ©veloppeurs Mozilla">MDN</abbr> web docs pour `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST).
+Si vous voulez en savoir plus sur ces encodages et les champs de formulaire, consultez les [documents web de la <abbr title="Mozilla Developer Network - RĂ©seau des dĂ©veloppeurs Mozilla">MDN</abbr> pour `POST`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST).
 
 ///
 
index e4a666ebf0e26fc42ff5f23160481c0072ed4535..398d1f1a1a7c271f6da207ea8928f24361349da6 100644 (file)
@@ -1,5 +1,6 @@
 # Code d'Ă©tat de la rĂ©ponse { #response-status-code }
 
+
 De la mĂȘme maniĂšre que vous pouvez spĂ©cifier un modĂšle de rĂ©ponse, vous pouvez Ă©galement dĂ©clarer le code d'Ă©tat HTTP utilisĂ© pour la rĂ©ponse avec le paramĂštre `status_code` dans n'importe lequel des chemins d'accĂšs :
 
 * `@app.get()`
index 6f254aafede537bee05c3bde9e7b74cef75ea1a1..85905f5f5e0e9ece14e16f8c3e1e26705d2c75c4 100644 (file)
@@ -1,6 +1,6 @@
 # DĂ©clarer des exemples de donnĂ©es de requĂȘte { #declare-request-example-data }
 
-Vous pouvez dĂ©clarer des exemples des donnĂ©es que votre application peut recevoir.
+Vous pouvez dĂ©clarer des exemples de donnĂ©es que votre application peut recevoir.
 
 Voici plusieurs façons de le faire.
 
@@ -10,9 +10,9 @@ Vous pouvez dĂ©clarer `examples` pour un modĂšle Pydantic qui seront ajoutĂ©s au
 
 {* ../../docs_src/schema_extra_example/tutorial001_py310.py hl[13:24] *}
 
-Ces informations supplĂ©mentaires seront ajoutĂ©es telles quelles au **JSON Schema** de sortie pour ce modĂšle, et elles seront utilisĂ©es dans la documentation de l'API.
+Ces informations supplĂ©mentaires seront ajoutĂ©es telles quelles au **JSON Schema** de sortie pour ce modĂšle, et elles seront utilisĂ©es dans les documents de l'API.
 
-Vous pouvez utiliser l'attribut `model_config` qui accepte un `dict` comme dĂ©crit dans [Documentation de Pydantic : Configuration](https://docs.pydantic.dev/latest/api/config/).
+Vous pouvez utiliser l'attribut `model_config` qui accepte un `dict` comme dĂ©crit dans [documents de Pydantic : Configuration](https://docs.pydantic.dev/latest/api/config/).
 
 Vous pouvez dĂ©finir `"json_schema_extra"` avec un `dict` contenant toutes les donnĂ©es supplĂ©mentaires que vous souhaitez voir apparaĂźtre dans le JSON Schema gĂ©nĂ©rĂ©, y compris `examples`.
 
@@ -28,7 +28,7 @@ Par exemple, vous pourriez l'utiliser pour ajouter des mĂ©tadonnĂ©es pour une in
 
 OpenAPI 3.1.0 (utilisĂ© depuis FastAPI 0.99.0) a ajoutĂ© la prise en charge de `examples`, qui fait partie du standard **JSON Schema**.
 
-Avant cela, seule la clĂ© `example` avec un exemple unique Ă©tait prise en charge. Elle l'est toujours par OpenAPI 3.1.0, mais elle est dĂ©prĂ©ciĂ©e et ne fait pas partie du standard JSON Schema. Vous ĂȘtes donc encouragĂ© Ă  migrer de `example` vers `examples`. đŸ€“
+Avant cela, seul le mot-clĂ© `example` avec un exemple unique Ă©tait pris en charge. Il l'est toujours par OpenAPI 3.1.0, mais il est dĂ©prĂ©ciĂ© et ne fait pas partie du standard JSON Schema. Vous ĂȘtes donc encouragĂ© Ă  migrer de `example` vers `examples`. đŸ€“
 
 Vous pouvez en lire davantage Ă  la fin de cette page.
 
@@ -173,7 +173,7 @@ Ce nouveau champ `examples` dans JSON Schema est **juste une `list`** d'exemples
 
 /// note | Remarque
 
-MĂȘme aprĂšs la sortie d'OpenAPI 3.1.0 avec cette nouvelle intĂ©gration plus simple avec JSON Schema, pendant un temps, Swagger UI, l'outil qui fournit la documentation automatique, ne prenait pas en charge OpenAPI 3.1.0 (il le fait depuis la version 5.0.0 đŸŽ‰).
+MĂȘme aprĂšs la sortie d'OpenAPI 3.1.0 avec cette nouvelle intĂ©gration plus simple avec JSON Schema, pendant un temps, Swagger UI, l'outil qui fournit les documents automatiques, ne prenait pas en charge OpenAPI 3.1.0 (il le fait depuis la version 5.0.0 đŸŽ‰).
 
 Ă€ cause de cela, les versions de FastAPI antĂ©rieures Ă  0.99.0 utilisaient encore des versions d'OpenAPI infĂ©rieures Ă  3.1.0.
 
@@ -183,7 +183,7 @@ MĂȘme aprĂšs la sortie d'OpenAPI 3.1.0 avec cette nouvelle intĂ©gration plus sim
 
 Lorsque vous ajoutez `examples` dans un modĂšle Pydantic, en utilisant `schema_extra` ou `Field(examples=["something"])`, cet exemple est ajoutĂ© au **JSON Schema** de ce modĂšle Pydantic.
 
-Et ce **JSON Schema** du modĂšle Pydantic est inclus dans l'**OpenAPI** de votre API, puis il est utilisĂ© dans l'interface de la documentation.
+Et ce **JSON Schema** du modĂšle Pydantic est inclus dans l'**OpenAPI** de votre API, puis il est utilisĂ© dans l'interface des documents.
 
 Dans les versions de FastAPI antĂ©rieures Ă  0.99.0 (0.99.0 et supĂ©rieures utilisent le nouveau OpenAPI 3.1.0), lorsque vous utilisiez `example` ou `examples` avec l'une des autres utilitaires (`Query()`, `Body()`, etc.), ces exemples n'Ă©taient pas ajoutĂ©s au JSON Schema qui dĂ©crit ces donnĂ©es (pas mĂȘme Ă  la version de JSON Schema propre Ă  OpenAPI), ils Ă©taient ajoutĂ©s directement Ă  la dĂ©claration du *chemin d'accĂšs* dans OpenAPI (en dehors des parties d'OpenAPI qui utilisent JSON Schema).
 
@@ -191,7 +191,7 @@ Mais maintenant que FastAPI 0.99.0 et supĂ©rieures utilisent OpenAPI 3.1.0, qui
 
 ### Swagger UI et `examples` spĂ©cifiques Ă  OpenAPI { #swagger-ui-and-openapi-specific-examples }
 
-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.
 
 Pour rĂ©soudre cela, FastAPI `0.103.0` a **ajoutĂ© la prise en charge** de la dĂ©claration du mĂȘme ancien champ `examples` **spĂ©cifique Ă  OpenAPI** avec le nouveau paramĂštre `openapi_examples`. đŸ€“
 
index 73cf4f38c9f85bab60badc2b75bf8abaecbaa33b..66005d907e398112c9c9f82f48f59c6397450d0a 100644 (file)
@@ -54,7 +54,7 @@ $ fastapi dev
 
 ## VĂ©rifier { #check-it }
 
-Allez Ă  la documentation interactive Ă  l'adresse : [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
+Allez aux documents interactifs Ă  l'adresse : [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
 
 Vous verrez quelque chose comme ceci :
 
@@ -98,19 +98,19 @@ Mais dans ce cas, la mĂȘme application **FastAPI** gĂ©rera l'API et l'authentifi
 
 Voyons cela selon ce point de vue simplifié :
 
-- L'utilisateur saisit le `username` et le `password` dans le frontend, puis appuie sur EntrĂ©e.
-- Le frontend (exĂ©cutĂ© dans le navigateur de l'utilisateur) envoie ce `username` et ce `password` vers une URL spĂ©cifique de notre API (dĂ©clarĂ©e avec `tokenUrl="token"`).
-- L'API vĂ©rifie ce `username` et ce `password`, et rĂ©pond avec un Â« token Â» (nous n'avons encore rien implĂ©mentĂ© de tout cela).
-    - Un Â« token Â» n'est qu'une chaĂźne contenant des informations que nous pouvons utiliser plus tard pour vĂ©rifier cet utilisateur.
-    - Normalement, un token est configurĂ© pour expirer aprĂšs un certain temps.
-        - Ainsi, l'utilisateur devra se reconnecter Ă  un moment donnĂ©.
-        - Et si le token est volĂ©, le risque est moindre. Ce n'est pas une clĂ© permanente qui fonctionnerait indĂ©finiment (dans la plupart des cas).
-- Le frontend stocke ce token temporairement quelque part.
-- L'utilisateur clique dans le frontend pour aller vers une autre section de l'application web frontend.
-- Le frontend doit rĂ©cupĂ©rer d'autres donnĂ©es depuis l'API.
-    - Mais cela nĂ©cessite une authentification pour cet endpoint spĂ©cifique.
-    - Donc, pour s'authentifier auprĂšs de notre API, il envoie un en-tĂȘte `Authorization` avec une valeur `Bearer ` suivie du token.
-    - Si le token contient `foobar`, le contenu de l'en-tĂȘte `Authorization` serait : `Bearer foobar`.
+* L'utilisateur saisit le `username` et le `password` dans le frontend, puis appuie sur EntrĂ©e.
+* Le frontend (exĂ©cutĂ© dans le navigateur de l'utilisateur) envoie ce `username` et ce `password` vers une URL spĂ©cifique de notre API (dĂ©clarĂ©e avec `tokenUrl="token"`).
+* L'API vĂ©rifie ce `username` et ce `password`, et rĂ©pond avec un Â« token Â» (nous n'avons encore rien implĂ©mentĂ© de tout cela).
+    * Un Â« token Â» n'est qu'une chaĂźne contenant des informations que nous pouvons utiliser plus tard pour vĂ©rifier cet utilisateur.
+    * Normalement, un token est configurĂ© pour expirer aprĂšs un certain temps.
+        * Ainsi, l'utilisateur devra se reconnecter Ă  un moment donnĂ©.
+        * Et si le token est volĂ©, le risque est moindre. Ce n'est pas une clĂ© permanente qui fonctionnerait indĂ©finiment (dans la plupart des cas).
+* Le frontend stocke ce token temporairement quelque part.
+* L'utilisateur clique dans le frontend pour aller vers une autre section de l'application web frontend.
+* Le frontend doit rĂ©cupĂ©rer d'autres donnĂ©es depuis l'API.
+    * Mais cela nĂ©cessite une authentification pour cet endpoint spĂ©cifique.
+    * Donc, pour s'authentifier auprĂšs de notre API, il envoie un en-tĂȘte `Authorization` avec une valeur `Bearer ` suivie du token.
+    * Si le token contient `foobar`, le contenu de l'en-tĂȘte `Authorization` serait : `Bearer foobar`.
 
 ## Le `OAuth2PasswordBearer` de **FastAPI** { #fastapis-oauth2passwordbearer }
 
@@ -172,15 +172,15 @@ Vous pouvez maintenant passer ce `oauth2_scheme` en dĂ©pendance avec `Depends`.
 
 {* ../../docs_src/security/tutorial001_an_py310.py hl[12] *}
 
-Cette dĂ©pendance fournira une `str` qui est affectĂ©e au paramĂštre `token` de la fonction de *chemin d'accĂšs*.
+Cette dĂ©pendance fournira une `str` qui est affectĂ©e au paramĂštre `token` de la *fonction de chemin d'accĂšs*.
 
-**FastAPI** saura qu'il peut utiliser cette dĂ©pendance pour dĂ©finir un Â« schĂ©ma de sĂ©curitĂ© Â» dans le schĂ©ma OpenAPI (et la documentation API automatique).
+**FastAPI** saura qu'il peut utiliser cette dĂ©pendance pour dĂ©finir un Â« schĂ©ma de sĂ©curitĂ© Â» dans le schĂ©ma OpenAPI (et les documents automatiques de l'API).
 
 /// note | DĂ©tails techniques
 
 **FastAPI** saura qu'il peut utiliser la classe `OAuth2PasswordBearer` (dĂ©clarĂ©e dans une dĂ©pendance) pour dĂ©finir le schĂ©ma de sĂ©curitĂ© dans OpenAPI parce qu'elle hĂ©rite de `fastapi.security.oauth2.OAuth2`, qui hĂ©rite Ă  son tour de `fastapi.security.base.SecurityBase`.
 
-Tous les utilitaires de sĂ©curitĂ© qui s'intĂšgrent Ă  OpenAPI (et Ă  la documentation API automatique) hĂ©ritent de `SecurityBase`, c'est ainsi que **FastAPI** sait comment les intĂ©grer dans OpenAPI.
+Tous les utilitaires de sĂ©curitĂ© qui s'intĂšgrent Ă  OpenAPI (et aux documents automatiques de l'API) hĂ©ritent de `SecurityBase`, c'est ainsi que **FastAPI** sait comment les intĂ©grer dans OpenAPI.
 
 ///
 
@@ -192,7 +192,7 @@ S'il ne voit pas d'en-tĂȘte `Authorization`, ou si la valeur n'a pas de token `B
 
 Vous n'avez mĂȘme pas Ă  vĂ©rifier si le token existe pour renvoyer une erreur. Vous pouvez ĂȘtre sĂ»r que si votre fonction est exĂ©cutĂ©e, elle aura une `str` dans ce token.
 
-Vous pouvez dĂ©jĂ  l'essayer dans la documentation interactive :
+Vous pouvez dĂ©jĂ  l'essayer dans les documents interactifs :
 
 <img src="/img/tutorial/security/image03.png">
 
index 97cffc666b97e4f92bac5ff9d9731ea10834b11a..664814bc3df3f13d972c69ba8b49b88df7c5d3d9 100644 (file)
@@ -14,7 +14,7 @@ Commençons par crĂ©er un modĂšle d'utilisateur Pydantic.
 
 De la mĂȘme maniĂšre que nous utilisons Pydantic pour dĂ©clarer des corps de requĂȘte, nous pouvons l'utiliser ailleurs :
 
-{* ../../docs_src/security/tutorial002_an_py310.py hl[5,12:6] *}
+{* ../../docs_src/security/tutorial002_an_py310.py hl[5,12:16] *}
 
 ## CrĂ©er une dĂ©pendance `get_current_user` { #create-a-get-current-user-dependency }
 
index 810f1eef1bcba02dd93f89836d081307090b606b..f92fd75a62a8fa125a9e535d4f3eb9f0efbf5a7c 100644 (file)
@@ -58,7 +58,7 @@ Chaque fois que vous fournissez exactement le mĂȘme contenu (exactement le mĂȘme
 
 Mais vous ne pouvez pas convertir le charabia en sens inverse vers le mot de passe.
 
-### Pourquoi utiliser le hachage de mot passe { #why-use-password-hashing }
+### Pourquoi utiliser le hachage de mot de passe { #why-use-password-hashing }
 
 Si votre base de donnĂ©es est volĂ©e, le voleur n'aura pas les mots de passe en clair de vos utilisateurs, seulement les hachages.
 
@@ -120,7 +120,7 @@ Et une autre pour authentifier et renvoyer un utilisateur.
 
 Lorsque `authenticate_user` est appelĂ©e avec un nom d'utilisateur qui n'existe pas dans la base de donnĂ©es, nous exĂ©cutons tout de mĂȘme `verify_password` contre un hachage factice.
 
-Cela garantit que le point de terminaison met approximativement le mĂȘme temps Ă  rĂ©pondre que le nom d'utilisateur soit valide ou non, empĂȘchant des **attaques temporelles** qui pourraient ĂȘtre utilisĂ©es pour Ă©numĂ©rer les noms d'utilisateur existants.
+Cela garantit que l'endpoint met approximativement le mĂȘme temps Ă  rĂ©pondre que le nom d'utilisateur soit valide ou non, empĂȘchant des **attaques temporelles** qui pourraient ĂȘtre utilisĂ©es pour Ă©numĂ©rer les noms d'utilisateur existants.
 
 /// note | Remarque
 
@@ -152,7 +152,7 @@ CrĂ©ez une variable `ALGORITHM` avec l'algorithme utilisĂ© pour signer le jeton
 
 CrĂ©ez une variable pour l'expiration du jeton.
 
-DĂ©finissez un modĂšle Pydantic qui sera utilisĂ© dans le point de terminaison du jeton pour la rĂ©ponse.
+DĂ©finissez un modĂšle Pydantic qui sera utilisĂ© dans l'endpoint du jeton pour la rĂ©ponse.
 
 CrĂ©ez une fonction utilitaire pour gĂ©nĂ©rer un nouveau jeton d'accĂšs.
 
@@ -200,7 +200,7 @@ L'important Ă  garder Ă  l'esprit est que la clĂ© `sub` doit contenir un identif
 
 ## VĂ©rifier { #check-it }
 
-Lancez le serveur et allez Ă  la documentation : [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
+Lancez le serveur et accĂ©dez aux documents : [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
 
 Vous verrez l'interface utilisateur suivante :
 
@@ -215,13 +215,13 @@ Mot de passe : `secret`
 
 /// tip | Astuce
 
-Remarquez qu'Ă  aucun endroit du code le mot de passe en clair Â« secret Â» n'apparaĂźt, nous n'avons que la version hachĂ©e.
+Remarquez qu'Ă  aucun endroit du code le mot de passe en clair Â« `secret` Â» n'apparaĂźt, nous n'avons que la version hachĂ©e.
 
 ///
 
 <img src="/img/tutorial/security/image08.png">
 
-Appelez le point de terminaison `/users/me/`, vous obtiendrez la rĂ©ponse suivante :
+Appelez l'endpoint `/users/me/`, vous obtiendrez la rĂ©ponse suivante :
 
 ```JSON
 {
index b0f974f0d7efb65902bc1ec7bb128e8dd19d5798..1ee9e61ec8f1fa470dda27d44d5f4825561ae832 100644 (file)
@@ -14,13 +14,13 @@ Mais ne vous inquiĂ©tez pas, vous pouvez l'afficher comme vous le souhaitez Ă  v
 
 Et vos modĂšles de base de donnĂ©es peuvent utiliser les noms que vous voulez.
 
-Mais pour le chemin d'accĂšs de connexion, nous devons utiliser ces noms pour ĂȘtre compatibles avec la spĂ©cification (et pouvoir, par exemple, utiliser le systĂšme de documentation API intĂ©grĂ©).
+Mais pour le *chemin d'accĂšs* de connexion, nous devons utiliser ces noms pour ĂȘtre compatibles avec la spĂ©cification (et pouvoir, par exemple, utiliser le systĂšme de documentation API intĂ©grĂ©).
 
 La spĂ©cification prĂ©cise Ă©galement que `username` et `password` doivent ĂȘtre envoyĂ©s en donnĂ©es de formulaire (donc pas de JSON ici).
 
 ### `scope` { #scope }
 
-La spĂ©cification indique aussi que le client peut envoyer un autre champ de formulaire Â« scope Â».
+La spĂ©cification indique aussi que le client peut envoyer un autre champ de formulaire Â« `scope` Â».
 
 Le nom du champ de formulaire est `scope` (au singulier), mais il s'agit en fait d'une longue chaĂźne contenant des Â« scopes Â» sĂ©parĂ©s par des espaces.
 
@@ -50,7 +50,7 @@ Utilisons maintenant les utilitĂ©s fournies par **FastAPI** pour gĂ©rer cela.
 
 ### `OAuth2PasswordRequestForm` { #oauth2passwordrequestform }
 
-Tout d'abord, importez `OAuth2PasswordRequestForm`, et utilisez-la en tant que dĂ©pendance avec `Depends` dans le chemin d'accĂšs pour `/token` :
+Tout d'abord, importez `OAuth2PasswordRequestForm`, et utilisez-la en tant que dĂ©pendance avec `Depends` dans le *chemin d'accĂšs* pour `/token` :
 
 {* ../../docs_src/security/tutorial003_an_py310.py hl[4,78] *}
 
@@ -63,7 +63,7 @@ Tout d'abord, importez `OAuth2PasswordRequestForm`, et utilisez-la en tant que d
 
 /// tip | Astuce
 
-La spĂ©cification OAuth2 exige en rĂ©alitĂ© un champ `grant_type` avec la valeur fixe `password`, mais `OAuth2PasswordRequestForm` ne l'impose pas.
+La spĂ©cification OAuth2 *exige* en rĂ©alitĂ© un champ `grant_type` avec la valeur fixe `password`, mais `OAuth2PasswordRequestForm` ne l'impose pas.
 
 Si vous avez besoin de l'imposer, utilisez `OAuth2PasswordRequestFormStrict` au lieu de `OAuth2PasswordRequestForm`.
 
@@ -132,7 +132,7 @@ Ainsi, il ne pourra pas essayer d'utiliser ces mĂȘmes mots de passe dans un autr
 
 `UserInDB(**user_dict)` signifie :
 
-Passez les clĂ©s et valeurs de `user_dict` directement comme arguments clé‑valeur, Ă©quivalent Ă  :
+*Passez les clĂ©s et valeurs de `user_dict` directement comme arguments clé‑valeur, Ă©quivalent Ă  :*
 
 ```Python
 UserInDB(
@@ -146,7 +146,7 @@ UserInDB(
 
 /// note | Remarque
 
-Pour une explication plus complĂšte de `**user_dict`, consultez [la documentation pour **ModĂšles supplĂ©mentaires**](../extra-models.md#about-user-in-dict).
+Pour une explication plus complĂšte de `**user_dict`, consultez [la documentation pour **ModĂšles supplĂ©mentaires**](../extra-models.md#about-user-in-model-dump).
 
 ///
 
@@ -154,7 +154,7 @@ Pour une explication plus complĂšte de `**user_dict`, consultez [la documentatio
 
 La rĂ©ponse de l'endpoint `token` doit ĂȘtre un objet JSON.
 
-Il doit contenir un `token_type`. Dans notre cas, comme nous utilisons des jetons Â« Bearer Â», le type de jeton doit ĂȘtre Â« bearer Â».
+Il doit contenir un `token_type`. Dans notre cas, comme nous utilisons des jetons Â« Bearer Â», le type de jeton doit ĂȘtre Â« `bearer` Â».
 
 Et il doit contenir un `access_token`, avec une chaĂźne contenant notre jeton d'accĂšs.
 
@@ -186,7 +186,7 @@ Pour le reste, **FastAPI** s'en charge pour vous.
 
 Nous allons maintenant mettre Ă  jour nos dĂ©pendances.
 
-Nous voulons obtenir `current_user` uniquement si cet utilisateur est actif.
+Nous voulons obtenir `current_user` *uniquement* si cet utilisateur est actif.
 
 Nous crĂ©ons donc une dĂ©pendance supplĂ©mentaire `get_current_active_user` qui utilise Ă  son tour `get_current_user` comme dĂ©pendance.
 
@@ -216,7 +216,7 @@ C'est l'avantage des standards ...
 
 ## Voir en action { #see-it-in-action }
 
-Ouvrez la documentation interactive : [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
+Ouvrez les documents interactifs : [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
 
 ### S'authentifier { #authenticate }
 
index 70e5b1dbab638e8fb122e131abaf757ae3b36227..2f6aad3a9d53ee30e62b4e8102037ff4aa27bc97 100644 (file)
@@ -30,7 +30,7 @@ Il existe un gĂ©nĂ©rateur de projet officiel avec **FastAPI** et **PostgreSQL**,
 
 ///
 
-Il s'agit d'un tutoriel trĂšs simple et court ; si vous souhaitez apprendre sur les bases de donnĂ©es en gĂ©nĂ©ral, sur SQL, ou des fonctionnalitĂ©s plus avancĂ©es, allez voir la [documentation SQLModel](https://sqlmodel.tiangolo.com/).
+Il s'agit d'un tutoriel trĂšs simple et court ; si vous souhaitez apprendre sur les bases de donnĂ©es en gĂ©nĂ©ral, sur SQL, ou des fonctionnalitĂ©s plus avancĂ©es, allez voir les [documents de SQLModel](https://sqlmodel.tiangolo.com/).
 
 ## Installer `SQLModel` { #install-sqlmodel }
 
@@ -57,15 +57,15 @@ Importez `SQLModel` et crĂ©ez un modĂšle de base de donnĂ©es :
 
 {* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[1:11] hl[7:11] *}
 
-La classe `Hero` est trĂšs similaire Ă  un modĂšle Pydantic (en fait, en dessous, c'est rĂ©ellement un modĂšle Pydantic).
+La classe `Hero` est trĂšs similaire Ă  un modĂšle Pydantic (en fait, en dessous, c'est rĂ©ellement *un modĂšle Pydantic*).
 
 Il y a quelques diffĂ©rences :
 
 * `table=True` indique Ă  SQLModel qu'il s'agit d'un *modĂšle de table*, il doit reprĂ©senter une **table** dans la base SQL, ce n'est pas seulement un *modĂšle de donnĂ©es* (comme le serait n'importe quelle autre classe Pydantic classique).
 
-* `Field(primary_key=True)` indique Ă  SQLModel que `id` est la **clĂ© primaire** dans la base SQL (vous pouvez en savoir plus sur les clĂ©s primaires SQL dans la documentation SQLModel).
+* `Field(primary_key=True)` indique Ă  SQLModel que `id` est la **clĂ© primaire** dans la base SQL (vous pouvez en savoir plus sur les clĂ©s primaires SQL dans les documents de SQLModel).
 
-    Remarque : nous utilisons `int | None` pour le champ clĂ© primaire afin qu'en Python nous puissions *crĂ©er un objet sans `id`* (`id=None`), en supposant que la base *le gĂ©nĂšre Ă  l'enregistrement*. SQLModel comprend que la base fournira l'`id` et *dĂ©finit la colonne comme un `INTEGER` non nul* dans le schĂ©ma de base. Voir la [documentation SQLModel sur les clĂ©s primaires](https://sqlmodel.tiangolo.com/tutorial/create-db-and-table/#primary-key-id) pour plus de dĂ©tails.
+    **Remarque :** nous utilisons `int | None` pour le champ clĂ© primaire afin qu'en Python nous puissions *crĂ©er un objet sans `id`* (`id=None`), en supposant que la base *le gĂ©nĂšre Ă  l'enregistrement*. SQLModel comprend que la base fournira l'`id` et *dĂ©finit la colonne comme un `INTEGER` non nul* dans le schĂ©ma de base. Voir les [documents de SQLModel sur les clĂ©s primaires](https://sqlmodel.tiangolo.com/tutorial/create-db-and-table/#primary-key-id) pour plus de dĂ©tails.
 
 * `Field(index=True)` indique Ă  SQLModel qu'il doit crĂ©er un **index SQL** pour cette colonne, ce qui permettra des recherches plus rapides dans la base lors de la lecture de donnĂ©es filtrĂ©es par cette colonne.
 
@@ -121,7 +121,7 @@ Comme chaque modĂšle SQLModel est aussi un modĂšle Pydantic, vous pouvez l'utili
 
 Par exemple, si vous dĂ©clarez un paramĂštre de type `Hero`, il sera lu depuis le **corps JSON**.
 
-De la mĂȘme maniĂšre, vous pouvez le dĂ©clarer comme **type de retour** de la fonction, et alors la forme des donnĂ©es apparaĂźtra dans l'UI automatique de documentation de l'API.
+De la mĂȘme maniĂšre, vous pouvez le dĂ©clarer comme **type de retour** de la fonction, et alors la forme des donnĂ©es apparaĂźtra dans l'UI automatique des documents de l'API.
 
 {* ../../docs_src/sql_databases/tutorial001_an_py310.py ln[40:45] hl[40:45] *}
 
@@ -173,7 +173,7 @@ Si vous vĂ©rifiez l'application prĂ©cĂ©dente, dans l'UI vous pouvez voir que, ju
 
 Nous ne devrions pas laisser cela se produire, ils pourraient Ă©craser un `id` que nous avons dĂ©jĂ  attribuĂ© dans la base. DĂ©cider de l'`id` doit ĂȘtre fait par le **backend** ou la **base**, **pas par le client**.
 
-De plus, nous crĂ©ons un `secret_name` pour le hĂ©ros, mais jusqu'ici, nous le renvoyons partout, ce n'est pas trĂšs Â« secret Â» ... đŸ˜…
+De plus, nous crĂ©ons un `secret_name` pour le hĂ©ros, mais jusqu'ici, nous le renvoyons partout, ce n'est pas trĂšs **secret** ... đŸ˜…
 
 Nous allons corriger ces choses en ajoutant quelques **modĂšles supplĂ©mentaires**. C'est lĂ  que SQLModel brille. âœš
 
@@ -354,4 +354,4 @@ Si vous allez sur l'UI `/docs` de l'API, vous verrez qu'elle est maintenant Ă  j
 
 Vous pouvez utiliser [**SQLModel**](https://sqlmodel.tiangolo.com/) pour interagir avec une base SQL et simplifier le code avec des *modĂšles de donnĂ©es* et des *modĂšles de table*.
 
-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/). đŸš€
index 6a54840afbb7820ad98d8189da0d00d7c71d3b39..cfbbe86b9a512e673a71bb3efaae5dcdf7787498 100644 (file)
@@ -2,6 +2,14 @@
 
 Vous pouvez servir des fichiers statiques automatiquement Ă  partir d'un rĂ©pertoire en utilisant `StaticFiles`.
 
+/// tip | Astuce
+
+Si vous devez hĂ©berger un frontend, utilisez plutĂŽt `app.frontend()`, lisez-en davantage dans [Frontend](frontend.md).
+
+`app.frontend()` utilise `StaticFiles` en interne, avec plusieurs avantages supplĂ©mentaires pour les frontends, comme la gestion du routing cĂŽtĂ© client.
+
+///
+
 ## Utiliser `StaticFiles` { #use-staticfiles }
 
 - Importer `StaticFiles`.
index 5176034258c9c82007c4bf74a925efd81f9bf22f..883a61155799e4154f0985d056db4d2647af55cf 100644 (file)
@@ -12,7 +12,7 @@ Avec cela, vous pouvez utiliser [pytest](https://docs.pytest.org/) directement a
 
 Pour utiliser `TestClient`, installez d’abord [`httpx`](https://www.python-httpx.org).
 
-Vous devez crĂ©er un [environnement virtuel](../virtual-environments.md), l’activer, puis y installer le paquet, par exemple :
+Vous devez vous assurer de crĂ©er un [environnement virtuel](../virtual-environments.md), de l’activer, puis d’y installer le paquet, par exemple :
 
 ```console
 $ pip install httpx
@@ -156,7 +156,7 @@ Si vous avez un modĂšle Pydantic dans votre test et que vous souhaitez envoyer s
 
 AprĂšs cela, vous avez simplement besoin d’installer `pytest`.
 
-Vous devez crĂ©er un [environnement virtuel](../virtual-environments.md), l’activer, puis y installer le paquet, par exemple :
+Vous devez vous assurer de crĂ©er un [environnement virtuel](../virtual-environments.md), de l’activer, puis d’y installer le paquet, par exemple :
 
 <div class="termy">
 
index c9eefb37be03906db98c4ac94330d921075deb3e..f2a9f47da5b65dee518f6309e393269e6bbacb0f 100644 (file)
@@ -1,6 +1,6 @@
 # Environnements virtuels { #virtual-environments }
 
-Lorsque vous travaillez sur des projets Python, vous devriez probablement utiliser un environnement virtuel (ou un mĂ©canisme similaire) pour isoler les packages que vous installez pour chaque projet.
+Lorsque vous travaillez sur des projets Python, vous devriez probablement utiliser un **environnement virtuel** (ou un mĂ©canisme similaire) pour isoler les packages que vous installez pour chaque projet.
 
 /// note | Remarque
 
@@ -10,19 +10,19 @@ Si vous connaissez dĂ©jĂ  les environnements virtuels, comment les crĂ©er et les
 
 /// tip | Astuce
 
-Un environnement virtuel est diffĂ©rent d’une variable d’environnement.
+Un **environnement virtuel** est diffĂ©rent d’une **variable d’environnement**.
 
-Une variable d’environnement est une variable du systĂšme qui peut ĂȘtre utilisĂ©e par des programmes.
+Une **variable d’environnement** est une variable du systĂšme qui peut ĂȘtre utilisĂ©e par des programmes.
 
-Un environnement virtuel est un rĂ©pertoire contenant certains fichiers.
+Un **environnement virtuel** est un rĂ©pertoire contenant certains fichiers.
 
 ///
 
 /// note | Remarque
 
-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).
 
 ///
 
@@ -53,11 +53,11 @@ $ cd awesome-project
 
 ## CrĂ©er un environnement virtuel { #create-a-virtual-environment }
 
-Lorsque vous commencez Ă  travailler sur un projet Python pour la premiĂšre fois, crĂ©ez un environnement virtuel <strong><dfn title="il existe d'autres options, il s'agit d'une simple recommandation">dans votre projet</dfn></strong>.
+Lorsque vous commencez Ă  travailler sur un projet Python **pour la premiĂšre fois**, crĂ©ez un environnement virtuel **<dfn title="il existe d'autres options, il s'agit d'une simple recommandation">dans votre projet</dfn>**.
 
 /// tip | Astuce
 
-Vous n’avez besoin de faire cela qu’une seule fois par projet, pas Ă  chaque fois que vous travaillez.
+Vous n’avez besoin de faire cela qu’**une seule fois par projet**, pas Ă  chaque fois que vous travaillez.
 
 ///
 
@@ -120,7 +120,7 @@ Activez le nouvel environnement virtuel afin que toute commande Python que vous
 
 /// tip | Astuce
 
-Faites cela Ă  chaque fois que vous dĂ©marrez une nouvelle session de terminal pour travailler sur le projet.
+Faites cela **chaque fois** que vous dĂ©marrez une **nouvelle session de terminal** pour travailler sur le projet.
 
 ///
 
@@ -164,9 +164,9 @@ $ source .venv/Scripts/activate
 
 /// tip | Astuce
 
-Chaque fois que vous installez un nouveau package dans cet environnement, activez de nouveau l’environnement.
+Chaque fois que vous installez un **nouveau package** dans cet environnement, **activez** de nouveau l’environnement.
 
-Vous vous assurez ainsi que si vous utilisez un programme de terminal (<abbr title="command line interface - interface en ligne de commande">CLI</abbr>) installĂ© par ce package, vous utilisez celui de votre environnement virtuel et non un autre qui pourrait ĂȘtre installĂ© globalement, probablement avec une version diffĂ©rente de celle dont vous avez besoin.
+Vous vous assurez ainsi que si vous utilisez un **programme de terminal (<abbr title="command line interface - interface en ligne de commande">CLI</abbr>)** installĂ© par ce package, vous utilisez celui de votre environnement virtuel et non un autre qui pourrait ĂȘtre installĂ© globalement, probablement avec une version diffĂ©rente de celle dont vous avez besoin.
 
 ///
 
@@ -176,7 +176,7 @@ VĂ©rifiez que l’environnement virtuel est actif (la commande prĂ©cĂ©dente a fo
 
 /// tip | Astuce
 
-C’est facultatif, mais c’est une bonne maniĂšre de vĂ©rifier que tout fonctionne comme prĂ©vu et que vous utilisez l’environnement virtuel voulu.
+C’est **facultatif**, mais c’est une bonne maniĂšre de **vĂ©rifier** que tout fonctionne comme prĂ©vu et que vous utilisez l’environnement virtuel voulu.
 
 ///
 
@@ -220,13 +220,13 @@ Si vous utilisez [`uv`](https://github.com/astral-sh/uv), vous l’utiliserez po
 
 ///
 
-Si vous utilisez `pip` pour installer des packages (il est fourni par dĂ©faut avec Python), vous devez le mettre Ă  niveau vers la derniĂšre version.
+Si vous utilisez `pip` pour installer des packages (il est fourni par dĂ©faut avec Python), vous devez le **mettre Ă  niveau** vers la derniĂšre version.
 
 Beaucoup d’erreurs exotiques lors de l’installation d’un package se rĂ©solvent simplement en mettant d’abord `pip` Ă  niveau.
 
 /// tip | Astuce
 
-Vous feriez normalement cela une seule fois, juste aprĂšs avoir créé l’environnement virtuel.
+Vous feriez normalement cela **une seule fois**, juste aprĂšs avoir créé l’environnement virtuel.
 
 ///
 
@@ -264,7 +264,7 @@ Cette commande installera pip s’il n’est pas dĂ©jĂ  installĂ© et garantit au
 
 ## Ajouter `.gitignore` { #add-gitignore }
 
-Si vous utilisez Git (vous devriez), ajoutez un fichier `.gitignore` pour exclure tout ce qui se trouve dans votre `.venv` de Git.
+Si vous utilisez **Git** (vous devriez), ajoutez un fichier `.gitignore` pour exclure tout ce qui se trouve dans votre `.venv` de Git.
 
 /// tip | Astuce
 
@@ -274,7 +274,7 @@ Si vous avez utilisĂ© [`uv`](https://github.com/astral-sh/uv) pour crĂ©er l’en
 
 /// tip | Astuce
 
-Faites cela une seule fois, juste aprĂšs avoir créé l’environnement virtuel.
+Faites cela **une seule fois**, juste aprĂšs avoir créé l’environnement virtuel.
 
 ///
 
@@ -308,19 +308,19 @@ AprĂšs avoir activĂ© l’environnement, vous pouvez y installer des packages.
 
 /// tip | Astuce
 
-Faites cela une seule fois lorsque vous installez ou mettez Ă  niveau les packages nĂ©cessaires Ă  votre projet.
+Faites cela **une seule fois** lorsque vous installez ou mettez Ă  niveau les packages nĂ©cessaires Ă  votre projet.
 
-Si vous devez mettre Ă  niveau une version ou ajouter un nouveau package, vous le referez.
+Si vous devez mettre Ă  niveau une version ou ajouter un nouveau package, vous le **referez**.
 
 ///
 
 ### Installer des packages directement { #install-packages-directly }
 
-Si vous ĂȘtes pressĂ© et ne souhaitez pas utiliser un fichier pour dĂ©clarer les dĂ©pendances de votre projet, vous pouvez les installer directement.
+Si vous ĂȘtes pressĂ© et ne souhaitez pas utiliser un fichier pour dĂ©clarer les dĂ©pendances de packages de votre projet, vous pouvez les installer directement.
 
 /// tip | Astuce
 
-C’est une trĂšs bonne idĂ©e de placer les packages et leurs versions nĂ©cessaires Ă  votre programme dans un fichier (par exemple `requirements.txt` ou `pyproject.toml`).
+C’est une (trĂšs) bonne idĂ©e de placer les packages et leurs versions nĂ©cessaires Ă  votre programme dans un fichier (par exemple `requirements.txt` ou `pyproject.toml`).
 
 ///
 
@@ -421,13 +421,13 @@ Par exemple :
 
 /// tip | Astuce
 
-Vous devez normalement faire cela une seule fois, lorsque vous crĂ©ez l’environnement virtuel.
+Vous devez normalement faire cela seulement **une fois**, lorsque vous crĂ©ez l’environnement virtuel.
 
 ///
 
 ## DĂ©sactiver l’environnement virtuel { #deactivate-the-virtual-environment }
 
-Une fois que vous avez fini de travailler sur votre projet, vous pouvez dĂ©sactiver l’environnement virtuel.
+Une fois que vous avez fini de travailler sur votre projet, vous pouvez **dĂ©sactiver** l’environnement virtuel.
 
 <div class="termy">
 
@@ -457,17 +457,17 @@ Continuez la lecture. đŸ‘‡đŸ€“
 
 Pour travailler avec FastAPI, vous devez installer [Python](https://www.python.org/).
 
-Ensuite, vous devrez installer FastAPI et tout autre package que vous souhaitez utiliser.
+Ensuite, vous devez **installer** FastAPI et tout autre **package** que vous souhaitez utiliser.
 
 Pour installer des packages, vous utiliseriez normalement la commande `pip` fournie avec Python (ou des alternatives similaires).
 
-NĂ©anmoins, si vous utilisez simplement `pip` directement, les packages seraient installĂ©s dans votre environnement Python global (l’installation globale de Python).
+NĂ©anmoins, si vous utilisez simplement `pip` directement, les packages seraient installĂ©s dans votre **environnement Python global** (l’installation globale de Python).
 
 ### Le problĂšme { #the-problem }
 
 Alors, quel est le problĂšme d’installer des packages dans l’environnement Python global ?
 
-À un moment donnĂ©, vous finirez probablement par Ă©crire de nombreux programmes diffĂ©rents qui dĂ©pendent de packages diffĂ©rents. Et certains de ces projets sur lesquels vous travaillez dĂ©pendront de versions diffĂ©rentes du mĂȘme package. đŸ˜±
+À un moment donnĂ©, vous finirez probablement par Ă©crire de nombreux programmes diffĂ©rents qui dĂ©pendent de **packages diffĂ©rents**. Et certains de ces projets sur lesquels vous travaillez dĂ©pendront de **versions diffĂ©rentes** du mĂȘme package. đŸ˜±
 
 Par exemple, vous pourriez crĂ©er un projet appelĂ© `philosophers-stone`, ce programme dĂ©pend d’un autre package appelĂ© **`harry`, en version `1`**. Vous devez donc installer `harry`.
 
@@ -483,7 +483,7 @@ flowchart LR
     azkaban(prisoner-of-azkaban) --> |requires| harry-3[harry v3]
 ```
 
-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.
 
 Si vous voulez exĂ©cuter `philosophers-stone`, vous devrez d’abord installer `harry` en version `1`, par exemple avec :
 
@@ -519,7 +519,7 @@ $ pip install "harry==3"
 
 Et vous vous retrouverez alors avec `harry` version `3` installĂ© dans votre environnement Python global.
 
-Et si vous essayez d’exĂ©cuter Ă  nouveau `philosophers-stone`, il y a une chance que cela ne fonctionne pas car il a besoin de `harry` version `1`.
+Et si vous essayez d’exĂ©cuter Ă  nouveau `philosophers-stone`, il y a une chance que cela **ne fonctionne pas** car il a besoin de `harry` version `1`.
 
 ```mermaid
 flowchart LR
@@ -538,13 +538,13 @@ flowchart LR
 
 /// tip | Astuce
 
-Il est trĂšs courant que les packages Python fassent de leur mieux pour Ă©viter les changements cassants dans les nouvelles versions, mais il vaut mieux jouer la sĂ©curitĂ© et installer de nouvelles versions intentionnellement et lorsque vous pouvez exĂ©cuter les tests pour vĂ©rifier que tout fonctionne correctement.
+Il est trĂšs courant que les packages Python fassent de leur mieux pour **Ă©viter les changements cassants** dans les **nouvelles versions**, mais il vaut mieux jouer la sĂ©curitĂ© et installer de nouvelles versions intentionnellement et lorsque vous pouvez exĂ©cuter les tests pour vĂ©rifier que tout fonctionne correctement.
 
 ///
 
-Maintenant, imaginez cela avec beaucoup d’autres packages dont tous vos projets dĂ©pendent. C’est trĂšs difficile Ă  gĂ©rer. Et vous finiriez probablement par exĂ©cuter certains projets avec des versions incompatibles des packages, sans savoir pourquoi quelque chose ne fonctionne pas.
+Maintenant, imaginez cela avec **beaucoup** d’autres **packages** dont tous vos **projets dĂ©pendent**. C’est trĂšs difficile Ă  gĂ©rer. Et vous finiriez probablement par exĂ©cuter certains projets avec des **versions incompatibles** des packages, sans savoir pourquoi quelque chose ne fonctionne pas.
 
-De plus, selon votre systĂšme d’exploitation (par exemple Linux, Windows, macOS), il se peut qu’il soit livrĂ© avec Python dĂ©jĂ  installĂ©. Et dans ce cas, il avait probablement des packages prĂ©installĂ©s avec des versions spĂ©cifiques nĂ©cessaires Ă  votre systĂšme. Si vous installez des packages dans l’environnement Python global, vous pourriez finir par casser certains des programmes fournis avec votre systĂšme d’exploitation.
+De plus, selon votre systĂšme d’exploitation (par exemple Linux, Windows, macOS), il se peut qu’il soit livrĂ© avec Python dĂ©jĂ  installĂ©. Et dans ce cas, il avait probablement des packages prĂ©installĂ©s avec des versions spĂ©cifiques **nĂ©cessaires Ă  votre systĂšme**. Si vous installez des packages dans l’environnement Python global, vous pourriez finir par **casser** certains des programmes fournis avec votre systĂšme d’exploitation.
 
 ## OĂč les packages sont-ils installĂ©s { #where-are-packages-installed }
 
@@ -566,17 +566,17 @@ $ pip install "fastapi[standard]"
 
 Cela tĂ©lĂ©chargera un fichier compressĂ© avec le code de FastAPI, normalement depuis [PyPI](https://pypi.org/project/fastapi/).
 
-Il tĂ©lĂ©chargera Ă©galement des fichiers pour d’autres packages dont FastAPI dĂ©pend.
+Il **tĂ©lĂ©chargera** Ă©galement des fichiers pour d’autres packages dont FastAPI dĂ©pend.
 
-Ensuite, il extraira tous ces fichiers et les placera dans un rĂ©pertoire de votre ordinateur.
+Ensuite, il **extraira** tous ces fichiers et les placera dans un rĂ©pertoire de votre ordinateur.
 
-Par dĂ©faut, il placera ces fichiers tĂ©lĂ©chargĂ©s et extraits dans le rĂ©pertoire fourni avec votre installation de Python, c’est l’environnement global.
+Par dĂ©faut, il placera ces fichiers tĂ©lĂ©chargĂ©s et extraits dans le rĂ©pertoire fourni avec votre installation de Python, c’est l’**environnement global**.
 
 ## Qu’est-ce qu’un environnement virtuel { #what-are-virtual-environments }
 
-La solution aux problĂšmes posĂ©s par le fait d’avoir tous les packages dans l’environnement global est d’utiliser un environnement virtuel pour chaque projet sur lequel vous travaillez.
+La solution aux problĂšmes posĂ©s par le fait d’avoir tous les packages dans l’environnement global est d’utiliser un **environnement virtuel pour chaque projet** sur lequel vous travaillez.
 
-Un environnement virtuel est un rĂ©pertoire, trĂšs similaire Ă  celui global, oĂč vous pouvez installer les packages pour un projet.
+Un environnement virtuel est un **rĂ©pertoire**, trĂšs similaire Ă  celui global, oĂč vous pouvez installer les packages pour un projet.
 
 De cette maniĂšre, chaque projet aura son propre environnement virtuel (rĂ©pertoire `.venv`) avec ses propres packages.
 
@@ -730,7 +730,7 @@ et utilisera celui-ci.
 
 ////
 
-Un dĂ©tail important est qu’il placera le chemin de l’environnement virtuel au dĂ©but de la variable `PATH`. Le systĂšme le trouvera avant de trouver tout autre Python disponible. Ainsi, lorsque vous exĂ©cutez `python`, il utilisera le Python de l’environnement virtuel au lieu de tout autre `python` (par exemple, un `python` d’un environnement global).
+Un dĂ©tail important est qu’il placera le chemin de l’environnement virtuel au **dĂ©but** de la variable `PATH`. Le systĂšme le trouvera **avant** de trouver tout autre Python disponible. Ainsi, lorsque vous exĂ©cutez `python`, il utilisera le Python **de l’environnement virtuel** au lieu de tout autre `python` (par exemple, un `python` d’un environnement global).
 
 Activer un environnement virtuel change aussi deux ou trois autres choses, mais c’est l’un des points les plus importants.
 
@@ -766,11 +766,11 @@ C:\Users\user\code\awesome-project\.venv\Scripts\python
 
 ////
 
-Cela signifie que le programme `python` qui sera utilisĂ© est celui dans l’environnement virtuel.
+Cela signifie que le programme `python` qui sera utilisĂ© est celui **dans l’environnement virtuel**.
 
 Vous utilisez `which` sous Linux et macOS et `Get-Command` sous Windows PowerShell.
 
-La façon dont cette commande fonctionne est qu’elle va vĂ©rifier la variable d’environnement `PATH`, en parcourant chaque chemin dans l’ordre, Ă  la recherche du programme nommĂ© `python`. Une fois trouvĂ©, elle vous affichera le chemin vers ce programme.
+La façon dont cette commande fonctionne est qu’elle va vĂ©rifier la variable d’environnement `PATH`, en parcourant **chaque chemin dans l’ordre**, Ă  la recherche du programme nommĂ© `python`. Une fois trouvĂ©, elle vous **affichera le chemin** vers ce programme.
 
 La partie la plus importante est que lorsque vous appelez `python`, c’est exactement Â« `python` Â» qui sera exĂ©cutĂ©.
 
@@ -778,9 +778,9 @@ Ainsi, vous pouvez confirmer si vous ĂȘtes dans le bon environnement virtuel.
 
 /// 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.
 
 Il est utile de pouvoir vĂ©rifier quel `python` est utilisĂ©. đŸ€“
 
@@ -788,9 +788,9 @@ Il est utile de pouvoir vĂ©rifier quel `python` est utilisĂ©. đŸ€“
 
 ## Pourquoi dĂ©sactiver un environnement virtuel { #why-deactivate-a-virtual-environment }
 
-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 :
 
@@ -842,23 +842,23 @@ I solemnly swear đŸș
 
 ## 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**.
 
-Il existe de nombreuses alternatives pour gĂ©rer les environnements virtuels, les dĂ©pendances de packages (requirements), les projets.
+Il existe de nombreuses **alternatives** pour gĂ©rer les environnements virtuels, les dĂ©pendances de packages (requirements), les projets.
 
-Lorsque vous ĂȘtes prĂȘt et souhaitez utiliser un outil pour gĂ©rer l’ensemble du projet, les dĂ©pendances, les environnements virtuels, etc., je vous suggĂšre d’essayer [uv](https://github.com/astral-sh/uv).
+Lorsque vous ĂȘtes prĂȘt et souhaitez utiliser un outil pour **gĂ©rer l’ensemble du projet**, les dĂ©pendances de packages, les environnements virtuels, etc., je vous suggĂšre d’essayer [uv](https://github.com/astral-sh/uv).
 
 `uv` peut faire beaucoup de choses, il peut :
 
-* Installer Python pour vous, y compris diffĂ©rentes versions
-* GĂ©rer l’environnement virtuel pour vos projets
-* Installer des packages
-* GĂ©rer les dĂ©pendances de packages et leurs versions pour votre projet
-* Vous assurer d’avoir un ensemble exact de packages et de versions Ă  installer, y compris leurs dĂ©pendances, afin que vous puissiez ĂȘtre certain d’exĂ©cuter votre projet en production exactement comme sur votre ordinateur pendant le dĂ©veloppement, cela s’appelle le locking
+* **Installer Python** pour vous, y compris diffĂ©rentes versions
+* GĂ©rer l’**environnement virtuel** pour vos projets
+* Installer des **packages**
+* GĂ©rer les **dĂ©pendances et versions** de packages pour votre projet
+* Vous assurer d’avoir un ensemble **exact** de packages et de versions Ă  installer, y compris leurs dĂ©pendances, afin que vous puissiez ĂȘtre certain d’exĂ©cuter votre projet en production exactement comme sur votre ordinateur pendant le dĂ©veloppement, cela s’appelle le **locking**
 * Et bien d’autres choses
 
 ## Conclusion { #conclusion }
 
-Si vous avez lu et compris tout cela, vous en savez maintenant bien plus sur les environnements virtuels que beaucoup de dĂ©veloppeurs. đŸ€“
+Si vous avez lu et compris tout cela, vous en savez maintenant **bien plus** sur les environnements virtuels que beaucoup de dĂ©veloppeurs. đŸ€“
 
-ConnaĂźtre ces dĂ©tails vous sera trĂšs probablement utile Ă  l’avenir lorsque vous dĂ©boguerez quelque chose qui semble complexe, mais vous saurez comment tout fonctionne en dessous. đŸ˜Ž
+ConnaĂźtre ces dĂ©tails vous sera trĂšs probablement utile Ă  l’avenir lorsque vous dĂ©boguerez quelque chose qui semble complexe, mais vous saurez **comment tout fonctionne en dessous**. đŸ˜Ž