]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Update translations for fr (update-outdated) (#15165)
authorSebastiĂĄn RamĂ­rez <tiangolo@gmail.com>
Thu, 19 Mar 2026 18:37:13 +0000 (19:37 +0100)
committerGitHub <noreply@github.com>
Thu, 19 Mar 2026 18:37:13 +0000 (18:37 +0000)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
98 files changed:
docs/fr/docs/_llm-test.md
docs/fr/docs/advanced/additional-responses.md
docs/fr/docs/advanced/additional-status-codes.md
docs/fr/docs/advanced/advanced-dependencies.md
docs/fr/docs/advanced/async-tests.md
docs/fr/docs/advanced/behind-a-proxy.md
docs/fr/docs/advanced/custom-response.md
docs/fr/docs/advanced/dataclasses.md
docs/fr/docs/advanced/events.md
docs/fr/docs/advanced/generate-clients.md
docs/fr/docs/advanced/index.md
docs/fr/docs/advanced/middleware.md
docs/fr/docs/advanced/openapi-callbacks.md
docs/fr/docs/advanced/openapi-webhooks.md
docs/fr/docs/advanced/path-operation-advanced-configuration.md
docs/fr/docs/advanced/response-change-status-code.md
docs/fr/docs/advanced/response-cookies.md
docs/fr/docs/advanced/response-directly.md
docs/fr/docs/advanced/response-headers.md
docs/fr/docs/advanced/security/http-basic-auth.md
docs/fr/docs/advanced/security/index.md
docs/fr/docs/advanced/security/oauth2-scopes.md
docs/fr/docs/advanced/settings.md
docs/fr/docs/advanced/sub-applications.md
docs/fr/docs/advanced/templates.md
docs/fr/docs/advanced/testing-websockets.md
docs/fr/docs/advanced/using-request-directly.md
docs/fr/docs/advanced/websockets.md
docs/fr/docs/advanced/wsgi.md
docs/fr/docs/alternatives.md
docs/fr/docs/async.md
docs/fr/docs/benchmarks.md
docs/fr/docs/deployment/cloud.md
docs/fr/docs/deployment/concepts.md
docs/fr/docs/deployment/docker.md
docs/fr/docs/deployment/fastapicloud.md
docs/fr/docs/deployment/https.md
docs/fr/docs/deployment/index.md
docs/fr/docs/deployment/manually.md
docs/fr/docs/deployment/server-workers.md
docs/fr/docs/deployment/versions.md
docs/fr/docs/environment-variables.md
docs/fr/docs/fastapi-cli.md
docs/fr/docs/features.md
docs/fr/docs/help-fastapi.md
docs/fr/docs/history-design-future.md
docs/fr/docs/how-to/authentication-error-status-code.md
docs/fr/docs/how-to/conditional-openapi.md
docs/fr/docs/how-to/configure-swagger-ui.md
docs/fr/docs/how-to/custom-docs-ui-assets.md
docs/fr/docs/how-to/custom-request-and-route.md
docs/fr/docs/how-to/extending-openapi.md
docs/fr/docs/how-to/general.md
docs/fr/docs/how-to/graphql.md
docs/fr/docs/how-to/index.md
docs/fr/docs/how-to/migrate-from-pydantic-v1-to-pydantic-v2.md
docs/fr/docs/how-to/testing-database.md
docs/fr/docs/index.md
docs/fr/docs/project-generation.md
docs/fr/docs/python-types.md
docs/fr/docs/tutorial/background-tasks.md
docs/fr/docs/tutorial/bigger-applications.md
docs/fr/docs/tutorial/body-nested-models.md
docs/fr/docs/tutorial/body-updates.md
docs/fr/docs/tutorial/body.md
docs/fr/docs/tutorial/cors.md
docs/fr/docs/tutorial/debugging.md
docs/fr/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
docs/fr/docs/tutorial/dependencies/dependencies-with-yield.md
docs/fr/docs/tutorial/dependencies/global-dependencies.md
docs/fr/docs/tutorial/dependencies/index.md
docs/fr/docs/tutorial/encoder.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/middleware.md
docs/fr/docs/tutorial/path-operation-configuration.md
docs/fr/docs/tutorial/path-params-numeric-validations.md
docs/fr/docs/tutorial/path-params.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-form-models.md
docs/fr/docs/tutorial/request-forms-and-files.md
docs/fr/docs/tutorial/request-forms.md
docs/fr/docs/tutorial/response-model.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/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 4fdc6773850c67a48e20d3a2138b1481c87c518a..74f9c9903c0157ce5b7ea46f5d055acd6dada5aa 100644 (file)
@@ -11,7 +11,7 @@ Utiliser comme suit :
 * VĂ©rifier si tout est correct dans la traduction.
 * Si nĂ©cessaire, amĂ©liorer votre invite spĂ©cifique Ă  la langue, l’invite gĂ©nĂ©rale, ou le document anglais.
 * Corriger ensuite manuellement les problĂšmes restants dans la traduction, afin que ce soit une bonne traduction.
-* Retraduire, en ayant la bonne traduction en place. Le rĂ©sultat idĂ©al serait que le LLM ne fasse plus aucun changement Ă  la traduction. Cela signifie que l’invite gĂ©nĂ©rale et votre invite spĂ©cifique Ă  la langue sont aussi bonnes que possible (il fera parfois quelques changements apparemment alĂ©atoires, la raison Ă©tant que <a href="https://doublespeak.chat/#/handbook#deterministic-output" class="external-link" target="_blank">les LLM ne sont pas des algorithmes dĂ©terministes</a>).
+* Retraduire, en ayant la bonne traduction en place. Le rĂ©sultat idĂ©al serait que le LLM ne fasse plus aucun changement Ă  la traduction. Cela signifie que l’invite gĂ©nĂ©rale et votre invite spĂ©cifique Ă  la langue sont aussi bonnes que possible (il fera parfois quelques changements apparemment alĂ©atoires, la raison Ă©tant que [les LLM ne sont pas des algorithmes dĂ©terministes](https://doublespeak.chat/#/handbook#deterministic-output)).
 
 Les tests :
 
@@ -169,15 +169,15 @@ Voir les sections `### Special blocks` et `### Tab blocks` dans l’invite gĂ©n
 Le texte du lien doit ĂȘtre traduit, l’adresse du lien doit rester inchangĂ©e :
 
 * [Lien vers le titre ci-dessus](#code-snippets)
-* [Lien interne](index.md#installation){.internal-link target=_blank}
-* <a href="https://sqlmodel.tiangolo.com/" class="external-link" target="_blank">Lien externe</a>
-* <a href="https://fastapi.tiangolo.com/css/styles.css" class="external-link" target="_blank">Lien vers une feuille de style</a>
-* <a href="https://fastapi.tiangolo.com/js/logic.js" class="external-link" target="_blank">Lien vers un script</a>
-* <a href="https://fastapi.tiangolo.com/img/foo.jpg" class="external-link" target="_blank">Lien vers une image</a>
+* [Lien interne](index.md#installation)
+* [Lien externe](https://sqlmodel.tiangolo.com/)
+* [Lien vers une feuille de style](https://fastapi.tiangolo.com/css/styles.css)
+* [Lien vers un script](https://fastapi.tiangolo.com/js/logic.js)
+* [Lien vers une image](https://fastapi.tiangolo.com/img/foo.jpg)
 
 Le texte du lien doit ĂȘtre traduit, l’adresse du lien doit pointer vers la traduction :
 
-* <a href="https://fastapi.tiangolo.com/fr/" class="external-link" target="_blank">Lien FastAPI</a>
+* [Lien FastAPI](https://fastapi.tiangolo.com/fr/)
 
 ////
 
@@ -232,7 +232,7 @@ Voir la section `### HTML abbr elements` dans l’invite gĂ©nĂ©rale dans `script
 
 Bonjour.
 
-### Annotations de type et indications de type { #type-hints-and-annotations }
+### Annotations de type et annotations de type { #type-hints-and-annotations }
 
 Rebonjour.
 
index a073dec69230e0701fb750645a9a839725d2ef07..e7b684e36c4f816563fa5f1fc73e433aec29023b 100644 (file)
@@ -243,5 +243,5 @@ Par exemple:
 
 Pour voir exactement ce que vous pouvez inclure dans les rĂ©ponses, vous pouvez consulter ces sections dans la spĂ©cification OpenAPI :
 
-* <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#responses-object" class="external-link" target="_blank">Objet Responses de OpenAPI</a>, il inclut le `Response Object`.
-* <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#response-object" class="external-link" target="_blank">Objet Response de OpenAPI</a>, vous pouvez inclure n'importe quoi directement dans chaque rĂ©ponse Ă  l'intĂ©rieur de votre paramĂštre `responses`. Y compris `description`, `headers`, `content` (Ă  l'intĂ©rieur de cela, vous dĂ©clarez diffĂ©rents types de mĂ©dias et schĂ©mas JSON) et `links`.
+* [Objet Responses de OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#responses-object), il inclut le `Response Object`.
+* [Objet Response de OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#response-object), vous pouvez inclure n'importe quoi directement dans chaque rĂ©ponse Ă  l'intĂ©rieur de votre paramĂštre `responses`. Y compris `description`, `headers`, `content` (Ă  l'intĂ©rieur de cela, vous dĂ©clarez diffĂ©rents types de mĂ©dias et schĂ©mas JSON) et `links`.
index b9c8ab113692b795f87b13941807838a9fd49b78..59e8c3eae9ce9bc4e3fd2655faa0d5bcb6529411 100644 (file)
@@ -20,9 +20,9 @@ Pour y parvenir, importez `JSONResponse` et renvoyez-y directement votre contenu
 
 Lorsque vous renvoyez une `Response` directement, comme dans l'exemple ci-dessus, elle sera renvoyĂ©e directement.
 
-Elle ne sera pas sĂ©rialisĂ©e avec un modĂšle.
+Elle ne sera pas sĂ©rialisĂ©e avec un modĂšle, etc.
 
-Assurez-vous qu'il contient les donnĂ©es souhaitĂ©es et que les valeurs sont dans un format JSON valide (si vous utilisez une `JSONResponse`).
+Vous devez vous assurer qu'elle contient les donnĂ©es souhaitĂ©es et que les valeurs sont dans un format JSON valide (si vous utilisez une `JSONResponse`).
 
 ///
 
@@ -30,7 +30,7 @@ Assurez-vous qu'il contient les donnĂ©es souhaitĂ©es et que les valeurs sont dan
 
 Vous pouvez Ă©galement utiliser `from starlette.responses import JSONResponse`.
 
-Pour plus de commoditĂ©s, **FastAPI** fournit les objets `starlette.responses` sous forme d'un alias accessible par `fastapi.responses`. Mais la plupart des rĂ©ponses disponibles proviennent directement de Starlette. Il en est de mĂȘme avec `status`.
+Par commoditĂ© pour vous, le dĂ©veloppeur, **FastAPI** fournit les mĂȘmes `starlette.responses` sous la forme de `fastapi.responses`. Mais la plupart des rĂ©ponses disponibles proviennent directement de Starlette. Il en est de mĂȘme avec `status`.
 
 ///
 
@@ -38,4 +38,4 @@ Pour plus de commoditĂ©s, **FastAPI** fournit les objets `starlette.responses` s
 
 Si vous renvoyez directement des codes HTTP et des rĂ©ponses supplĂ©mentaires, ils ne seront pas inclus dans le schĂ©ma OpenAPI (les documents de l'API), car FastAPI n'a aucun moyen de savoir Ă  l'avance ce que vous allez renvoyer.
 
-Mais vous pouvez documenter cela dans votre code, en utilisant : [RĂ©ponses supplĂ©mentaires](additional-responses.md){.internal-link target=_blank}.
+Mais vous pouvez documenter cela dans votre code, en utilisant : [RĂ©ponses supplĂ©mentaires](additional-responses.md).
index 8afd58b48e9b1562c73e97557924ea5734c22522..d5066ca25ab1d4baa306a6e118cf0b9837b69e5b 100644 (file)
@@ -132,7 +132,7 @@ Si vous avez ce cas d’utilisation spĂ©cifique avec SQLModel (ou SQLAlchemy), v
 
 De cette maniĂšre, la session libĂ©rera la connexion Ă  la base de donnĂ©es, afin que d’autres requĂȘtes puissent l’utiliser.
 
-Si vous avez un autre cas d’utilisation qui nĂ©cessite une sortie anticipĂ©e depuis une dĂ©pendance avec `yield`, veuillez crĂ©er une <a href="https://github.com/fastapi/fastapi/discussions/new?category=questions" class="external-link" target="_blank">Question de discussion GitHub</a> avec votre cas spĂ©cifique et pourquoi vous bĂ©nĂ©ficieriez d’une fermeture anticipĂ©e pour les dĂ©pendances avec `yield`.
+Si vous avez un autre cas d’utilisation qui nĂ©cessite une sortie anticipĂ©e depuis une dĂ©pendance avec `yield`, veuillez crĂ©er une [Question de discussion GitHub](https://github.com/fastapi/fastapi/discussions/new?category=questions) avec votre cas spĂ©cifique et pourquoi vous bĂ©nĂ©ficieriez d’une fermeture anticipĂ©e pour les dĂ©pendances avec `yield`.
 
 S’il existe des cas d’utilisation convaincants pour une fermeture anticipĂ©e dans les dĂ©pendances avec `yield`, j’envisagerai d’ajouter une nouvelle façon d’y opter.
 
@@ -144,7 +144,7 @@ Cela a Ă©tĂ© modifiĂ© dans la version 0.110.0 pour corriger une consommation de
 
 ### TĂąches d'arriĂšre‑plan et dĂ©pendances avec `yield`, DĂ©tails techniques { #background-tasks-and-dependencies-with-yield-technical-details }
 
-Avant FastAPI 0.106.0, lever des exceptions aprĂšs `yield` n’était pas possible, le code d’arrĂȘt dans les dĂ©pendances avec `yield` s’exĂ©cutait aprĂšs l’envoi de la rĂ©ponse, donc les [Gestionnaires d'exceptions](../tutorial/handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank} avaient dĂ©jĂ  Ă©tĂ© exĂ©cutĂ©s.
+Avant FastAPI 0.106.0, lever des exceptions aprĂšs `yield` n’était pas possible, le code d’arrĂȘt dans les dĂ©pendances avec `yield` s’exĂ©cutait aprĂšs l’envoi de la rĂ©ponse, donc les [Gestionnaires d'exceptions](../tutorial/handling-errors.md#install-custom-exception-handlers) avaient dĂ©jĂ  Ă©tĂ© exĂ©cutĂ©s.
 
 Cela avait Ă©tĂ© conçu ainsi principalement pour permettre d’utiliser les mĂȘmes objets Â« gĂ©nĂ©rĂ©s par yield Â» par les dĂ©pendances Ă  l’intĂ©rieur de tĂąches d’arriĂšre‑plan, car le code d’arrĂȘt s’exĂ©cutait aprĂšs la fin des tĂąches d’arriĂšre‑plan.
 
index f9cea0ad17a9898e767839c8e396d65acfa8c923..a59d651bad313fc910c4a5a4f9cda911e71e5b0d 100644 (file)
@@ -16,11 +16,11 @@ MĂȘme si votre application **FastAPI** utilise des fonctions `def` normales au l
 
 Le `TestClient` fait un peu de magie pour appeler l'application FastAPI asynchrone depuis vos fonctions de test `def` normales, en utilisant pytest standard. Mais cette magie ne fonctionne plus lorsque nous l'utilisons dans des fonctions asynchrones. En exĂ©cutant nos tests de maniĂšre asynchrone, nous ne pouvons plus utiliser le `TestClient` dans nos fonctions de test.
 
-Le `TestClient` est basĂ© sur <a href="https://www.python-httpx.org" class="external-link" target="_blank">HTTPX</a> et, heureusement, nous pouvons l'utiliser directement pour tester l'API.
+Le `TestClient` est basĂ© sur [HTTPX](https://www.python-httpx.org) et, heureusement, nous pouvons l'utiliser directement pour tester l'API.
 
 ## Exemple { #example }
 
-Pour un exemple simple, considĂ©rons une structure de fichiers similaire Ă  celle dĂ©crite dans [Applications plus grandes](../tutorial/bigger-applications.md){.internal-link target=_blank} et [Tests](../tutorial/testing.md){.internal-link target=_blank} :
+Pour un exemple simple, considĂ©rons une structure de fichiers similaire Ă  celle dĂ©crite dans [Applications plus grandes](../tutorial/bigger-applications.md) et [Tests](../tutorial/testing.md) :
 
 ```
 .
@@ -84,7 +84,7 @@ Notez que nous utilisons async/await avec le nouveau `AsyncClient` â€” la requĂȘ
 
 /// warning | Alertes
 
-Si votre application s'appuie sur des Ă©vĂ©nements de cycle de vie (lifespan), le `AsyncClient` ne dĂ©clenchera pas ces Ă©vĂ©nements. Pour vous assurer qu'ils sont dĂ©clenchĂ©s, utilisez `LifespanManager` depuis <a href="https://github.com/florimondmanca/asgi-lifespan#usage" class="external-link" target="_blank">florimondmanca/asgi-lifespan</a>.
+Si votre application s'appuie sur des Ă©vĂ©nements de cycle de vie, l'`AsyncClient` ne dĂ©clenchera pas ces Ă©vĂ©nements. Pour vous assurer qu'ils sont dĂ©clenchĂ©s, utilisez `LifespanManager` depuis [florimondmanca/asgi-lifespan](https://github.com/florimondmanca/asgi-lifespan#usage).
 
 ///
 
@@ -94,6 +94,6 @@ Comme la fonction de test est dĂ©sormais asynchrone, vous pouvez Ă©galement appe
 
 /// tip | Astuce
 
-Si vous rencontrez une erreur `RuntimeError: Task attached to a different loop` lors de l'intĂ©gration d'appels de fonctions asynchrones dans vos tests (par exemple en utilisant <a href="https://stackoverflow.com/questions/41584243/runtimeerror-task-attached-to-a-different-loop" class="external-link" target="_blank">MotorClient de MongoDB</a>), n'oubliez pas d'instancier les objets qui ont besoin d'une boucle d'Ă©vĂ©nements uniquement dans des fonctions async, par exemple dans un callback `@app.on_event("startup")`.
+Si vous rencontrez une erreur `RuntimeError: Task attached to a different loop` lors de l'intĂ©gration d'appels de fonctions asynchrones dans vos tests (par exemple en utilisant [MotorClient de MongoDB](https://stackoverflow.com/questions/41584243/runtimeerror-task-attached-to-a-different-loop)), n'oubliez pas d'instancier les objets qui ont besoin d'une boucle d'Ă©vĂ©nements uniquement dans des fonctions async, par exemple dans un callback `@app.on_event("startup")`.
 
 ///
index 4b540e1a1dd42b9652352e704cb935d6f3ecd7a2..c53ba40104cc02d417ea716096432d064f8a85cf 100644 (file)
@@ -16,9 +16,9 @@ Mais, par sĂ©curitĂ©, comme le serveur ne sait pas qu'il se trouve derriĂšre un
 
 Les en-tĂȘtes du proxy sont :
 
-* <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For" class="external-link" target="_blank">X-Forwarded-For</a>
-* <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto" class="external-link" target="_blank">X-Forwarded-Proto</a>
-* <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host" class="external-link" target="_blank">X-Forwarded-Host</a>
+* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For)
+* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto)
+* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host)
 
 ///
 
@@ -60,7 +60,7 @@ https://mysuperapp.com/items/
 
 /// tip | Astuce
 
-Si vous voulez en savoir plus sur HTTPS, consultez le guide [À propos de HTTPS](../deployment/https.md){.internal-link target=_blank}.
+Si vous voulez en savoir plus sur HTTPS, consultez le guide [À propos de HTTPS](../deployment/https.md).
 
 ///
 
@@ -228,7 +228,7 @@ Passer le `root_path` Ă  `FastAPI` Ă©quivaut Ă  passer l'option de ligne de comm
 
 Gardez Ă  l'esprit que le serveur (Uvicorn) n'utilisera ce `root_path` que pour le transmettre Ă  l'application.
 
-Mais si vous allez avec votre navigateur sur <a href="http://127.0.0.1:8000/app" class="external-link" target="_blank">http://127.0.0.1:8000/app</a>, vous verrez la rĂ©ponse normale :
+Mais si vous allez avec votre navigateur sur [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app), vous verrez la rĂ©ponse normale :
 
 ```JSON
 {
@@ -251,9 +251,9 @@ Dans un cas comme celui‑ci (sans prĂ©fixe de chemin supprimĂ©), le proxy Ă©cou
 
 ## Tester localement avec Traefik { #testing-locally-with-traefik }
 
-Vous pouvez facilement faire l'expĂ©rience en local avec un prĂ©fixe de chemin supprimĂ© en utilisant <a href="https://docs.traefik.io/" class="external-link" target="_blank">Traefik</a>.
+Vous pouvez facilement faire l'expĂ©rience en local avec un prĂ©fixe de chemin supprimĂ© en utilisant [Traefik](https://docs.traefik.io/).
 
-<a href="https://github.com/containous/traefik/releases" class="external-link" target="_blank">TĂ©lĂ©chargez Traefik</a> ; c'est un binaire unique, vous pouvez extraire le fichier compressĂ© et l'exĂ©cuter directement depuis le terminal.
+[TĂ©lĂ©chargez Traefik](https://github.com/containous/traefik/releases) ; c'est un binaire unique, vous pouvez extraire le fichier compressĂ© et l'exĂ©cuter directement depuis le terminal.
 
 CrĂ©ez ensuite un fichier `traefik.toml` avec :
 
@@ -330,7 +330,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
 
 ### VĂ©rifier les rĂ©ponses { #check-the-responses }
 
-Maintenant, si vous allez Ă  l'URL avec le port pour Uvicorn : <a href="http://127.0.0.1:8000/app" class="external-link" target="_blank">http://127.0.0.1:8000/app</a>, vous verrez la rĂ©ponse normale :
+Maintenant, si vous allez Ă  l'URL avec le port pour Uvicorn : [http://127.0.0.1:8000/app](http://127.0.0.1:8000/app), vous verrez la rĂ©ponse normale :
 
 ```JSON
 {
@@ -345,7 +345,7 @@ Remarquez que mĂȘme si vous y accĂ©dez via `http://127.0.0.1:8000/app`, il affic
 
 ///
 
-Et maintenant ouvrez l'URL avec le port pour Traefik, en incluant le prĂ©fixe de chemin : <a href="http://127.0.0.1:9999/api/v1/app" class="external-link" target="_blank">http://127.0.0.1:9999/api/v1/app</a>.
+Et maintenant ouvrez l'URL avec le port pour Traefik, en incluant le prĂ©fixe de chemin : [http://127.0.0.1:9999/api/v1/app](http://127.0.0.1:9999/api/v1/app).
 
 Nous obtenons la mĂȘme rĂ©ponse :
 
@@ -370,13 +370,13 @@ Mais voici la partie intĂ©ressante. âœš
 
 La maniĂšre Â« officielle Â» d'accĂ©der Ă  l'application serait via le proxy avec le prĂ©fixe de chemin que nous avons dĂ©fini. Donc, comme on s'y attend, si vous essayez l'interface de documentation servie directement par Uvicorn, sans le prĂ©fixe de chemin dans l'URL, cela ne fonctionne pas, car elle s'attend Ă  ĂȘtre accĂ©dĂ©e via le proxy.
 
-Vous pouvez le vĂ©rifier sur <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> :
+Vous pouvez le vĂ©rifier sur [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) :
 
 <img src="/img/tutorial/behind-a-proxy/image01.png">
 
 Mais si nous accĂ©dons Ă  l'interface de documents Ă  l'URL Â« officielle Â» en utilisant le proxy avec le port `9999`, Ă  `/api/v1/docs`, cela fonctionne correctement ! đŸŽ‰
 
-Vous pouvez le vĂ©rifier sur <a href="http://127.0.0.1:9999/api/v1/docs" class="external-link" target="_blank">http://127.0.0.1:9999/api/v1/docs</a> :
+Vous pouvez le vĂ©rifier sur [http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs) :
 
 <img src="/img/tutorial/behind-a-proxy/image02.png">
 
@@ -429,11 +429,11 @@ GĂ©nĂ©rera un schĂ©ma OpenAPI comme :
 
 /// tip | Astuce
 
-Remarquez le serveur gĂ©nĂ©rĂ© automatiquement avec une valeur `url` de `/api/v1`, reprise depuis le `root_path`.
+Remarquez le serveur gĂ©nĂ©rĂ© automatiquement avec une valeur `url` de `/api/v1`, repris depuis le `root_path`.
 
 ///
 
-Dans l'interface de documents sur <a href="http://127.0.0.1:9999/api/v1/docs" class="external-link" target="_blank">http://127.0.0.1:9999/api/v1/docs</a>, cela ressemblera Ă  ceci :
+Dans l'interface de documents sur [http://127.0.0.1:9999/api/v1/docs](http://127.0.0.1:9999/api/v1/docs), cela ressemblera Ă  ceci :
 
 <img src="/img/tutorial/behind-a-proxy/image03.png">
 
@@ -461,6 +461,6 @@ et il ne l'inclura alors pas dans le schĂ©ma OpenAPI.
 
 ## Monter une sous-application { #mounting-a-sub-application }
 
-Si vous avez besoin de monter une sous‑application (comme dĂ©crit dans [Sous‑applications - montages](sub-applications.md){.internal-link target=_blank}) tout en utilisant un proxy avec `root_path`, vous pouvez le faire normalement, comme vous vous y attendez.
+Si vous avez besoin de monter une sous‑application (comme dĂ©crit dans [Sous‑applications - montages](sub-applications.md)) tout en utilisant un proxy avec `root_path`, vous pouvez le faire normalement, comme vous vous y attendez.
 
 FastAPI utilisera intelligemment le `root_path` en interne, donc cela fonctionnera simplement. âœš
index 7eab5b53fcebec8cb775c2de2f7409ff06df178f..a1a60ebf64777f57b5dcf04056261682ab3b2d26 100644 (file)
@@ -1,59 +1,43 @@
 # RĂ©ponse personnalisĂ©e - HTML, flux, fichier, autres { #custom-response-html-stream-file-others }
 
-Par dĂ©faut, **FastAPI** renverra les rĂ©ponses en utilisant `JSONResponse`.
+Par dĂ©faut, **FastAPI** renvoie des rĂ©ponses JSON.
 
-Vous pouvez le remplacer en renvoyant directement une `Response` comme expliquĂ© dans [Renvoyer directement une Response](response-directly.md){.internal-link target=_blank}.
+Vous pouvez le remplacer en renvoyant une `Response` directement comme vu dans [Renvoyer une Response directement](response-directly.md).
 
-Mais si vous renvoyez directement une `Response` (ou n'importe quelle sous-classe, comme `JSONResponse`), les donnĂ©es ne seront pas automatiquement converties (mĂȘme si vous dĂ©clarez un `response_model`), et la documentation ne sera pas gĂ©nĂ©rĂ©e automatiquement (par exemple, l'inclusion du Â« media type Â» dans l'en-tĂȘte HTTP `Content-Type` comme partie de l'OpenAPI gĂ©nĂ©rĂ©).
+Mais si vous renvoyez directement une `Response` (ou n'importe quelle sous-classe, comme `JSONResponse`), les donnĂ©es ne seront pas automatiquement converties (mĂȘme si vous dĂ©clarez un `response_model`), et la documentation ne sera pas gĂ©nĂ©rĂ©e automatiquement (par exemple, l'inclusion du Â« media type Â», dans l'en-tĂȘte HTTP `Content-Type` comme partie de l'OpenAPI gĂ©nĂ©rĂ©).
 
-Vous pouvez aussi dĂ©clarer la `Response` que vous voulez utiliser (par ex. toute sous-classe de `Response`), dans le dĂ©corateur de chemin d'accĂšs en utilisant le paramĂštre `response_class`.
+Vous pouvez aussi dĂ©clarer la `Response` que vous voulez utiliser (par ex. toute sous-classe de `Response`), dans le dĂ©corateur de *chemin d'accĂšs* en utilisant le paramĂštre `response_class`.
 
-Le contenu que vous renvoyez depuis votre fonction de chemin d'accĂšs sera placĂ© Ă  l'intĂ©rieur de cette `Response`.
-
-Et si cette `Response` a un Â« media type Â» JSON (`application/json`), comme c'est le cas avec `JSONResponse` et `UJSONResponse`, les donnĂ©es que vous renvoyez seront automatiquement converties (et filtrĂ©es) avec tout `response_model` Pydantic que vous avez dĂ©clarĂ© dans le dĂ©corateur de chemin d'accĂšs.
+Le contenu que vous renvoyez depuis votre *fonction de chemin d'accĂšs* sera placĂ© Ă  l'intĂ©rieur de cette `Response`.
 
 /// note | Remarque
 
-Si vous utilisez une classe de rĂ©ponse sans Â« media type Â», FastAPI s'attendra Ă  ce que votre rĂ©ponse n'ait pas de contenu ; il ne documentera donc pas le format de la rĂ©ponse dans les documents OpenAPI gĂ©nĂ©rĂ©s.
+Si vous utilisez une classe de rĂ©ponse sans media type, FastAPI s'attendra Ă  ce que votre rĂ©ponse n'ait pas de contenu ; il ne documentera donc pas le format de la rĂ©ponse dans la documentation OpenAPI gĂ©nĂ©rĂ©e.
 
 ///
 
-## Utiliser `ORJSONResponse` { #use-orjsonresponse }
-
-Par exemple, si vous cherchez Ă  maximiser la performance, vous pouvez installer et utiliser <a href="https://github.com/ijl/orjson" class="external-link" target="_blank">`orjson`</a> et dĂ©finir la rĂ©ponse sur `ORJSONResponse`.
-
-Importez la classe (sous-classe) `Response` que vous voulez utiliser et dĂ©clarez-la dans le dĂ©corateur de chemin d'accĂšs.
-
-Pour de grandes rĂ©ponses, renvoyer directement une `Response` est bien plus rapide que de renvoyer un dictionnaire.
-
-Cela vient du fait que, par dĂ©faut, FastAPI inspectera chaque Ă©lĂ©ment et s'assurera qu'il est sĂ©rialisable en JSON, en utilisant le mĂȘme [Encodeur compatible JSON](../tutorial/encoder.md){.internal-link target=_blank} expliquĂ© dans le didacticiel. C'est ce qui vous permet de renvoyer des objets arbitraires, par exemple des modĂšles de base de donnĂ©es.
-
-Mais si vous ĂȘtes certain que le contenu que vous renvoyez est sĂ©rialisable en JSON, vous pouvez le passer directement Ă  la classe de rĂ©ponse et Ă©viter le surcoĂ»t supplĂ©mentaire qu'aurait FastAPI en faisant passer votre contenu de retour par le `jsonable_encoder` avant de le transmettre Ă  la classe de rĂ©ponse.
+## RĂ©ponses JSON { #json-responses }
 
-{* ../../docs_src/custom_response/tutorial001b_py310.py hl[2,7] *}
+Par dĂ©faut, FastAPI renvoie des rĂ©ponses JSON.
 
-/// info
-
-Le paramĂštre `response_class` sera aussi utilisĂ© pour dĂ©finir le Â« media type Â» de la rĂ©ponse.
+Si vous dĂ©clarez un [ModĂšle de rĂ©ponse](../tutorial/response-model.md), FastAPI l'utilisera pour sĂ©rialiser les donnĂ©es en JSON, en utilisant Pydantic.
 
-Dans ce cas, l'en-tĂȘte HTTP `Content-Type` sera dĂ©fini Ă  `application/json`.
+Si vous ne dĂ©clarez pas de modĂšle de rĂ©ponse, FastAPI utilisera le `jsonable_encoder` expliquĂ© dans [Encodeur compatible JSON](../tutorial/encoder.md) et le placera dans une `JSONResponse`.
 
-Et il sera documentĂ© comme tel dans OpenAPI.
+Si vous dĂ©clarez une `response_class` avec un media type JSON (`application/json`), comme c'est le cas avec `JSONResponse`, les donnĂ©es que vous renvoyez seront automatiquement converties (et filtrĂ©es) avec tout `response_model` Pydantic que vous avez dĂ©clarĂ© dans le dĂ©corateur de *chemin d'accĂšs*. Mais les donnĂ©es ne seront pas sĂ©rialisĂ©es en octets JSON avec Pydantic, elles seront converties avec le `jsonable_encoder` puis passĂ©es Ă  la classe `JSONResponse`, qui les sĂ©rialisera en octets en utilisant la bibliothĂšque JSON standard de Python.
 
-///
+### Performance JSON { #json-performance }
 
-/// tip | Astuce
+En bref, si vous voulez la performance maximale, utilisez un [ModĂšle de rĂ©ponse](../tutorial/response-model.md) et ne dĂ©clarez pas de `response_class` dans le dĂ©corateur de *chemin d'accĂšs*.
 
-`ORJSONResponse` est disponible uniquement dans FastAPI, pas dans Starlette.
-
-///
+{* ../../docs_src/response_model/tutorial001_01_py310.py ln[15:17] hl[16] *}
 
 ## RĂ©ponse HTML { #html-response }
 
 Pour renvoyer une rĂ©ponse avec du HTML directement depuis **FastAPI**, utilisez `HTMLResponse`.
 
 - Importez `HTMLResponse`.
-- Passez `HTMLResponse` comme paramĂštre `response_class` de votre dĂ©corateur de chemin d'accĂšs.
+- Passez `HTMLResponse` comme paramĂštre `response_class` de votre *dĂ©corateur de chemin d'accĂšs*.
 
 {* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *}
 
@@ -69,7 +53,7 @@ Et il sera documentĂ© comme tel dans OpenAPI.
 
 ### Renvoyer une `Response` { #return-a-response }
 
-Comme vu dans [Renvoyer directement une Response](response-directly.md){.internal-link target=_blank}, vous pouvez aussi remplacer la rĂ©ponse directement dans votre chemin d'accĂšs, en la renvoyant.
+Comme vu dans [Renvoyer une Response directement](response-directly.md), vous pouvez aussi remplacer la rĂ©ponse directement dans votre *chemin d'accĂšs*, en la renvoyant.
 
 Le mĂȘme exemple ci-dessus, renvoyant une `HTMLResponse`, pourrait ressembler Ă  :
 
@@ -77,7 +61,7 @@ Le mĂȘme exemple ci-dessus, renvoyant une `HTMLResponse`, pourrait ressembler Ă 
 
 /// warning | Alertes
 
-Une `Response` renvoyĂ©e directement par votre fonction de chemin d'accĂšs ne sera pas documentĂ©e dans OpenAPI (par exemple, le `Content-Type` ne sera pas documentĂ©) et ne sera pas visible dans les documents interactifs automatiques.
+Une `Response` renvoyĂ©e directement par votre *fonction de chemin d'accĂšs* ne sera pas documentĂ©e dans OpenAPI (par exemple, le `Content-Type` ne sera pas documentĂ©) et ne sera pas visible dans les documents interactifs automatiques.
 
 ///
 
@@ -91,7 +75,7 @@ Bien sĂ»r, l'en-tĂȘte `Content-Type` rĂ©el, le code d'Ă©tat, etc., proviendront
 
 Si vous voulez remplacer la rĂ©ponse depuis l'intĂ©rieur de la fonction mais en mĂȘme temps documenter le Â« media type Â» dans OpenAPI, vous pouvez utiliser le paramĂštre `response_class` ET renvoyer un objet `Response`.
 
-`response_class` sera alors utilisĂ© uniquement pour documenter l'opĂ©ration de chemin d'accĂšs OpenAPI, mais votre `Response` sera utilisĂ©e telle quelle.
+`response_class` sera alors utilisĂ© uniquement pour documenter l’*opĂ©ration de chemin d'accĂšs* OpenAPI, mais votre `Response` sera utilisĂ©e telle quelle.
 
 #### Renvoyer directement une `HTMLResponse` { #return-an-htmlresponse-directly }
 
@@ -140,7 +124,7 @@ FastAPI (en fait Starlette) inclura automatiquement un en-tĂȘte Content-Length.
 
 ### `HTMLResponse` { #htmlresponse }
 
-Prend du texte ou des octets et renvoie une rĂ©ponse HTML, comme vous l'avez lu ci-dessus.
+Prend du texte ou des octets et renvoie une rĂ©ponse HTML, comme vous l'avez vu ci-dessus.
 
 ### `PlainTextResponse` { #plaintextresponse }
 
@@ -154,37 +138,11 @@ Prend des donnĂ©es et renvoie une rĂ©ponse encodĂ©e en `application/json`.
 
 C'est la rĂ©ponse par dĂ©faut utilisĂ©e dans **FastAPI**, comme vous l'avez lu ci-dessus.
 
-### `ORJSONResponse` { #orjsonresponse }
-
-Une rĂ©ponse JSON alternative rapide utilisant <a href="https://github.com/ijl/orjson" class="external-link" target="_blank">`orjson`</a>, comme vous l'avez lu ci-dessus.
-
-/// info
-
-Cela nĂ©cessite l'installation de `orjson`, par exemple avec `pip install orjson`.
-
-///
-
-### `UJSONResponse` { #ujsonresponse }
-
-Une rĂ©ponse JSON alternative utilisant <a href="https://github.com/ultrajson/ultrajson" class="external-link" target="_blank">`ujson`</a>.
-
-/// info
-
-Cela nĂ©cessite l'installation de `ujson`, par exemple avec `pip install ujson`.
-
-///
-
-/// warning | Alertes
-
-`ujson` est moins rigoureux que l'implĂ©mentation intĂ©grĂ©e de Python dans sa gestion de certains cas limites.
-
-///
-
-{* ../../docs_src/custom_response/tutorial001_py310.py hl[2,7] *}
+/// note | DĂ©tails techniques
 
-/// tip | Astuce
+Mais si vous dĂ©clarez un modĂšle de rĂ©ponse ou un type de retour, il sera utilisĂ© directement pour sĂ©rialiser les donnĂ©es en JSON, et une rĂ©ponse avec le bon media type pour JSON sera renvoyĂ©e directement, sans utiliser la classe `JSONResponse`.
 
-Il est possible que `ORJSONResponse` soit une alternative plus rapide.
+C'est la maniĂšre idĂ©ale d'obtenir la meilleure performance.
 
 ///
 
@@ -202,7 +160,7 @@ Ou vous pouvez l'utiliser dans le paramĂštre `response_class` :
 
 {* ../../docs_src/custom_response/tutorial006b_py310.py hl[2,7,9] *}
 
-Si vous faites cela, vous pouvez alors renvoyer directement l'URL depuis votre fonction de chemin d'accĂšs.
+Si vous faites cela, vous pouvez alors renvoyer directement l'URL depuis votre *fonction de chemin d'accĂšs*.
 
 Dans ce cas, le `status_code` utilisĂ© sera celui par dĂ©faut pour `RedirectResponse`, c'est-Ă -dire `307`.
 
@@ -214,31 +172,25 @@ Vous pouvez aussi utiliser le paramĂštre `status_code` combinĂ© avec le paramĂšt
 
 ### `StreamingResponse` { #streamingresponse }
 
-Prend un gĂ©nĂ©rateur async ou un gĂ©nĂ©rateur/itĂ©rateur normal et diffuse le corps de la rĂ©ponse.
-
-{* ../../docs_src/custom_response/tutorial007_py310.py hl[2,14] *}
-
-#### Utiliser `StreamingResponse` avec des objets de type fichier { #using-streamingresponse-with-file-like-objects }
+Prend un gĂ©nĂ©rateur async ou un gĂ©nĂ©rateur/itĂ©rateur normal (une fonction avec `yield`) et diffuse le corps de la rĂ©ponse.
 
-Si vous avez un objet <a href="https://docs.python.org/3/glossary.html#term-file-like-object" class="external-link" target="_blank">de type fichier</a> (par ex. l'objet renvoyĂ© par `open()`), vous pouvez crĂ©er une fonction gĂ©nĂ©ratrice pour itĂ©rer sur cet objet de type fichier.
+{* ../../docs_src/custom_response/tutorial007_py310.py hl[3,16] *}
 
-De cette façon, vous n'avez pas Ă  tout lire en mĂ©moire au prĂ©alable, et vous pouvez passer cette fonction gĂ©nĂ©ratrice Ă  `StreamingResponse`, puis la renvoyer.
-
-Cela inclut de nombreuses bibliothĂšques pour interagir avec du stockage cloud, du traitement vidĂ©o, et autres.
+/// note | DĂ©tails techniques
 
-{* ../../docs_src/custom_response/tutorial008_py310.py hl[2,10:12,14] *}
+Une tĂąche `async` ne peut ĂȘtre annulĂ©e que lorsqu'elle atteint un `await`. S'il n'y a pas de `await`, le gĂ©nĂ©rateur (fonction avec `yield`) ne peut pas ĂȘtre annulĂ© correctement et peut continuer Ă  s'exĂ©cuter mĂȘme aprĂšs la demande d'annulation.
 
-1. C'est la fonction gĂ©nĂ©ratrice. C'est une Â« fonction gĂ©nĂ©ratrice Â» parce qu'elle contient des instructions `yield` Ă  l'intĂ©rieur.
-2. En utilisant un bloc `with`, nous nous assurons que l'objet de type fichier est fermĂ© aprĂšs l'exĂ©cution de la fonction gĂ©nĂ©ratrice. Donc, aprĂšs qu'elle a fini d'envoyer la rĂ©ponse.
-3. Ce `yield from` indique Ă  la fonction d'itĂ©rer sur l'objet nommĂ© `file_like`. Puis, pour chaque partie itĂ©rĂ©e, de produire cette partie comme provenant de cette fonction gĂ©nĂ©ratrice (`iterfile`).
+Comme ce petit exemple n'a besoin d'aucune instruction `await`, nous ajoutons un `await anyio.sleep(0)` pour donner une chance Ă  la boucle d'Ă©vĂ©nements de gĂ©rer l'annulation.
 
-    Ainsi, c'est une fonction gĂ©nĂ©ratrice qui transfĂšre le travail de Â« gĂ©nĂ©ration Â» Ă  autre chose en interne.
+Cela serait encore plus important avec des flux volumineux ou infinis.
 
-    En procĂ©dant ainsi, nous pouvons la placer dans un bloc `with` et, de cette façon, garantir que l'objet de type fichier est fermĂ© aprĂšs la fin.
+///
 
 /// tip | Astuce
 
-Remarquez qu'ici, comme nous utilisons le `open()` standard qui ne prend pas en charge `async` et `await`, nous dĂ©clarons le chemin d'accĂšs avec un `def` normal.
+Au lieu de renvoyer une `StreamingResponse` directement, vous devriez probablement suivre le style de [Diffuser des donnĂ©es](./stream-data.md), c'est beaucoup plus pratique et gĂšre l'annulation en arriĂšre-plan pour vous.
+
+Si vous diffusez des JSON Lines, suivez le didacticiel [Diffuser des JSON Lines](../tutorial/stream-json-lines.md).
 
 ///
 
@@ -261,13 +213,13 @@ Vous pouvez aussi utiliser le paramĂštre `response_class` :
 
 {* ../../docs_src/custom_response/tutorial009b_py310.py hl[2,8,10] *}
 
-Dans ce cas, vous pouvez renvoyer directement le chemin du fichier depuis votre fonction de chemin d'accĂšs.
+Dans ce cas, vous pouvez renvoyer directement le chemin du fichier depuis votre *fonction de chemin d'accĂšs*.
 
 ## Classe de rĂ©ponse personnalisĂ©e { #custom-response-class }
 
 Vous pouvez crĂ©er votre propre classe de rĂ©ponse personnalisĂ©e, hĂ©ritant de `Response`, et l'utiliser.
 
-Par exemple, disons que vous voulez utiliser <a href="https://github.com/ijl/orjson" class="external-link" target="_blank">`orjson`</a>, mais avec certains rĂ©glages personnalisĂ©s non utilisĂ©s dans la classe `ORJSONResponse` incluse.
+Par exemple, disons que vous voulez utiliser [`orjson`](https://github.com/ijl/orjson) avec certains rĂ©glages.
 
 Disons que vous voulez renvoyer du JSON indentĂ© et formatĂ©, donc vous voulez utiliser l'option orjson `orjson.OPT_INDENT_2`.
 
@@ -291,22 +243,30 @@ Maintenant, au lieu de renvoyer :
 
 Bien sĂ»r, vous trouverez probablement des moyens bien meilleurs de tirer parti de cela que de formater du JSON. đŸ˜‰
 
+### `orjson` ou ModĂšle de rĂ©ponse { #orjson-or-response-model }
+
+Si ce que vous recherchez est la performance, vous aurez probablement de meilleurs rĂ©sultats en utilisant un [ModĂšle de rĂ©ponse](../tutorial/response-model.md) qu'une rĂ©ponse `orjson`.
+
+Avec un modĂšle de rĂ©ponse, FastAPI utilisera Pydantic pour sĂ©rialiser les donnĂ©es en JSON, sans Ă©tapes intermĂ©diaires, comme la conversion avec `jsonable_encoder`, qui se produirait dans tout autre cas.
+
+Et en interne, Pydantic utilise les mĂȘmes mĂ©canismes Rust sous-jacents que `orjson` pour sĂ©rialiser en JSON, vous obtiendrez donc dĂ©jĂ  la meilleure performance avec un modĂšle de rĂ©ponse.
+
 ## Classe de rĂ©ponse par dĂ©faut { #default-response-class }
 
 Lors de la crĂ©ation d'une instance de classe **FastAPI** ou d'un `APIRouter`, vous pouvez spĂ©cifier quelle classe de rĂ©ponse utiliser par dĂ©faut.
 
 Le paramĂštre qui le dĂ©finit est `default_response_class`.
 
-Dans l'exemple ci-dessous, **FastAPI** utilisera `ORJSONResponse` par dĂ©faut, dans tous les chemins d'accĂšs, au lieu de `JSONResponse`.
+Dans l'exemple ci-dessous, **FastAPI** utilisera `HTMLResponse` par dĂ©faut, dans tous les *chemins d'accĂšs*, au lieu de JSON.
 
 {* ../../docs_src/custom_response/tutorial010_py310.py hl[2,4] *}
 
 /// tip | Astuce
 
-Vous pouvez toujours remplacer `response_class` dans les chemins d'accĂšs comme auparavant.
+Vous pouvez toujours remplacer `response_class` dans les *chemins d'accĂšs* comme auparavant.
 
 ///
 
 ## Documentation supplĂ©mentaire { #additional-documentation }
 
-Vous pouvez aussi dĂ©clarer le media type et de nombreux autres dĂ©tails dans OpenAPI en utilisant `responses` : [RĂ©ponses supplĂ©mentaires dans OpenAPI](additional-responses.md){.internal-link target=_blank}.
+Vous pouvez aussi dĂ©clarer le media type et de nombreux autres dĂ©tails dans OpenAPI en utilisant `responses` : [RĂ©ponses supplĂ©mentaires dans OpenAPI](additional-responses.md).
index 2bd77157e8c79e9a8d57d0d797bd42efdba1b89e..b63a995d9f67e5f7021109c0acf3cc457ae4ed7a 100644 (file)
@@ -2,11 +2,11 @@
 
 FastAPI est construit au‑dessus de **Pydantic**, et je vous ai montrĂ© comment utiliser des modĂšles Pydantic pour dĂ©clarer les requĂȘtes et les rĂ©ponses.
 
-Mais FastAPI prend aussi en charge l'utilisation de <a href="https://docs.python.org/3/library/dataclasses.html" class="external-link" target="_blank">`dataclasses`</a> de la mĂȘme maniĂšre :
+Mais FastAPI prend aussi en charge l'utilisation de [`dataclasses`](https://docs.python.org/3/library/dataclasses.html) de la mĂȘme maniĂšre :
 
 {* ../../docs_src/dataclasses_/tutorial001_py310.py hl[1,6:11,18:19] *}
 
-Cela fonctionne grĂące Ă  **Pydantic**, qui offre une <a href="https://docs.pydantic.dev/latest/concepts/dataclasses/#use-of-stdlib-dataclasses-with-basemodel" class="external-link" target="_blank">prise en charge interne des `dataclasses`</a>.
+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).
 
 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.
 
@@ -18,7 +18,7 @@ Et bien sĂ»r, cela prend en charge la mĂȘme chose :
 
 Cela fonctionne de la mĂȘme maniĂšre qu'avec les modĂšles Pydantic. Et, en rĂ©alitĂ©, c'est mis en Ć“uvre de la mĂȘme façon en interne, en utilisant Pydantic.
 
-/// info | Info
+/// info
 
 Gardez Ă  l'esprit que les dataclasses ne peuvent pas tout ce que peuvent faire les modĂšles Pydantic.
 
@@ -74,7 +74,7 @@ Dans ce cas, vous pouvez simplement remplacer les `dataclasses` standard par `py
 
     Comme toujours, avec FastAPI vous pouvez combiner `def` et `async def` selon vos besoins.
 
-    Si vous avez besoin d'un rappel sur quand utiliser l'un ou l'autre, consultez la section _« In a hurry? Â»_ dans la documentation Ă  propos de [`async` et `await`](../async.md#in-a-hurry){.internal-link target=_blank}.
+    Si vous avez besoin d'un rappel sur quand utiliser l'un ou l'autre, consultez la section _« In a hurry? Â»_ dans la documentation Ă  propos de [`async` et `await`](../async.md#in-a-hurry).
 
 9. Cette *fonction de chemin d'accĂšs* ne renvoie pas des dataclasses (mĂȘme si elle le pourrait), mais une liste de dictionnaires contenant des donnĂ©es internes.
 
@@ -88,7 +88,7 @@ Reportez‑vous aux annotations dans le code ci‑dessus pour voir plus de dĂ©ta
 
 Vous pouvez aussi combiner `dataclasses` avec d'autres modĂšles Pydantic, en hĂ©riter, les inclure dans vos propres modĂšles, etc.
 
-Pour en savoir plus, consultez la <a href="https://docs.pydantic.dev/latest/concepts/dataclasses/" class="external-link" target="_blank">documentation Pydantic sur les dataclasses</a>.
+Pour en savoir plus, consultez la [documentation Pydantic sur les dataclasses](https://docs.pydantic.dev/latest/concepts/dataclasses/).
 
 ## Version { #version }
 
index 6d0907a8bc67148aef3fa1146717a455914eb78f..c585dd563c6c8473e56595857d7b8e8365209b08 100644 (file)
@@ -38,7 +38,7 @@ Puis, juste aprĂšs le `yield`, nous dĂ©chargeons le modĂšle. Ce code sera exĂ©cu
 
 /// tip | Astuce
 
-L’« arrĂȘt Â» se produit lorsque vous **arrĂȘtez** l'application.
+Le `shutdown` se produit lorsque vous **arrĂȘtez** l'application.
 
 Peut-ĂȘtre devez-vous dĂ©marrer une nouvelle version, ou vous en avez simplement assez de l'exĂ©cuter. đŸ€·
 
@@ -150,11 +150,11 @@ Pour cette raison, il est dĂ©sormais recommandĂ© d'utiliser plutĂŽt le `lifespan
 
 Juste un dĂ©tail technique pour les nerds curieux. đŸ€“
 
-Sous le capot, dans la spĂ©cification technique ASGI, cela fait partie du <a href="https://asgi.readthedocs.io/en/latest/specs/lifespan.html" class="external-link" target="_blank">protocole Lifespan</a>, et il y dĂ©finit des Ă©vĂ©nements appelĂ©s `startup` et `shutdown`.
+Sous le capot, dans la spĂ©cification technique ASGI, cela fait partie du [protocole Lifespan](https://asgi.readthedocs.io/en/latest/specs/lifespan.html), et il y dĂ©finit des Ă©vĂ©nements appelĂ©s `startup` et `shutdown`.
 
 /// info
 
-Vous pouvez en lire plus sur les gestionnaires `lifespan` de Starlette dans la <a href="https://www.starlette.dev/lifespan/" class="external-link" target="_blank">documentation Â« Lifespan Â» de Starlette</a>.
+Vous pouvez en lire plus sur les gestionnaires `lifespan` de Starlette dans la [documentation Â« Lifespan Â» de Starlette](https://www.starlette.dev/lifespan/).
 
 Y compris comment gĂ©rer l'Ă©tat de cycle de vie qui peut ĂȘtre utilisĂ© dans d'autres parties de votre code.
 
@@ -162,4 +162,4 @@ Y compris comment gĂ©rer l'Ă©tat de cycle de vie qui peut ĂȘtre utilisĂ© dans d'
 
 ## Sous-applications { #sub-applications }
 
-🚹 Gardez Ă  l'esprit que ces Ă©vĂ©nements de cycle de vie (dĂ©marrage et arrĂȘt) ne seront exĂ©cutĂ©s que pour l'application principale, pas pour [Sous-applications - Montages](sub-applications.md){.internal-link target=_blank}.
+🚹 Gardez Ă  l'esprit que ces Ă©vĂ©nements de cycle de vie (dĂ©marrage et arrĂȘt) ne seront exĂ©cutĂ©s que pour l'application principale, pas pour [Sous-applications - Montages](sub-applications.md).
index 6f51ac7be932ec60424c1fb8ef92f84fc000b4de..58bd48181ec6341858f32c10849e3405c2c1e149 100644 (file)
@@ -8,11 +8,11 @@ Dans ce guide, vous apprendrez Ă  gĂ©nĂ©rer un **SDK TypeScript** pour votre bac
 
 ## GĂ©nĂ©rateurs de SDK open source { #open-source-sdk-generators }
 
-Une option polyvalente est <a href="https://openapi-generator.tech/" class="external-link" target="_blank">OpenAPI Generator</a>, qui prend en charge **de nombreux langages de programmation** et peut gĂ©nĂ©rer des SDK Ă  partir de votre spĂ©cification OpenAPI.
+Une option polyvalente est le [OpenAPI Generator](https://openapi-generator.tech/), qui prend en charge **de nombreux langages de programmation** et peut gĂ©nĂ©rer des SDK Ă  partir de votre spĂ©cification OpenAPI.
 
-Pour les **clients TypeScript**, <a href="https://heyapi.dev/" class="external-link" target="_blank">Hey API</a> est une solution dĂ©diĂ©e, offrant une expĂ©rience optimisĂ©e pour l’écosystĂšme TypeScript.
+Pour les **clients TypeScript**, [Hey API](https://heyapi.dev/) est une solution dĂ©diĂ©e, offrant une expĂ©rience optimisĂ©e pour l’écosystĂšme TypeScript.
 
-Vous pouvez dĂ©couvrir davantage de gĂ©nĂ©rateurs de SDK sur <a href="https://openapi.tools/#sdk" class="external-link" target="_blank">OpenAPI.Tools</a>.
+Vous pouvez dĂ©couvrir davantage de gĂ©nĂ©rateurs de SDK sur [OpenAPI.Tools](https://openapi.tools/#sdk).
 
 /// tip | Astuce
 
@@ -24,15 +24,15 @@ FastAPI gĂ©nĂšre automatiquement des spĂ©cifications **OpenAPI 3.1**, donc tout
 
 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){.internal-link target=_blank} âœš, ces entreprises contribuent Ă  garantir que le framework et son **Ă©cosystĂšme** restent sains et **durables**.
+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 :
 
-* <a href="https://speakeasy.com/editor?utm_source=fastapi+repo&utm_medium=github+sponsorship" class="external-link" target="_blank">Speakeasy</a>
-* <a href="https://www.stainless.com/?utm_source=fastapi&utm_medium=referral" class="external-link" target="_blank">Stainless</a>
-* <a href="https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi" class="external-link" target="_blank">liblab</a>
+* [Speakeasy](https://speakeasy.com/editor?utm_source=fastapi+repo&utm_medium=github+sponsorship)
+* [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral)
+* [liblab](https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi)
 
 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. đŸ€“
 
@@ -66,7 +66,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client
 
 Cela gĂ©nĂ©rera un SDK TypeScript dans `./src/client`.
 
-Vous pouvez apprendre Ă  <a href="https://heyapi.dev/openapi-ts/get-started" class="external-link" target="_blank">installer `@hey-api/openapi-ts`</a> et lire Ă  propos du <a href="https://heyapi.dev/openapi-ts/output" class="external-link" target="_blank">rĂ©sultat gĂ©nĂ©rĂ©</a> sur leur site.
+Vous pouvez apprendre Ă  [installer `@hey-api/openapi-ts`](https://heyapi.dev/openapi-ts/get-started) et lire Ă  propos du [rĂ©sultat gĂ©nĂ©rĂ©](https://heyapi.dev/openapi-ts/output) sur leur site.
 
 ### Utiliser le SDK { #using-the-sdk }
 
index a2f9d3b1bba69edea5aa2bd0c1a44039769ea311..03fdc2102059306320319b1bda8d779c1d6fdaf2 100644 (file)
@@ -2,7 +2,7 @@
 
 ## CaractĂ©ristiques supplĂ©mentaires { #additional-features }
 
-Le [Tutoriel - Guide de l'utilisateur](../tutorial/index.md){.internal-link target=_blank} devrait suffire Ă  vous faire dĂ©couvrir toutes les fonctionnalitĂ©s principales de **FastAPI**.
+Le [Tutoriel - Guide de l'utilisateur](../tutorial/index.md) devrait suffire Ă  vous faire dĂ©couvrir toutes les fonctionnalitĂ©s principales de **FastAPI**.
 
 Dans les sections suivantes, vous verrez des options, configurations et fonctionnalitĂ©s supplĂ©mentaires.
 
@@ -16,6 +16,6 @@ Et il est possible que, pour votre cas d'utilisation, la solution se trouve dans
 
 ## Lire d'abord le tutoriel { #read-the-tutorial-first }
 
-Vous pouvez utiliser la plupart des fonctionnalitĂ©s de **FastAPI** grĂące aux connaissances du [Tutoriel - Guide de l'utilisateur](../tutorial/index.md){.internal-link target=_blank}.
+Vous pouvez utiliser la plupart des fonctionnalitĂ©s de **FastAPI** grĂące aux connaissances du [Tutoriel - Guide de l'utilisateur](../tutorial/index.md).
 
 Et les sections suivantes supposent que vous l'avez lu et que vous en connaissez les idĂ©es principales.
index 934c910411a8585569ab6ff9260836ab1b8bd595..15de9872f6e53779ab4b47d521b2f4638aad6841 100644 (file)
@@ -1,8 +1,8 @@
 # Utiliser des middlewares avancĂ©s { #advanced-middleware }
 
-Dans le tutoriel principal, vous avez vu comment ajouter des [middlewares personnalisĂ©s](../tutorial/middleware.md){.internal-link target=_blank} Ă  votre application.
+Dans le tutoriel principal, vous avez vu comment ajouter des [middlewares personnalisĂ©s](../tutorial/middleware.md) Ă  votre application.
 
-Vous avez Ă©galement vu comment gĂ©rer [CORS avec le `CORSMiddleware`](../tutorial/cors.md){.internal-link target=_blank}.
+Vous avez Ă©galement vu comment gĂ©rer [CORS avec le `CORSMiddleware`](../tutorial/cors.md).
 
 Dans cette section, nous allons voir comment utiliser d'autres middlewares.
 
@@ -91,7 +91,7 @@ Il existe de nombreux autres middlewares ASGI.
 
 Par exemple :
 
-- <a href="https://github.com/encode/uvicorn/blob/master/uvicorn/middleware/proxy_headers.py" class="external-link" target="_blank">Le `ProxyHeadersMiddleware` d'Uvicorn</a>
-- <a href="https://github.com/florimondmanca/msgpack-asgi" class="external-link" target="_blank">MessagePack</a>
+- [Le `ProxyHeadersMiddleware` d'Uvicorn](https://github.com/encode/uvicorn/blob/master/uvicorn/middleware/proxy_headers.py)
+- [MessagePack](https://github.com/florimondmanca/msgpack-asgi)
 
-Pour voir d'autres middlewares disponibles, consultez <a href="https://www.starlette.dev/middleware/" class="external-link" target="_blank">la documentation des middlewares de Starlette</a> et la <a href="https://github.com/florimondmanca/awesome-asgi" class="external-link" target="_blank">liste ASGI Awesome</a>.
+Pour voir d'autres middlewares disponibles, consultez la [documentation des middlewares de Starlette](https://www.starlette.dev/middleware/) et la [liste ASGI Awesome](https://github.com/florimondmanca/awesome-asgi).
index 669d9447a2300ca235116d332b86839d0cab67ea..369a638c8ffca72b9a2ba22918e7af5e7f6a0b5f 100644 (file)
@@ -35,7 +35,7 @@ Cette partie est assez normale, la plupart du code vous est probablement dĂ©jĂ 
 
 /// tip | Astuce
 
-Le paramĂštre de requĂȘte `callback_url` utilise un type Pydantic <a href="https://docs.pydantic.dev/latest/api/networks/" class="external-link" target="_blank">Url</a>.
+Le paramĂštre de requĂȘte `callback_url` utilise un type Pydantic [Url](https://docs.pydantic.dev/latest/api/networks/).
 
 ///
 
@@ -66,7 +66,7 @@ Cet exemple n’implĂ©mente pas le callback lui-mĂȘme (qui pourrait ĂȘtre une si
 
 Le callback rĂ©el n’est qu’une requĂȘte HTTP.
 
-En implĂ©mentant vous-mĂȘme le callback, vous pourriez utiliser quelque chose comme <a href="https://www.python-httpx.org" class="external-link" target="_blank">HTTPX</a> ou <a href="https://requests.readthedocs.io/" class="external-link" target="_blank">Requests</a>.
+En implĂ©mentant vous-mĂȘme le callback, vous pourriez utiliser quelque chose comme [HTTPX](https://www.python-httpx.org) ou [Requests](https://requests.readthedocs.io/).
 
 ///
 
@@ -106,11 +106,11 @@ Il devrait ressembler exactement Ă  un *chemin d'accĂšs* FastAPI 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 <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression" class="external-link" target="_blank">expression OpenAPI 3</a> (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 <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md#key-expression" class="external-link" target="_blank">expression OpenAPI 3</a> 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` :
 
@@ -179,7 +179,7 @@ Remarquez que vous ne passez pas le routeur lui-mĂȘme (`invoices_callback_router
 
 ### VĂ©rifier la documentation { #check-the-docs }
 
-Vous pouvez maintenant dĂ©marrer votre application et aller sur <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
+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 :
 
index 21b6f5f00ccbc14fc98e568b5b05eb5186d16d38..c36c2f82bacf9c2c96d773c0c18baf2c4a74f231 100644 (file)
@@ -34,7 +34,7 @@ Lorsque vous crĂ©ez une application FastAPI, il existe un attribut `webhooks` qu
 
 {* ../../docs_src/openapi_webhooks/tutorial001_py310.py hl[9:12,15:20] *}
 
-Les webhooks que vous dĂ©finissez apparaĂźtront dans le schĂ©ma **OpenAPI** et dans l'interface de **documentation** automatique.
+Les webhooks que vous dĂ©finissez apparaĂźtront dans le schĂ©ma OpenAPI et dans l'interface de documentation automatique.
 
 /// info
 
@@ -48,7 +48,7 @@ C'est parce qu'on s'attend Ă  ce que vos utilisateurs dĂ©finissent, par un autre
 
 ### Consulter la documentation { #check-the-docs }
 
-Vous pouvez maintenant dĂ©marrer votre application et aller sur <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
+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 que votre documentation contient les chemins d'accĂšs habituels et dĂ©sormais aussi des webhooks :
 
index b482f97ccc9794c971b81e4e885c24f60248bee5..67a5d46d418937d0c718153e7f23cdb18ebf1ef5 100644 (file)
@@ -46,7 +46,7 @@ Pour exclure un chemin d’accĂšs du schĂ©ma OpenAPI gĂ©nĂ©rĂ© (et donc des syst
 
 Vous pouvez limiter les lignes utilisĂ©es de la docstring d’une fonction de chemin d’accĂšs pour OpenAPI.
 
-L’ajout d’un `\f` (un caractĂšre Â« saut de page Â» Ă©chappĂ©) amĂšne **FastAPI** Ă  tronquer la sortie utilisĂ©e pour OpenAPI Ă  cet endroit.
+L’ajout d’un `\f` (un caractĂšre Â« form feed Â» Ă©chappĂ©) amĂšne **FastAPI** Ă  tronquer la sortie utilisĂ©e pour OpenAPI Ă  cet endroit.
 
 Cela n’apparaĂźtra pas dans la documentation, mais d’autres outils (comme Sphinx) pourront utiliser le reste.
 
@@ -60,7 +60,7 @@ Cela dĂ©finit les mĂ©tadonnĂ©es sur la rĂ©ponse principale d’un chemin d’acc
 
 Vous pouvez Ă©galement dĂ©clarer des rĂ©ponses supplĂ©mentaires avec leurs modĂšles, codes de statut, etc.
 
-Il y a un chapitre entier dans la documentation Ă  ce sujet, vous pouvez le lire dans [RĂ©ponses supplĂ©mentaires dans OpenAPI](additional-responses.md){.internal-link target=_blank}.
+Il y a un chapitre entier dans la documentation Ă  ce sujet, vous pouvez le lire dans [RĂ©ponses supplĂ©mentaires dans OpenAPI](additional-responses.md).
 
 ## OpenAPI supplĂ©mentaire { #openapi-extra }
 
@@ -68,7 +68,7 @@ Lorsque vous dĂ©clarez un chemin d’accĂšs dans votre application, **FastAPI**
 
 /// note | DĂ©tails techniques
 
-Dans la spĂ©cification OpenAPI, cela s’appelle l’<a href="https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#operation-object" class="external-link" target="_blank">objet Operation</a>.
+Dans la spĂ©cification OpenAPI, cela s’appelle l’[objet Operation](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#operation-object).
 
 ///
 
@@ -82,7 +82,7 @@ Ce schĂ©ma OpenAPI spĂ©cifique Ă  un chemin d’accĂšs est normalement gĂ©nĂ©rĂ©
 
 Ceci est un point d’extension de bas niveau.
 
-Si vous avez seulement besoin de dĂ©clarer des rĂ©ponses supplĂ©mentaires, un moyen plus pratique de le faire est d’utiliser [RĂ©ponses supplĂ©mentaires dans OpenAPI](additional-responses.md){.internal-link target=_blank}.
+Si vous avez seulement besoin de dĂ©clarer des rĂ©ponses supplĂ©mentaires, un moyen plus pratique de le faire est d’utiliser [RĂ©ponses supplĂ©mentaires dans OpenAPI](additional-responses.md).
 
 ///
 
index d08e870995bac513fd0c94d44fde6308c9780565..222825702987496cbc75e82951d13fadb47f4cfe 100644 (file)
@@ -1,6 +1,6 @@
 # RĂ©ponse - Modifier le code d'Ă©tat { #response-change-status-code }
 
-Vous avez probablement dĂ©jĂ  lu que vous pouvez dĂ©finir un [Code d'Ă©tat de la rĂ©ponse](../tutorial/response-status-code.md){.internal-link target=_blank} par dĂ©faut.
+Vous avez probablement dĂ©jĂ  lu que vous pouvez dĂ©finir un [Code d'Ă©tat de la rĂ©ponse](../tutorial/response-status-code.md) par dĂ©faut.
 
 Mais dans certains cas, vous devez renvoyer un code d'Ă©tat diffĂ©rent de celui par dĂ©faut.
 
index d3e51f3317dc552bead25d78dfce22201f895a07..174c9a72dc71d14f330cf7ff1d6ffa6b23695783 100644 (file)
@@ -2,7 +2,7 @@
 
 ## 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.
+Vous pouvez dĂ©clarer un paramĂštre de type `Response` dans votre *fonction de chemin d'accĂšs*.
 
 Vous pouvez ensuite dĂ©finir des cookies dans cet objet de rĂ©ponse *temporaire*.
 
@@ -20,7 +20,7 @@ Vous pouvez Ă©galement dĂ©clarer le paramĂštre `Response` dans des dĂ©pendances,
 
 Vous pouvez Ă©galement crĂ©er des cookies en renvoyant une `Response` directement dans votre code.
 
-Pour ce faire, vous pouvez crĂ©er une rĂ©ponse comme dĂ©crit dans [Renvoyer une Response directement](response-directly.md){.internal-link target=_blank}.
+Pour ce faire, vous pouvez crĂ©er une rĂ©ponse comme dĂ©crit dans [Renvoyer une Response directement](response-directly.md).
 
 DĂ©finissez ensuite des cookies dessus, puis renvoyez-la :
 
@@ -48,4 +48,4 @@ Et comme `Response` peut ĂȘtre utilisĂ© frĂ©quemment pour dĂ©finir des en-tĂȘtes
 
 ///
 
-Pour voir tous les paramĂštres et options disponibles, consultez la <a href="https://www.starlette.dev/responses/#set-cookie" class="external-link" target="_blank">documentation de Starlette</a>.
+Pour voir tous les paramĂštres et options disponibles, consultez la [documentation de Starlette](https://www.starlette.dev/responses/#set-cookie).
index 4a495186402e29ba1e82e9aa5ea33ada4faecee6..5ef479584ead2ed6fea4fedbd302722602e01b85 100644 (file)
@@ -1,36 +1,42 @@
 # Renvoyer directement une rĂ©ponse { #return-a-response-directly }
 
-Lorsque vous crĂ©ez un *chemin d'accĂšs* **FastAPI**, vous pouvez normalement retourner n'importe quelle donnĂ©e : un `dict`, une `list`, un modĂšle Pydantic, un modĂšle de base de donnĂ©es, etc.
+Lorsque vous crĂ©ez un *chemin d'accĂšs* **FastAPI**, vous pouvez normalement renvoyer n'importe quelle donnĂ©e : un `dict`, une `list`, un modĂšle Pydantic, un modĂšle de base de donnĂ©es, etc.
 
-Par dĂ©faut, **FastAPI** convertirait automatiquement cette valeur de retour en JSON en utilisant le `jsonable_encoder` expliquĂ© dans [Encodeur compatible JSON](../tutorial/encoder.md){.internal-link target=_blank}.
+Si vous dĂ©clarez un [ModĂšle de rĂ©ponse](../tutorial/response-model.md), FastAPI l'utilise pour sĂ©rialiser les donnĂ©es en JSON, en utilisant Pydantic.
 
-Ensuite, en arriĂšre-plan, il mettra ces donnĂ©es JSON-compatible (par exemple un `dict`) Ă  l'intĂ©rieur d'un `JSONResponse` qui sera utilisĂ© pour envoyer la rĂ©ponse au client.
+Si vous ne dĂ©clarez pas de modĂšle de rĂ©ponse, FastAPI utilise le `jsonable_encoder` expliquĂ© dans [Encodeur compatible JSON](../tutorial/encoder.md) et le place dans une `JSONResponse`.
 
-Mais vous pouvez retourner une `JSONResponse` directement Ă  partir de vos *chemins d'accĂšs*.
+Vous pouvez Ă©galement crĂ©er directement une `JSONResponse` et la renvoyer.
 
-Cela peut ĂȘtre utile, par exemple, pour retourner des en-tĂȘtes personnalisĂ©s ou des cookies.
+/// tip | Astuce
+
+Vous aurez normalement une bien meilleure performance en utilisant un [ModĂšle de rĂ©ponse](../tutorial/response-model.md) qu'en renvoyant directement une `JSONResponse`, car de cette façon la sĂ©rialisation des donnĂ©es est effectuĂ©e par Pydantic, en Rust.
+
+///
 
 ## Renvoyer une `Response` { #return-a-response }
 
-En fait, vous pouvez retourner n'importe quelle `Response` ou n'importe quelle sous-classe de celle-ci.
+Vous pouvez renvoyer une `Response` ou n'importe laquelle de ses sous-classes.
 
-/// tip | Astuce
+/// info
 
 `JSONResponse` est elle-mĂȘme une sous-classe de `Response`.
 
 ///
 
-Et quand vous retournez une `Response`, **FastAPI** la transmet directement.
+Et lorsque vous renvoyez une `Response`, **FastAPI** la transmet directement.
+
+Il n'effectue aucune conversion de donnĂ©es avec les modĂšles Pydantic, il ne convertit pas le contenu en un autre type, etc.
 
-Elle ne fera aucune conversion de donnĂ©es avec les modĂšles Pydantic, elle ne convertira pas le contenu en un type quelconque, etc.
+Cela vous donne beaucoup de flexibilitĂ©. Vous pouvez renvoyer n'importe quel type de donnĂ©es, surcharger toute dĂ©claration ou validation de donnĂ©es, etc.
 
-Cela vous donne beaucoup de flexibilitĂ©. Vous pouvez retourner n'importe quel type de donnĂ©es, surcharger n'importe quelle dĂ©claration ou validation de donnĂ©es, etc.
+Cela vous donne aussi beaucoup de responsabilitĂ©. Vous devez vous assurer que les donnĂ©es que vous renvoyez sont correctes, dans le bon format, qu'elles peuvent ĂȘtre sĂ©rialisĂ©es, etc.
 
 ## Utiliser le `jsonable_encoder` dans une `Response` { #using-the-jsonable-encoder-in-a-response }
 
-Parce que **FastAPI** n'apporte aucune modification Ă  une `Response` que vous retournez, vous devez vous assurer que son contenu est prĂȘt pour cela.
+Comme **FastAPI** n'apporte aucune modification Ă  une `Response` que vous renvoyez, vous devez vous assurer que son contenu est prĂȘt pour cela.
 
-Par exemple, vous ne pouvez pas mettre un modĂšle Pydantic dans une `JSONResponse` sans d'abord le convertir en un `dict` avec tous les types de donnĂ©es (comme `datetime`, `UUID`, etc.) convertis en types compatibles avec JSON.
+Par exemple, vous ne pouvez pas mettre un modĂšle Pydantic dans une `JSONResponse` sans d'abord le convertir en un `dict` avec tous les types de donnĂ©es (comme `datetime`, `UUID`, etc.) convertis en types compatibles JSON.
 
 Pour ces cas, vous pouvez utiliser le `jsonable_encoder` pour convertir vos donnĂ©es avant de les passer Ă  une rĂ©ponse :
 
@@ -40,26 +46,38 @@ Pour ces cas, vous pouvez utiliser le `jsonable_encoder` pour convertir vos donn
 
 Vous pouvez aussi utiliser `from starlette.responses import JSONResponse`.
 
-**FastAPI** fournit le mĂȘme `starlette.responses` que `fastapi.responses` juste par commoditĂ© pour vous, le dĂ©veloppeur. Mais la plupart des rĂ©ponses disponibles proviennent directement de Starlette.
+**FastAPI** fournit le mĂȘme `starlette.responses` que `fastapi.responses` uniquement par commoditĂ© pour vous, dĂ©veloppeur. Mais la plupart des rĂ©ponses disponibles proviennent directement de Starlette.
 
 ///
 
 ## Renvoyer une `Response` personnalisĂ©e { #returning-a-custom-response }
 
-L'exemple ci-dessus montre toutes les parties dont vous avez besoin, mais il n'est pas encore trĂšs utile, car vous auriez pu retourner l'`item` directement, et **FastAPI** l'aurait mis dans une `JSONResponse` pour vous, en le convertissant en `dict`, etc. Tout cela par dĂ©faut.
+L'exemple ci-dessus montre toutes les parties dont vous avez besoin, mais il n'est pas encore trĂšs utile, car vous auriez pu renvoyer l'`item` directement, et **FastAPI** l'aurait placĂ© dans une `JSONResponse` pour vous, en le convertissant en `dict`, etc. Tout cela par dĂ©faut.
 
-Maintenant, voyons comment vous pourriez utiliser cela pour retourner une rĂ©ponse personnalisĂ©e.
+Voyons maintenant comment vous pourriez utiliser cela pour renvoyer une rĂ©ponse personnalisĂ©e.
 
-Disons que vous voulez retourner une rĂ©ponse <a href="https://en.wikipedia.org/wiki/XML" class="external-link" target="_blank">XML</a>.
+Disons que vous voulez renvoyer une [rĂ©ponse XML](https://en.wikipedia.org/wiki/XML).
 
-Vous pouvez mettre votre contenu XML dans une chaĂźne de caractĂšres, la placer dans une `Response`, et la retourner :
+Vous pouvez placer votre contenu XML dans une chaĂźne de caractĂšres, le mettre dans une `Response` et le renvoyer :
 
 {* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *}
 
+## Comprendre le fonctionnement d'un ModĂšle de rĂ©ponse { #how-a-response-model-works }
+
+Lorsque vous dĂ©clarez un [ModĂšle de rĂ©ponse - Type de retour](../tutorial/response-model.md) dans un chemin d'accĂšs, **FastAPI** l'utilise pour sĂ©rialiser les donnĂ©es en JSON, en utilisant Pydantic.
+
+{* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *}
+
+Comme cela se passe cĂŽtĂ© Rust, la performance sera bien meilleure que si cela Ă©tait fait avec le Python classique et la classe `JSONResponse`.
+
+Lorsque vous utilisez un `response_model` ou un type de retour, FastAPI n'utilise ni le `jsonable_encoder` pour convertir les donnĂ©es (ce qui serait plus lent) ni la classe `JSONResponse`.
+
+À la place, il prend les octets JSON gĂ©nĂ©rĂ©s avec Pydantic en utilisant le modĂšle de rĂ©ponse (ou le type de retour) et renvoie directement une `Response` avec le type de mĂ©dia appropriĂ© pour JSON (`application/json`).
+
 ## Notes { #notes }
 
 Lorsque vous renvoyez une `Response` directement, ses donnĂ©es ne sont pas validĂ©es, converties (sĂ©rialisĂ©es), ni documentĂ©es automatiquement.
 
-Mais vous pouvez toujours les documenter comme dĂ©crit dans [Additional Responses in OpenAPI](additional-responses.md){.internal-link target=_blank}.
+Mais vous pouvez toujours les documenter comme dĂ©crit dans [RĂ©ponses supplĂ©mentaires dans OpenAPI](additional-responses.md).
 
-Vous pouvez voir dans les sections suivantes comment utiliser/dĂ©clarer ces `Response`s personnalisĂ©es tout en conservant la conversion automatique des donnĂ©es, la documentation, etc.
+Vous pouvez voir dans les sections suivantes comment utiliser/dĂ©clarer ces `Response` personnalisĂ©es tout en conservant la conversion automatique des donnĂ©es, la documentation, etc.
index 1c6a29f8c5a9614953c2ce52e4635293d98be2cb..b7568b51fcdafe247cedb336f3a919ed7e059c33 100644 (file)
@@ -20,7 +20,7 @@ Vous pouvez Ă©galement dĂ©clarer le paramĂštre `Response` dans des dĂ©pendances,
 
 Vous pouvez Ă©galement ajouter des en-tĂȘtes lorsque vous renvoyez une `Response` directement.
 
-CrĂ©ez une rĂ©ponse comme dĂ©crit dans [Renvoyer une Response directement](response-directly.md){.internal-link target=_blank} et passez les en-tĂȘtes comme paramĂštre supplĂ©mentaire :
+CrĂ©ez une rĂ©ponse comme dĂ©crit dans [Renvoyer une Response directement](response-directly.md) et passez les en-tĂȘtes comme paramĂštre supplĂ©mentaire :
 
 {* ../../docs_src/response_headers/tutorial001_py310.py hl[10:12] *}
 
@@ -36,6 +36,6 @@ Et comme `Response` peut ĂȘtre utilisĂ©e frĂ©quemment pour dĂ©finir des en-tĂȘte
 
 ## En-tĂȘtes personnalisĂ©s { #custom-headers }
 
-Gardez Ă  l'esprit que des en-tĂȘtes propriĂ©taires personnalisĂ©s peuvent ĂȘtre ajoutĂ©s <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers" class="external-link" target="_blank">en utilisant le prĂ©fixe `X-`</a>.
+Gardez Ă  l'esprit que des en-tĂȘtes propriĂ©taires personnalisĂ©s peuvent ĂȘtre ajoutĂ©s [en utilisant le prĂ©fixe `X-`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers).
 
-Mais si vous avez des en-tĂȘtes personnalisĂ©s que vous voulez qu'un client dans un navigateur puisse voir, vous devez les ajouter Ă  vos configurations CORS (en savoir plus dans [CORS (Cross-Origin Resource Sharing)](../tutorial/cors.md){.internal-link target=_blank}), en utilisant le paramĂštre `expose_headers` documentĂ© dans <a href="https://www.starlette.dev/middleware/#corsmiddleware" class="external-link" target="_blank">la documentation CORS de Starlette</a>.
+Mais si vous avez des en-tĂȘtes personnalisĂ©s que vous voulez qu'un client dans un navigateur puisse voir, vous devez les ajouter Ă  vos configurations CORS (en savoir plus dans [CORS (Cross-Origin Resource Sharing)](../tutorial/cors.md)), en utilisant le paramĂštre `expose_headers` documentĂ© dans [la documentation CORS de Starlette](https://www.starlette.dev/middleware/#corsmiddleware).
index a8742ce7c2ddb26fd62920800779e7e88e9bbe14..97e9df6ce5d7614e994ca7749f929aebbf4f3f98 100644 (file)
@@ -32,7 +32,7 @@ Voici un exemple plus complet.
 
 Utilisez une dĂ©pendance pour vĂ©rifier si le nom d'utilisateur et le mot de passe sont corrects.
 
-Pour cela, utilisez le module standard Python <a href="https://docs.python.org/3/library/secrets.html" class="external-link" target="_blank">`secrets`</a> pour vĂ©rifier le nom d'utilisateur et le mot de passe.
+Pour cela, utilisez le module standard Python [`secrets`](https://docs.python.org/3/library/secrets.html) pour vĂ©rifier le nom d'utilisateur et le mot de passe.
 
 `secrets.compare_digest()` doit recevoir des `bytes` ou une `str` ne contenant que des caractĂšres ASCII (ceux de l'anglais), ce qui signifie qu'elle ne fonctionnerait pas avec des caractĂšres comme `ĂĄ`, comme dans `SebastiĂĄn`.
 
index e84fcef6261dd7d5589fd74d9b7aad169f2456ef..f4cde6098717b7b70ddf056d840d67925fbd2a61 100644 (file)
@@ -2,11 +2,11 @@
 
 ## FonctionnalitĂ©s supplĂ©mentaires { #additional-features }
 
-Il existe des fonctionnalitĂ©s supplĂ©mentaires pour gĂ©rer la sĂ©curitĂ© en plus de celles couvertes dans le [Tutoriel - Guide utilisateur : SĂ©curitĂ©](../../tutorial/security/index.md){.internal-link target=_blank}.
+Il existe des fonctionnalitĂ©s supplĂ©mentaires pour gĂ©rer la sĂ©curitĂ© en plus de celles couvertes dans le [Tutoriel - Guide utilisateur : SĂ©curitĂ©](../../tutorial/security/index.md).
 
 /// tip | Astuce
 
-Les sections suivantes ne sont pas nĂ©cessairement Â« advanced Â».
+Les sections suivantes **ne sont pas nĂ©cessairement Â« advanced Â»**.
 
 Et il est possible que, pour votre cas d’utilisation, la solution se trouve dans l’une d’entre elles.
 
@@ -14,6 +14,6 @@ Et il est possible que, pour votre cas d’utilisation, la solution se trouve da
 
 ## Lire d’abord le tutoriel { #read-the-tutorial-first }
 
-Les sections suivantes partent du principe que vous avez dĂ©jĂ  lu le [Tutoriel - Guide utilisateur : SĂ©curitĂ©](../../tutorial/security/index.md){.internal-link target=_blank} principal.
+Les sections suivantes partent du principe que vous avez dĂ©jĂ  lu le [Tutoriel - Guide utilisateur : SĂ©curitĂ©](../../tutorial/security/index.md) principal.
 
 Elles s’appuient toutes sur les mĂȘmes concepts, mais permettent des fonctionnalitĂ©s supplĂ©mentaires.
index c890a5129d19210d0ebbe9556b7e1a4702b361ca..f27b95b4b7fbd3d7599ead912c6683904ef26d23 100644 (file)
@@ -60,7 +60,7 @@ Pour OAuth2, ce ne sont que des chaĂźnes.
 
 ## Vue d’ensemble { #global-view }
 
-Voyons d’abord rapidement les parties qui changent par rapport aux exemples du **Tutoriel - Guide utilisateur** pour [OAuth2 avec mot de passe (et hachage), Bearer avec jetons JWT](../../tutorial/security/oauth2-jwt.md){.internal-link target=_blank}. Cette fois, en utilisant des scopes OAuth2 :
+Voyons d’abord rapidement les parties qui changent par rapport aux exemples du **Tutoriel - Guide utilisateur** pour [OAuth2 avec mot de passe (et hachage), Bearer avec jetons JWT](../../tutorial/security/oauth2-jwt.md). Cette fois, en utilisant des scopes OAuth2 :
 
 {* ../../docs_src/security/tutorial005_an_py310.py hl[5,9,13,47,65,106,108:116,122:126,130:136,141,157] *}
 
@@ -271,4 +271,4 @@ Mais au final, ils implĂ©mentent le mĂȘme standard OAuth2.
 
 ## `Security` dans les dĂ©pendances du dĂ©corateur `dependencies` { #security-in-decorator-dependencies }
 
-De la mĂȘme maniĂšre que vous pouvez dĂ©finir une `list` de `Depends` dans le paramĂštre `dependencies` du dĂ©corateur (comme expliquĂ© dans [DĂ©pendances dans les dĂ©corateurs de chemins d’accĂšs](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}), vous pouvez aussi utiliser `Security` avec des `scopes` Ă  cet endroit.
+De la mĂȘme maniĂšre que vous pouvez dĂ©finir une `list` de `Depends` dans le paramĂštre `dependencies` du dĂ©corateur (comme expliquĂ© dans [DĂ©pendances dans les dĂ©corateurs de chemins d’accĂšs](../../tutorial/dependencies/dependencies-in-path-operation-decorators.md)), vous pouvez aussi utiliser `Security` avec des `scopes` Ă  cet endroit.
index ed724bf4f6825c6d5fb874aff760bcb49eea22d8..e6eb52a4ee0eba5da678d4232777a157a10bad93 100644 (file)
@@ -8,7 +8,7 @@ C'est pourquoi il est courant de les fournir via des variables d'environnement l
 
 /// tip | Astuce
 
-Pour comprendre les variables d'environnement, vous pouvez lire [Variables d'environnement](../environment-variables.md){.internal-link target=_blank}.
+Pour comprendre les variables d'environnement, vous pouvez lire [Variables d'environnement](../environment-variables.md).
 
 ///
 
@@ -20,11 +20,11 @@ Cela signifie que toute valeur lue en Python depuis une variable d'environnement
 
 ## Pydantic `Settings` { #pydantic-settings }
 
-Heureusement, Pydantic fournit un excellent utilitaire pour gĂ©rer ces paramĂštres provenant des variables d'environnement avec <a href="https://docs.pydantic.dev/latest/concepts/pydantic_settings/" class="external-link" target="_blank">Pydantic : gestion des paramĂštres</a>.
+Heureusement, Pydantic fournit un excellent utilitaire pour gĂ©rer ces paramĂštres provenant des variables d'environnement avec [Pydantic : gestion des paramĂštres](https://docs.pydantic.dev/latest/concepts/pydantic_settings/).
 
 ### Installer `pydantic-settings` { #install-pydantic-settings }
 
-D'abord, vous devez crĂ©er votre [environnement virtuel](../virtual-environments.md){.internal-link target=_blank}, l'activer, puis installer le paquet `pydantic-settings` :
+D'abord, vous devez crĂ©er votre [environnement virtuel](../virtual-environments.md), l'activer, puis installer le paquet `pydantic-settings` :
 
 <div class="termy">
 
@@ -100,7 +100,7 @@ Et `items_per_user` conservera sa valeur par dĂ©faut de `50`.
 
 ## ParamĂštres dans un autre module { #settings-in-another-module }
 
-Vous pouvez placer ces paramĂštres dans un autre module comme vous l'avez vu dans [Applications plus grandes - Plusieurs fichiers](../tutorial/bigger-applications.md){.internal-link target=_blank}.
+Vous pouvez placer ces paramĂštres dans un autre module comme vous l'avez vu dans [Applications plus grandes - Plusieurs fichiers](../tutorial/bigger-applications.md).
 
 Par exemple, vous pourriez avoir un fichier `config.py` avec :
 
@@ -112,7 +112,7 @@ Puis l'utiliser dans un fichier `main.py` :
 
 /// tip | Astuce
 
-Vous aurez Ă©galement besoin d'un fichier `__init__.py` comme vous l'avez vu dans [Applications plus grandes - Plusieurs fichiers](../tutorial/bigger-applications.md){.internal-link target=_blank}.
+Vous aurez Ă©galement besoin d'un fichier `__init__.py` comme vous l'avez vu dans [Applications plus grandes - Plusieurs fichiers](../tutorial/bigger-applications.md).
 
 ///
 
@@ -172,7 +172,7 @@ Mais un fichier dotenv n'a pas forcĂ©ment exactement ce nom de fichier.
 
 ///
 
-Pydantic prend en charge la lecture depuis ce type de fichiers en utilisant une bibliothĂšque externe. Vous pouvez en lire davantage ici : <a href="https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support" class="external-link" target="_blank">Pydantic Settings : prise en charge de Dotenv (.env)</a>.
+Pydantic prend en charge la lecture depuis ce type de fichiers en utilisant une bibliothĂšque externe. Vous pouvez en lire davantage ici : [Pydantic Settings : prise en charge de Dotenv (.env)](https://docs.pydantic.dev/latest/concepts/pydantic_settings/#dotenv-env-support).
 
 /// tip | Astuce
 
@@ -197,7 +197,7 @@ Puis mettre Ă  jour votre `config.py` avec :
 
 /// tip | Astuce
 
-L'attribut `model_config` est utilisĂ© uniquement pour la configuration Pydantic. Vous pouvez en lire davantage ici : <a href="https://docs.pydantic.dev/latest/concepts/config/" class="external-link" target="_blank">Pydantic : Concepts : Configuration</a>.
+L'attribut `model_config` est utilisĂ© uniquement pour la configuration Pydantic. Vous pouvez en lire davantage ici : [Pydantic : Concepts : Configuration](https://docs.pydantic.dev/latest/concepts/config/).
 
 ///
 
@@ -291,7 +291,7 @@ Dans le cas de notre dĂ©pendance `get_settings()`, la fonction ne prend mĂȘme au
 
 De cette façon, elle se comporte presque comme s'il s'agissait simplement d'une variable globale. Mais comme elle utilise une fonction de dĂ©pendance, nous pouvons alors la surcharger facilement pour les tests.
 
-`@lru_cache` fait partie de `functools` qui fait partie de la bibliothĂšque standard de Python, vous pouvez en lire davantage dans la <a href="https://docs.python.org/3/library/functools.html#functools.lru_cache" class="external-link" target="_blank">documentation Python pour `@lru_cache`</a>.
+`@lru_cache` fait partie de `functools` qui fait partie de la bibliothĂšque standard de Python, vous pouvez en lire davantage dans la [documentation Python pour `@lru_cache`](https://docs.python.org/3/library/functools.html#functools.lru_cache).
 
 ## RĂ©capitulatif { #recap }
 
index 777056040e94484109ef9fe4c3a67c5348d98ae4..07bd74b1327d665094f184d3276ce63d3728be78 100644 (file)
@@ -30,25 +30,25 @@ Dans ce cas, elle sera montĂ©e au chemin `/subapi` :
 
 ### VĂ©rifier la documentation API automatique { #check-the-automatic-api-docs }
 
-ExĂ©cutez maintenant la commande `fastapi` avec votre fichier :
+ExĂ©cutez maintenant la commande `fastapi` :
 
 <div class="termy">
 
 ```console
-$ fastapi dev main.py
+$ fastapi dev
 
 <span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
 ```
 
 </div>
 
-Puis ouvrez la documentation Ă  <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
+Et ouvrez la documentation Ă  [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
 
 Vous verrez la documentation API automatique pour l'application principale, n'incluant que ses propres _chemins d'accĂšs_ :
 
 <img src="/img/tutorial/sub-applications/image01.png">
 
-Ensuite, ouvrez la documentation de la sous‑application Ă  <a href="http://127.0.0.1:8000/subapi/docs" class="external-link" target="_blank">http://127.0.0.1:8000/subapi/docs</a>.
+Ensuite, ouvrez la documentation de la sous‑application Ă  [http://127.0.0.1:8000/subapi/docs](http://127.0.0.1:8000/subapi/docs).
 
 Vous verrez la documentation API automatique pour la sous‑application, n'incluant que ses propres _chemins d'accĂšs_, tous sous le prĂ©fixe de sous‑chemin correct `/subapi` :
 
@@ -64,4 +64,4 @@ De cette maniĂšre, la sous‑application saura utiliser ce prĂ©fixe de chemin po
 
 La sous‑application peut Ă©galement avoir ses propres sous‑applications montĂ©es et tout fonctionnera correctement, car FastAPI gĂšre automatiquement tous ces `root_path`.
 
-Vous en apprendrez davantage sur `root_path` et sur la façon de l'utiliser explicitement dans la section [DerriĂšre un proxy](behind-a-proxy.md){.internal-link target=_blank}.
+Vous en apprendrez davantage sur `root_path` et sur la façon de l'utiliser explicitement dans la section [DerriĂšre un proxy](behind-a-proxy.md).
index 7c886ab69579722b6573f7ea92f0c54090f6e983..582cf925baaaed93a5437c2e30f7eed88eb0b74a 100644 (file)
@@ -8,7 +8,7 @@ Il existe des utilitaires pour le configurer facilement que vous pouvez utiliser
 
 ## Installer les dĂ©pendances { #install-dependencies }
 
-Vous devez crĂ©er un [environnement virtuel](../virtual-environments.md){.internal-link target=_blank}, l'activer, puis installer `jinja2` :
+Vous devez crĂ©er un [environnement virtuel](../virtual-environments.md), l'activer, puis installer `jinja2` :
 
 <div class="termy">
 
@@ -123,4 +123,4 @@ Et comme vous utilisez `StaticFiles`, ce fichier CSS est servi automatiquement p
 
 ## En savoir plus { #more-details }
 
-Pour plus de dĂ©tails, y compris sur la façon de tester des templates, consultez <a href="https://www.starlette.dev/templates/" class="external-link" target="_blank">la documentation de Starlette sur les templates</a>.
+Pour plus de dĂ©tails, y compris sur la façon de tester des templates, consultez [la documentation de Starlette sur les templates](https://www.starlette.dev/templates/).
index e9f97ab5f226b1906d3f593475a7afe35f72a95c..3f35e13cc30def0def0faca11c80ce6aab0d20d9 100644 (file)
@@ -8,6 +8,6 @@ Pour cela, vous utilisez `TestClient` dans une instruction `with`, en vous conne
 
 /// note | Remarque
 
-Pour plus de dĂ©tails, consultez la documentation de Starlette sur le <a href="https://www.starlette.dev/testclient/#testing-websocket-sessions" class="external-link" target="_blank">test des WebSockets</a>.
+Pour plus de dĂ©tails, consultez la documentation de Starlette sur le [test des WebSockets](https://www.starlette.dev/testclient/#testing-websocket-sessions).
 
 ///
index 4df3f90e8b75e95c61b2913fd4660e410d1f2c14..f7779f1a07b9e67a2b434109098fd69212b9febf 100644 (file)
@@ -15,7 +15,7 @@ Mais il existe des situations oĂč vous pouvez avoir besoin d'accĂ©der directemen
 
 ## DĂ©tails sur l'objet `Request` { #details-about-the-request-object }
 
-Comme **FastAPI** est en fait **Starlette** en dessous, avec une couche de plusieurs outils au-dessus, vous pouvez utiliser directement l'objet <a href="https://www.starlette.dev/requests/" class="external-link" target="_blank">`Request`</a> de Starlette lorsque vous en avez besoin.
+Comme **FastAPI** est en fait **Starlette** en dessous, avec une couche de plusieurs outils au-dessus, vous pouvez utiliser directement l'objet [`Request`](https://www.starlette.dev/requests/) de Starlette lorsque vous en avez besoin.
 
 Cela signifie aussi que si vous rĂ©cupĂ©rez des donnĂ©es directement Ă  partir de l'objet `Request` (par exemple, lire le corps), elles ne seront pas validĂ©es, converties ni documentĂ©es (avec OpenAPI, pour l'interface utilisateur automatique de l'API) par FastAPI.
 
@@ -45,7 +45,7 @@ De la mĂȘme façon, vous pouvez dĂ©clarer tout autre paramĂštre normalement, et
 
 ## Documentation de `Request` { #request-documentation }
 
-Vous pouvez lire plus de dĂ©tails sur <a href="https://www.starlette.dev/requests/" class="external-link" target="_blank">l'objet `Request` sur le site de documentation officiel de Starlette</a>.
+Vous pouvez lire plus de dĂ©tails sur [l'objet `Request` sur le site de documentation officiel de Starlette](https://www.starlette.dev/requests/).
 
 /// note | DĂ©tails techniques
 
index d78f89c37414b7e3847cb684a4d9b62fe2ff33c4..737bbc72e3bd6a57b467e856eb0583b60084d5b6 100644 (file)
@@ -1,10 +1,10 @@
 # WebSockets { #websockets }
 
-Vous pouvez utiliser <a href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API" class="external-link" target="_blank">API WebSockets</a> avec **FastAPI**.
+Vous pouvez utiliser [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) avec **FastAPI**.
 
 ## Installer `websockets` { #install-websockets }
 
-Vous devez crĂ©er un [environnement virtuel](../virtual-environments.md){.internal-link target=_blank}, l'activer, et installer `websockets` (une bibliothĂšque Python qui facilite l'utilisation du protocole Â« WebSocket Â») :
+Vous devez crĂ©er un [environnement virtuel](../virtual-environments.md), l'activer, et installer `websockets` (une bibliothĂšque Python qui facilite l'utilisation du protocole Â« WebSocket Â») :
 
 <div class="termy">
 
@@ -64,19 +64,19 @@ Vous pouvez recevoir et envoyer des donnĂ©es binaires, texte et JSON.
 
 ## Essayer { #try-it }
 
-Si votre fichier s'appelle `main.py`, exĂ©cutez votre application avec :
+Mettez votre code dans un fichier `main.py` puis exĂ©cutez votre application :
 
 <div class="termy">
 
 ```console
-$ fastapi dev main.py
+$ fastapi dev
 
 <span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
 ```
 
 </div>
 
-Ouvrez votre navigateur Ă  l'adresse <a href="http://127.0.0.1:8000" class="external-link" target="_blank">http://127.0.0.1:8000</a>.
+Ouvrez votre navigateur Ă  l'adresse [http://127.0.0.1:8000](http://127.0.0.1:8000).
 
 Vous verrez une page simple comme :
 
@@ -115,25 +115,25 @@ Ils fonctionnent de la mĂȘme maniĂšre que pour les autres endpoints/*chemins d'a
 
 Comme il s'agit d'un WebSocket, il n'est pas vraiment logique de lever une `HTTPException`, nous levons plutĂŽt une `WebSocketException`.
 
-Vous pouvez utiliser un code de fermeture parmi les <a href="https://tools.ietf.org/html/rfc6455#section-7.4.1" class="external-link" target="_blank">codes valides dĂ©finis dans la spĂ©cification</a>.
+Vous pouvez utiliser un code de fermeture parmi les [codes valides dĂ©finis dans la spĂ©cification](https://tools.ietf.org/html/rfc6455#section-7.4.1).
 
 ///
 
 ### Essayez les WebSockets avec des dĂ©pendances { #try-the-websockets-with-dependencies }
 
-Si votre fichier s'appelle `main.py`, exĂ©cutez votre application avec :
+ExĂ©cutez votre application :
 
 <div class="termy">
 
 ```console
-$ fastapi dev main.py
+$ fastapi dev
 
 <span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
 ```
 
 </div>
 
-Ouvrez votre navigateur Ă  l'adresse <a href="http://127.0.0.1:8000" class="external-link" target="_blank">http://127.0.0.1:8000</a>.
+Ouvrez votre navigateur Ă  l'adresse [http://127.0.0.1:8000](http://127.0.0.1:8000).
 
 LĂ , vous pouvez dĂ©finir :
 
@@ -174,7 +174,7 @@ L'application ci-dessus est un exemple minimal et simple pour montrer comment g
 
 Mais gardez Ă  l'esprit que, comme tout est gĂ©rĂ© en mĂ©moire, dans une seule liste, cela ne fonctionnera que tant que le processus s'exĂ©cute et uniquement avec un seul processus.
 
-Si vous avez besoin de quelque chose de facile Ă  intĂ©grer avec FastAPI mais plus robuste, pris en charge par Redis, PostgreSQL ou autres, consultez <a href="https://github.com/encode/broadcaster" class="external-link" target="_blank">encode/broadcaster</a>.
+Si vous avez besoin de quelque chose de facile Ă  intĂ©grer avec FastAPI mais plus robuste, pris en charge par Redis, PostgreSQL ou autres, consultez [encode/broadcaster](https://github.com/encode/broadcaster).
 
 ///
 
@@ -182,5 +182,5 @@ Si vous avez besoin de quelque chose de facile Ă  intĂ©grer avec FastAPI mais pl
 
 Pour en savoir plus sur les options, consultez la documentation de Starlette concernant :
 
-* <a href="https://www.starlette.dev/websockets/" class="external-link" target="_blank">La classe `WebSocket`</a>.
-* <a href="https://www.starlette.dev/endpoints/#websocketendpoint" class="external-link" target="_blank">Gestion des WebSocket basĂ©e sur des classes</a>.
+* [La classe `WebSocket`](https://www.starlette.dev/websockets/).
+* [Gestion des WebSocket basĂ©e sur des classes](https://www.starlette.dev/endpoints/#websocketendpoint).
index fc89819d2720a4044b42cca74817ebe445e08c5b..fe39729f7f4053fd8147e76360d53ca0d35b6000 100644 (file)
@@ -1,6 +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){.internal-link target=_blank}, [DerriĂšre un proxy](behind-a-proxy.md){.internal-link target=_blank}.
+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.
 
@@ -36,13 +36,13 @@ DĂ©sormais, chaque requĂȘte sous le chemin `/v1/` sera gĂ©rĂ©e par l'application
 
 Et le reste sera gĂ©rĂ© par **FastAPI**.
 
-Si vous l'exĂ©cutez et allez Ă  <a href="http://localhost:8000/v1/" class="external-link" target="_blank">http://localhost:8000/v1/</a>, vous verrez la rĂ©ponse de Flask :
+Si vous l'exĂ©cutez et allez Ă  [http://localhost:8000/v1/](http://localhost:8000/v1/) vous verrez la rĂ©ponse de Flask :
 
 ```txt
 Hello, World from Flask!
 ```
 
-Et si vous allez Ă  <a href="http://localhost:8000/v2" class="external-link" target="_blank">http://localhost:8000/v2</a>, vous verrez la rĂ©ponse de FastAPI :
+Et si vous allez Ă  [http://localhost:8000/v2](http://localhost:8000/v2) vous verrez la rĂ©ponse de FastAPI :
 
 ```JSON
 {
index c344bd1f888000b6908161ad1340135e8e19096f..54ad83ae84e78d814afe7147e458564dd8a65a88 100644 (file)
@@ -17,7 +17,7 @@ prĂ©cĂ©dents, en utilisant des fonctionnalitĂ©s du langage qui n'Ă©taient mĂȘme
 
 ## Outils prĂ©cĂ©dents { #previous-tools }
 
-### <a href="https://www.djangoproject.com/" class="external-link" target="_blank">Django</a> { #django }
+### [Django](https://www.djangoproject.com/) { #django }
 
 C'est le framework Python le plus populaire et il bĂ©nĂ©ficie d'une grande confiance. Il est utilisĂ© pour construire
 des systĂšmes tel qu'Instagram.
@@ -28,9 +28,9 @@ stockage.
 
 Il a Ă©tĂ© créé pour gĂ©nĂ©rer le HTML en backend, pas pour crĂ©er des API consommĂ©es par un frontend moderne (comme React, Vue.js et Angular) ou par d'autres systĂšmes (comme les appareils <abbr title="Internet of Things - Internet des objets">IoT</abbr>) communiquant avec lui.
 
-### <a href="https://www.django-rest-framework.org/" class="external-link" target="_blank">Django REST Framework</a> { #django-rest-framework }
+### [Django REST Framework](https://www.django-rest-framework.org/) { #django-rest-framework }
 
-Django REST framework a Ă©tĂ© conçu comme une boĂźte Ă  outils flexible permettant de construire des API Web Ă  partir de Django, afin d'amĂ©liorer ses capacitĂ©s en matiĂšre d'API.
+Django REST Framework a Ă©tĂ© conçu comme une boĂźte Ă  outils flexible permettant de construire des API Web Ă  partir de Django, afin d'amĂ©liorer ses capacitĂ©s en matiĂšre d'API.
 
 Il est utilisĂ© par de nombreuses entreprises, dont Mozilla, Red Hat et Eventbrite.
 
@@ -39,7 +39,7 @@ 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 crĂ©ateur de Starlette et Uvicorn, sur lesquels **FastAPI** est basĂ©.
 
 ///
 
@@ -49,7 +49,7 @@ Avoir une interface de documentation automatique de l'API.
 
 ///
 
-### <a href="https://flask.palletsprojects.com" class="external-link" target="_blank">Flask</a> { #flask }
+### [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.
 
@@ -73,7 +73,7 @@ Proposer un systĂšme de routage simple et facile Ă  utiliser.
 
 ///
 
-### <a href="https://requests.readthedocs.io" class="external-link" target="_blank">Requests</a> { #requests }
+### [Requests](https://requests.readthedocs.io) { #requests }
 
 **FastAPI** n'est pas rĂ©ellement une alternative Ă  **Requests**. Leur cadre est trĂšs diffĂ©rent.
 
@@ -115,7 +115,7 @@ Notez les similitudes entre `requests.get(...)` et `@app.get(...)`.
 
 ///
 
-### <a href="https://swagger.io/" class="external-link" target="_blank">Swagger</a> / <a href="https://github.com/OAI/OpenAPI-Specification/" class="external-link" target="_blank">OpenAPI</a> { #swagger-openapi }
+### [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.
 
@@ -134,8 +134,8 @@ Adopter et utiliser une norme ouverte pour les spĂ©cifications des API, au lieu
 
 IntĂ©grer des outils d'interface utilisateur basĂ©s sur des normes :
 
-* <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a>
-* <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>
+* [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**).
 
@@ -147,7 +147,7 @@ Il y a plusieurs frameworks REST pour Flask, mais aprĂšs avoir investi du temps
 dĂ©couvert que le dĂ©veloppement de beaucoup d'entre eux sont suspendus ou abandonnĂ©s, avec plusieurs problĂšmes
 permanents qui les rendent inadaptĂ©s.
 
-### <a href="https://marshmallow.readthedocs.io/en/stable/" class="external-link" target="_blank">Marshmallow</a> { #marshmallow }
+### [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 Ă 
 les convertir en quelque chose qui peut ĂȘtre envoyĂ© sur le rĂ©seau. Par exemple, convertir un objet contenant des
@@ -166,11 +166,11 @@ Mais elle a Ă©tĂ© créée avant que les annotations de type n'existent en Python
 
 /// check | A inspirĂ© **FastAPI** Ă 
 
-Utilisez du code pour dĂ©finir des Â« schĂ©mas Â» qui fournissent automatiquement les types de donnĂ©es et la validation.
+Utiliser du code pour dĂ©finir des Â« schĂ©mas Â» qui fournissent automatiquement les types de donnĂ©es et la validation.
 
 ///
 
-### <a href="https://webargs.readthedocs.io/en/latest/" class="external-link" target="_blank">Webargs</a> { #webargs }
+### [Webargs](https://webargs.readthedocs.io/en/latest/) { #webargs }
 
 Une autre grande fonctionnalitĂ© requise par les API est l’<dfn title="lecture et conversion en donnĂ©es Python">analyse</dfn> des donnĂ©es provenant des requĂȘtes entrantes.
 
@@ -192,7 +192,7 @@ Disposer d'une validation automatique des donnĂ©es des requĂȘtes entrantes.
 
 ///
 
-### <a href="https://apispec.readthedocs.io/en/stable/" class="external-link" target="_blank">APISpec</a> { #apispec }
+### [APISpec](https://apispec.readthedocs.io/en/stable/) { #apispec }
 
 Marshmallow et Webargs fournissent la validation, l'analyse et la sĂ©rialisation en tant que plug-ins.
 
@@ -222,7 +222,7 @@ Supporter la norme ouverte pour les API, OpenAPI.
 
 ///
 
-### <a href="https://flask-apispec.readthedocs.io/en/latest/" class="external-link" target="_blank">Flask-apispec</a> { #flask-apispec }
+### [Flask-apispec](https://flask-apispec.readthedocs.io/en/latest/) { #flask-apispec }
 
 C'est un plug-in pour Flask, qui relie Webargs, Marshmallow et APISpec.
 
@@ -237,11 +237,11 @@ Cette combinaison de Flask, Flask-apispec avec Marshmallow et Webargs Ă©tait ma
 Son utilisation a conduit Ă  la crĂ©ation de plusieurs gĂ©nĂ©rateurs Flask full-stack. Ce sont les principales stacks que
 j'ai (ainsi que plusieurs Ă©quipes externes) utilisĂ©es jusqu'Ă  prĂ©sent :
 
-* <a href="https://github.com/tiangolo/full-stack" class="external-link" target="_blank">https://github.com/tiangolo/full-stack</a>
-* <a href="https://github.com/tiangolo/full-stack-flask-couchbase" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-flask-couchbase</a>
-* <a href="https://github.com/tiangolo/full-stack-flask-couchdb" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-flask-couchdb</a>
+* [https://github.com/tiangolo/full-stack](https://github.com/tiangolo/full-stack)
+* [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){.internal-link target=_blank}.
+Ces mĂȘmes gĂ©nĂ©rateurs full-stack ont servi de base aux [GĂ©nĂ©rateurs de projets pour **FastAPI**](project-generation.md).
 
 /// info
 
@@ -255,7 +255,7 @@ GĂ©nĂ©rer le schĂ©ma OpenAPI automatiquement, Ă  partir du mĂȘme code qui dĂ©fin
 
 ///
 
-### <a href="https://nestjs.com/" class="external-link" target="_blank">NestJS</a> (et <a href="https://angular.io/" class="external-link" target="_blank">Angular</a>) { #nestjs-and-angular }
+### [NestJS](https://nestjs.com/) (et [Angular](https://angular.io/)) { #nestjs-and-angular }
 
 Ce n'est mĂȘme pas du Python, NestJS est un framework JavaScript (TypeScript) NodeJS inspirĂ© d'Angular.
 
@@ -278,13 +278,13 @@ Disposer d'un puissant systĂšme d'injection de dĂ©pendances. Trouver un moyen de
 
 ///
 
-### <a href="https://sanic.readthedocs.io/en/latest/" class="external-link" target="_blank">Sanic</a> { #sanic }
+### [Sanic](https://sanic.readthedocs.io/en/latest/) { #sanic }
 
 C'Ă©tait l'un des premiers frameworks Python extrĂȘmement rapides basĂ©s sur `asyncio`. Il a Ă©tĂ© conçu pour ĂȘtre trĂšs similaire Ă  Flask.
 
 /// note | DĂ©tails techniques
 
-Il utilisait <a href="https://github.com/MagicStack/uvloop" class="external-link" target="_blank">`uvloop`</a> 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 du systĂšme 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.
 
@@ -292,13 +292,13 @@ Il a clairement inspirĂ© Uvicorn et Starlette, qui sont actuellement plus rapide
 
 /// check | A inspirĂ© **FastAPI** Ă 
 
-Trouvez un moyen d'avoir une performance folle.
+Trouver un moyen d'avoir une performance folle.
 
 C'est pourquoi **FastAPI** est basĂ© sur Starlette, car il s'agit du framework le plus rapide disponible (testĂ© par des benchmarks tiers).
 
 ///
 
-### <a href="https://falconframework.org/" class="external-link" target="_blank">Falcon</a> { #falcon }
+### [Falcon](https://falconframework.org/) { #falcon }
 
 Falcon est un autre framework Python haute performance, il est conçu pour ĂȘtre minimal, et est utilisĂ© comme fondation pour d'autres frameworks comme Hug.
 
@@ -312,13 +312,13 @@ Ainsi, la validation, la sĂ©rialisation et la documentation des donnĂ©es doivent
 
 Trouver des moyens d'obtenir de bonnes performances.
 
-Avec Hug (puisque Hug est basĂ© sur Falcon), **FastAPI** a inspirĂ© la dĂ©claration d'un paramĂštre `response` dans les fonctions.
+Avec Hug (puisque Hug est basĂ© sur Falcon), cela a inspirĂ© **FastAPI** Ă  dĂ©clarer un paramĂštre `response` dans les fonctions.
 
 Bien que dans FastAPI, il est facultatif, et est utilisĂ© principalement pour dĂ©finir les en-tĂȘtes, les cookies, et les codes de statut alternatifs.
 
 ///
 
-### <a href="https://moltenframework.com/" class="external-link" target="_blank">Molten</a> { #molten }
+### [Molten](https://moltenframework.com/) { #molten }
 
 J'ai dĂ©couvert Molten lors des premiĂšres Ă©tapes de dĂ©veloppement de **FastAPI**. Et il a des idĂ©es assez similaires :
 
@@ -346,7 +346,7 @@ Cela a en fait inspirĂ© la mise Ă  jour de certaines parties de Pydantic, afin d
 
 ///
 
-### <a href="https://github.com/hugapi/hug" class="external-link" target="_blank">Hug</a> { #hug }
+### [Hug](https://github.com/hugapi/hug) { #hug }
 
 Hug a Ă©tĂ© l'un des premiers frameworks Ă  implĂ©menter la dĂ©claration des types de paramĂštres d'API en utilisant les annotations de type Python. C'Ă©tait une excellente idĂ©e qui a inspirĂ© d'autres outils Ă  faire de mĂȘme.
 
@@ -363,7 +363,7 @@ Comme il est basĂ© sur l'ancienne norme pour les frameworks web Python synchrone
 
 /// info
 
-Hug a Ă©tĂ© créé par Timothy Crosley, le crĂ©ateur de <a href="https://github.com/timothycrosley/isort" class="external-link" target="_blank">`isort`</a>, un excellent outil pour trier automatiquement les imports dans les fichiers Python.
+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.
 
 ///
 
@@ -378,7 +378,7 @@ Hug a inspirĂ© **FastAPI** pour dĂ©clarer un paramĂštre `response` dans les fonc
 
 ///
 
-### <a href="https://github.com/encode/apistar" class="external-link" target="_blank">APIStar</a> (<= 0.5) { #apistar-0-5 }
+### [APIStar](https://github.com/encode/apistar) (<= 0.5) { #apistar-0-5 }
 
 Juste avant de dĂ©cider de dĂ©velopper **FastAPI**, j'ai trouvĂ© le serveur **APIStar**. Il contenait presque tout ce
 que je recherchais et avait un beau design.
@@ -430,7 +430,7 @@ Je considĂšre **FastAPI** comme un Â« successeur spirituel Â» d'APIStar, tout en
 
 ## UtilisĂ©s par **FastAPI** { #used-by-fastapi }
 
-### <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a> { #pydantic }
+### [Pydantic](https://docs.pydantic.dev/) { #pydantic }
 
 Pydantic est une bibliothĂšque permettant de dĂ©finir la validation, la sĂ©rialisation et la documentation des donnĂ©es (Ă  l'aide de JSON Schema) en se basant sur les annotations de type Python.
 
@@ -447,7 +447,7 @@ GĂ©rer toute la validation des donnĂ©es, leur sĂ©rialisation et la documentation
 
 ///
 
-### <a href="https://www.starlette.dev/" class="external-link" target="_blank">Starlette</a> { #starlette }
+### [Starlette](https://www.starlette.dev/) { #starlette }
 
 Starlette est un framework/toolkit lĂ©ger <dfn title="La nouvelle norme pour crĂ©er des applications web Python asynchrones">ASGI</dfn>, qui est idĂ©al pour construire des services asyncio performants.
 
@@ -492,7 +492,7 @@ Ainsi, tout ce que vous pouvez faire avec Starlette, vous pouvez le faire direct
 
 ///
 
-### <a href="https://www.uvicorn.dev/" class="external-link" target="_blank">Uvicorn</a> { #uvicorn }
+### [Uvicorn](https://www.uvicorn.dev/) { #uvicorn }
 
 Uvicorn est un serveur ASGI rapide comme l'Ă©clair, basĂ© sur uvloop et httptools.
 
@@ -507,10 +507,10 @@ Le serveur web principal pour exĂ©cuter les applications **FastAPI**.
 
 Vous pouvez Ă©galement utiliser l'option de ligne de commande `--workers` pour avoir un serveur multi‑processus asynchrone.
 
-Pour plus de dĂ©tails, consultez la section [DĂ©ploiement](deployment/index.md){.internal-link target=_blank}.
+Pour plus de dĂ©tails, consultez la section [DĂ©ploiement](deployment/index.md).
 
 ///
 
 ## Benchmarks et vitesse { #benchmarks-and-speed }
 
-Pour comprendre, comparer et voir la diffĂ©rence entre Uvicorn, Starlette et FastAPI, consultez la section sur les [Benchmarks](benchmarks.md){.internal-link target=_blank}.
+Pour comprendre, comparer et voir la diffĂ©rence entre Uvicorn, Starlette et FastAPI, consultez la section sur les [Benchmarks](benchmarks.md).
index 72923e03b0a69b6f7dee3211f25b438b7834a399..f2afba9c6d7e7adc59c1a715d27ef7d8939af235 100644 (file)
@@ -40,11 +40,11 @@ def results():
 
 ---
 
-Si votre application n'a pas Ă  communiquer avec une autre chose et Ă  attendre sa rĂ©ponse, utilisez `async def`, mĂȘme si vous n'avez pas besoin d'utiliser `await` Ă  l'intĂ©rieur.
+Si votre application (d'une certaine maniĂšre) n'a pas Ă  communiquer avec une autre chose et Ă  attendre sa rĂ©ponse, utilisez `async def`, mĂȘme si vous n'avez pas besoin d'utiliser `await` Ă  l'intĂ©rieur.
 
 ---
 
-Si vous ne savez pas, utilisez seulement `def` comme vous le feriez habituellement.
+Si vous ne savez pas, utilisez seulement `def`.
 
 ---
 
@@ -141,7 +141,7 @@ Vous et votre crush đŸ˜ mangez les burgers đŸ” et passez un bon moment âœš.
 
 /// info
 
-Illustrations proposĂ©es par <a href="https://www.instagram.com/ketrinadrawsalot" class="external-link" target="_blank">Ketrina Thompson</a>. đŸŽš
+Illustrations proposĂ©es par [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). đŸŽš
 
 ///
 
@@ -207,7 +207,7 @@ Durant tout ce processus, il n'y a presque pas eu de discussions ou de flirts ca
 
 /// info
 
-Illustrations proposĂ©es par <a href="https://www.instagram.com/ketrinadrawsalot" class="external-link" target="_blank">Ketrina Thompson</a>. đŸŽš
+Illustrations proposĂ©es par [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). đŸŽš
 
 ///
 
@@ -251,7 +251,7 @@ Ce type d'asynchronicitĂ© est ce qui a rendu NodeJS populaire (bien que NodeJS n
 
 Et c'est le mĂȘme niveau de performance que celui obtenu avec **FastAPI**.
 
-Et comme on peut avoir du parallĂ©lisme et de l'asynchronicitĂ© en mĂȘme temps, on obtient des performances plus hautes que la plupart des frameworks NodeJS testĂ©s et Ă©gales Ă  celles du Go, qui est un langage compilĂ© plus proche du C <a href="https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1" class="external-link" target="_blank">(tout Ă§a grĂące Ă  Starlette)</a>.
+Et comme on peut avoir du parallĂ©lisme et de l'asynchronicitĂ© en mĂȘme temps, on obtient des performances plus hautes que la plupart des frameworks NodeJS testĂ©s et Ă©gales Ă  celles du Go, qui est un langage compilĂ© plus proche du C [(tout Ă§a grĂące Ă  Starlette)](https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1).
 
 ### Est-ce que la concurrence est mieux que le parallĂ©lisme ? { #is-concurrency-better-than-parallelism }
 
@@ -298,7 +298,7 @@ Mais vous pouvez aussi profiter du parallĂ©lisme et du multiprocessing (plusieur
 
 Ă‡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**.
 
-Pour comprendre comment mettre en place ce parallĂ©lisme en production, allez lire la section [DĂ©ploiement](deployment/index.md){.internal-link target=_blank}.
+Pour comprendre comment mettre en place ce parallĂ©lisme en production, allez lire la section [DĂ©ploiement](deployment/index.md).
 
 ## `async` et `await` { #async-and-await }
 
@@ -363,13 +363,13 @@ Mais si vous souhaitez utiliser `async` / `await` sans FastAPI, vous pouvez Ă©ga
 
 ### Ă‰crire votre propre code async { #write-your-own-async-code }
 
-Starlette (et **FastAPI**) s’appuie sur <a href="https://anyio.readthedocs.io/en/stable/" class="external-link" target="_blank">AnyIO</a>, ce qui le rend compatible Ă  la fois avec la bibliothĂšque standard <a href="https://docs.python.org/3/library/asyncio-task.html" class="external-link" target="_blank">asyncio</a> de Python et avec <a href="https://trio.readthedocs.io/en/stable/" class="external-link" target="_blank">Trio</a>.
+Starlette (et **FastAPI**) s’appuie sur [AnyIO](https://anyio.readthedocs.io/en/stable/), ce qui le rend compatible Ă  la fois avec la bibliothĂšque standard [asyncio](https://docs.python.org/3/library/asyncio-task.html) de Python et avec [Trio](https://trio.readthedocs.io/en/stable/).
 
-En particulier, vous pouvez utiliser directement <a href="https://anyio.readthedocs.io/en/stable/" class="external-link" target="_blank">AnyIO</a> pour vos cas d’usage de concurrence avancĂ©s qui nĂ©cessitent des schĂ©mas plus Ă©laborĂ©s dans votre propre code.
+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 <a href="https://anyio.readthedocs.io/en/stable/" class="external-link" target="_blank">AnyIO</a> 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** : <a href="https://asyncer.tiangolo.com/" class="external-link" target="_blank">Asyncer</a>. Elle sera particuliĂšrement utile si vous devez **combiner du code async avec du code classique** (bloquant/synchrone).
+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).
 
 ### Autres formes de code asynchrone { #other-forms-of-asynchronous-code }
 
@@ -381,7 +381,7 @@ Cette mĂȘme syntaxe (ou presque) a aussi Ă©tĂ© incluse rĂ©cemment dans les versi
 
 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 <a href="https://www.gevent.org/" class="external-link" target="_blank">Gevent</a>.  Mais le code aurait Ă©tĂ© bien plus difficile Ă  comprendre, dĂ©bugger, et concevoir.
+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 JavaScript cĂŽtĂ© navigateur / NodeJS, vous auriez utilisĂ© des Â« callbacks Â». Menant potentiellement Ă  ce que l'on appelle le Â« callback hell Â».
 
@@ -419,15 +419,15 @@ Quand vous dĂ©clarez une *fonction de chemin d'accĂšs* avec un `def` normal et n
 
 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.
 
-Au final, dans les deux situations, il est fort probable que **FastAPI** soit tout de mĂȘme [plus rapide](index.md#performance){.internal-link target=_blank} 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 de vitesse Ă©gale Ă ) votre framework prĂ©cĂ©dent.
 
 ### DĂ©pendances { #dependencies }
 
-La mĂȘme chose s'applique aux [dĂ©pendances](tutorial/dependencies/index.md){.internal-link target=_blank}. 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 dĂ©finie avec `def` plutĂŽt que `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){.internal-link target=_blank} 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 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 Â».
 
 ### Autres fonctions utilitaires { #other-utility-functions }
 
index 4bb35dff7a1b31d490af9a00cf7a42051c69046c..b895118c8bfe614c6ac65c5c9c44c5d7a56b4b34 100644 (file)
@@ -1,6 +1,6 @@
 # Tests de performance { #benchmarks }
 
-Les benchmarks indĂ©pendants de TechEmpower montrent que les applications **FastAPI** s’exĂ©cutant avec Uvicorn sont <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">parmi les frameworks Python les plus rapides disponibles</a>, seulement en dessous de Starlette et Uvicorn eux‑mĂȘmes (tous deux utilisĂ©s en interne par FastAPI).
+Les benchmarks indĂ©pendants de TechEmpower montrent que les applications **FastAPI** s’exĂ©cutant avec Uvicorn sont [parmi les frameworks Python les plus rapides disponibles](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7), seulement en dessous de Starlette et Uvicorn eux‑mĂȘmes (tous deux utilisĂ©s en interne par FastAPI).
 
 Mais en prĂȘtant attention aux tests de performance et aux comparaisons, vous devez tenir compte de ce qui suit.
 
index 798a72a746002a2348efdf2d01b44ce2a18d3c7e..1ed030f0acfca051ed6b1c22227ae22f16f0384f 100644 (file)
@@ -6,7 +6,7 @@ Dans la plupart des cas, les principaux fournisseurs cloud proposent des guides
 
 ## FastAPI Cloud { #fastapi-cloud }
 
-**<a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>** est créée par le mĂȘme auteur et l'Ă©quipe Ă  l'origine de **FastAPI**.
+**[FastAPI Cloud](https://fastapicloud.com)** est créée par le mĂȘme auteur et l'Ă©quipe Ă  l'origine de **FastAPI**.
 
 Elle simplifie le processus de **crĂ©ation**, de **dĂ©ploiement** et **d'accĂšs** Ă  une API avec un effort minimal.
 
@@ -16,9 +16,9 @@ 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){.internal-link target=_blank} âœš Ă©galement. đŸ™‡
+D'autres fournisseurs cloud âœš [**parrainent FastAPI**](../help-fastapi.md#sponsor-the-author) âœš Ă©galement. đŸ™‡
 
 Vous pouvez Ă©galement envisager ces fournisseurs pour suivre leurs guides et essayer leurs services :
 
-* <a href="https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi" class="external-link" target="_blank">Render</a>
-* <a href="https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi" class="external-link" target="_blank">Railway</a>
+* [Render](https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi)
+* [Railway](https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi)
index 59b8ddd1b96d6c665e3d9768268950ef167ff231..1d5497d93cecfb4a1b98404c7151322e84202e52 100644 (file)
@@ -25,7 +25,7 @@ Mais pour l'instant, voyons ces **idĂ©es conceptuelles** importantes. Ces concep
 
 ## SĂ©curitĂ© - HTTPS { #security-https }
 
-Dans le [chapitre prĂ©cĂ©dent Ă  propos de HTTPS](https.md){.internal-link target=_blank}, nous avons vu comment HTTPS fournit le chiffrement pour votre API.
+Dans le [chapitre prĂ©cĂ©dent Ă  propos de HTTPS](https.md), nous avons vu comment HTTPS fournit le chiffrement pour votre API.
 
 Nous avons Ă©galement vu que HTTPS est normalement fourni par un composant **externe** Ă  votre serveur d'application, un **TLS Termination Proxy**.
 
@@ -190,7 +190,7 @@ Quand vous exĂ©cutez **plusieurs processus** du mĂȘme programme d'API, on les ap
 
 ### Processus workers et ports { #worker-processes-and-ports }
 
-Rappelez‑vous, d'aprĂšs les documents [À propos de HTTPS](https.md){.internal-link target=_blank}, qu'un seul processus peut Ă©couter une combinaison de port et d'adresse IP sur un serveur ?
+Rappelez‑vous, d'aprĂšs les documents [À propos de HTTPS](https.md), qu'un seul processus peut Ă©couter une combinaison de port et d'adresse IP sur un serveur ?
 
 C'est toujours vrai.
 
@@ -243,7 +243,7 @@ Voici quelques combinaisons et stratĂ©gies possibles :
 
 Ne vous inquiĂ©tez pas si certains de ces Ă©lĂ©ments concernant les **conteneurs**, Docker ou Kubernetes ne sont pas encore trĂšs clairs.
 
-Je vous en dirai plus sur les images de conteneurs, Docker, Kubernetes, etc. dans un chapitre Ă  venir : [FastAPI dans des conteneurs - Docker](docker.md){.internal-link target=_blank}.
+Je vous en dirai plus sur les images de conteneurs, Docker, Kubernetes, etc. dans un chapitre Ă  venir : [FastAPI dans des conteneurs - Docker](docker.md).
 
 ///
 
@@ -281,7 +281,7 @@ Voici quelques idĂ©es possibles :
 
 /// tip | Astuce
 
-Je vous donnerai des exemples plus concrets pour faire cela avec des conteneurs dans un chapitre Ă  venir : [FastAPI dans des conteneurs - Docker](docker.md){.internal-link target=_blank}.
+Je vous donnerai des exemples plus concrets pour faire cela avec des conteneurs dans un chapitre Ă  venir : [FastAPI dans des conteneurs - Docker](docker.md).
 
 ///
 
index 2d86d4a402ad7ba141a09bdda7eda4aadfab8cce..1567e1d582ac265f79c3944c936c5f3b28233b17 100644 (file)
@@ -1,6 +1,6 @@
 # FastAPI dans des conteneurs - Docker { #fastapi-in-containers-docker }
 
-Lors du dĂ©ploiement d'applications FastAPI, une approche courante consiste Ă  construire une **image de conteneur Linux**. C'est gĂ©nĂ©ralement fait avec <a href="https://www.docker.com/" class="external-link" target="_blank">**Docker**</a>. Vous pouvez ensuite dĂ©ployer cette image de conteneur de plusieurs façons possibles.
+Lors du dĂ©ploiement d'applications FastAPI, une approche courante consiste Ă  construire une **image de conteneur Linux**. C'est gĂ©nĂ©ralement fait avec [**Docker**](https://www.docker.com/). Vous pouvez ensuite dĂ©ployer cette image de conteneur de plusieurs façons possibles.
 
 L'utilisation de conteneurs Linux prĂ©sente plusieurs avantages, notamment la **sĂ©curitĂ©**, la **rĂ©plicabilitĂ©**, la **simplicitĂ©**, entre autres.
 
@@ -60,16 +60,16 @@ Et le **conteneur** lui-mĂȘme (par opposition Ă  l'**image de conteneur**) est l
 
 Docker a Ă©tĂ© l'un des principaux outils pour crĂ©er et gĂ©rer des **images de conteneur** et des **conteneurs**.
 
-Et il existe un <a href="https://hub.docker.com/" class="external-link" target="_blank">Docker Hub</a> public avec des **images de conteneur officielles** prĂ©-construites pour de nombreux outils, environnements, bases de donnĂ©es et applications.
+Et il existe un [Docker Hub](https://hub.docker.com/) public avec des **images de conteneur officielles** prĂ©-construites pour de nombreux outils, environnements, bases de donnĂ©es et applications.
 
-Par exemple, il existe une <a href="https://hub.docker.com/_/python" class="external-link" target="_blank">image Python officielle</a>.
+Par exemple, il existe une [image Python officielle](https://hub.docker.com/_/python).
 
 Et il existe beaucoup d'autres images pour diffĂ©rentes choses comme des bases de donnĂ©es, par exemple :
 
-* <a href="https://hub.docker.com/_/postgres" class="external-link" target="_blank">PostgreSQL</a>
-* <a href="https://hub.docker.com/_/mysql" class="external-link" target="_blank">MySQL</a>
-* <a href="https://hub.docker.com/_/mongo" class="external-link" target="_blank">MongoDB</a>
-* <a href="https://hub.docker.com/_/redis" class="external-link" target="_blank">Redis</a>, etc.
+* [PostgreSQL](https://hub.docker.com/_/postgres)
+* [MySQL](https://hub.docker.com/_/mysql)
+* [MongoDB](https://hub.docker.com/_/mongo)
+* [Redis](https://hub.docker.com/_/redis), etc.
 
 En utilisant une image de conteneur prĂ©-construite, il est trĂšs facile de **combiner** et d'utiliser diffĂ©rents outils. Par exemple, pour essayer une nouvelle base de donnĂ©es. Dans la plupart des cas, vous pouvez utiliser les **images officielles** et simplement les configurer avec des variables d'environnement.
 
@@ -111,7 +111,7 @@ Cela dĂ©pendra principalement de l'outil que vous utilisez pour **installer** ce
 
 La maniĂšre la plus courante consiste Ă  avoir un fichier `requirements.txt` avec les noms des paquets et leurs versions, un par ligne.
 
-Vous utiliserez bien sĂ»r les mĂȘmes idĂ©es que vous avez lues dans [À propos des versions de FastAPI](versions.md){.internal-link target=_blank} pour dĂ©finir les plages de versions.
+Vous utiliserez bien sĂ»r les mĂȘmes idĂ©es que vous avez lues dans [À propos des versions de FastAPI](versions.md) pour dĂ©finir les plages de versions.
 
 Par exemple, votre `requirements.txt` pourrait ressembler Ă  :
 
@@ -238,7 +238,7 @@ Vous devez vous assurer d'utiliser **toujours** la **forme exec** de l'instructi
 
 #### Utiliser `CMD` - Forme Exec { #use-cmd-exec-form }
 
-L'instruction Docker <a href="https://docs.docker.com/reference/dockerfile/#cmd" class="external-link" target="_blank">`CMD`</a> peut ĂȘtre Ă©crite sous deux formes :
+L'instruction Docker [`CMD`](https://docs.docker.com/reference/dockerfile/#cmd) peut ĂȘtre Ă©crite sous deux formes :
 
 âœ… Forme **Exec** :
 
@@ -254,11 +254,11 @@ 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){.internal-link target=_blank} sont dĂ©clenchĂ©s.
+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 pouvez en lire davantage dans la <a href="https://docs.docker.com/reference/dockerfile/#shell-and-exec-form" class="external-link" target="_blank">documentation Docker sur les formes shell et exec</a>.
+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).
 
-Cela peut ĂȘtre trĂšs visible lors de l'utilisation de `docker compose`. Voir cette section de la FAQ Docker Compose pour plus de dĂ©tails techniques : <a href="https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop" class="external-link" target="_blank">Pourquoi mes services mettent-ils 10 secondes Ă  se recrĂ©er ou Ă  s'arrĂȘter ?</a>.
+Cela peut ĂȘtre trĂšs visible lors de l'utilisation de `docker compose`. Voir cette section de la FAQ Docker Compose pour plus de dĂ©tails techniques : [Pourquoi mes services mettent-ils 10 secondes Ă  se recrĂ©er ou Ă  s'arrĂȘter ?](https://docs.docker.com/compose/faq/#why-do-my-services-take-10-seconds-to-recreate-or-stop).
 
 #### Structure du rĂ©pertoire { #directory-structure }
 
@@ -352,7 +352,7 @@ $ docker run -d --name mycontainer -p 80:80 myimage
 
 ## VĂ©rifier { #check-it }
 
-Vous devriez pouvoir le vĂ©rifier via l'URL de votre conteneur Docker, par exemple : <a href="http://192.168.99.100/items/5?q=somequery" class="external-link" target="_blank">http://192.168.99.100/items/5?q=somequery</a> ou <a href="http://127.0.0.1/items/5?q=somequery" class="external-link" target="_blank">http://127.0.0.1/items/5?q=somequery</a> (ou Ă©quivalent, en utilisant votre hĂŽte Docker).
+Vous devriez pouvoir le vĂ©rifier via l'URL de votre conteneur Docker, par exemple : [http://192.168.99.100/items/5?q=somequery](http://192.168.99.100/items/5?q=somequery) ou [http://127.0.0.1/items/5?q=somequery](http://127.0.0.1/items/5?q=somequery) (ou Ă©quivalent, en utilisant votre hĂŽte Docker).
 
 Vous verrez quelque chose comme :
 
@@ -362,17 +362,17 @@ Vous verrez quelque chose comme :
 
 ## Documentation interactive de l'API { #interactive-api-docs }
 
-Vous pouvez maintenant aller sur <a href="http://192.168.99.100/docs" class="external-link" target="_blank">http://192.168.99.100/docs</a> ou <a href="http://127.0.0.1/docs" class="external-link" target="_blank">http://127.0.0.1/docs</a> (ou Ă©quivalent, en utilisant votre hĂŽte Docker).
+Vous pouvez maintenant aller sur [http://192.168.99.100/docs](http://192.168.99.100/docs) ou [http://127.0.0.1/docs](http://127.0.0.1/docs) (ou Ă©quivalent, en utilisant votre hĂŽte Docker).
 
-Vous verrez la documentation interactive automatique de l'API (fournie par <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a>) :
+Vous verrez la documentation interactive automatique de l'API (fournie par [Swagger UI](https://github.com/swagger-api/swagger-ui)) :
 
 ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)
 
 ## Documentation alternative de l'API { #alternative-api-docs }
 
-Et vous pouvez aussi aller sur <a href="http://192.168.99.100/redoc" class="external-link" target="_blank">http://192.168.99.100/redoc</a> ou <a href="http://127.0.0.1/redoc" class="external-link" target="_blank">http://127.0.0.1/redoc</a> (ou Ă©quivalent, en utilisant votre hĂŽte Docker).
+Et vous pouvez aussi aller sur [http://192.168.99.100/redoc](http://192.168.99.100/redoc) ou [http://127.0.0.1/redoc](http://127.0.0.1/redoc) (ou Ă©quivalent, en utilisant votre hĂŽte Docker).
 
-Vous verrez la documentation automatique alternative (fournie par <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>) :
+Vous verrez la documentation automatique alternative (fournie par [ReDoc](https://github.com/Rebilly/ReDoc)) :
 
 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)
 
@@ -413,7 +413,7 @@ Lorsque vous passez le fichier Ă  `fastapi run`, il dĂ©tectera automatiquement q
 
 ## Concepts de dĂ©ploiement { #deployment-concepts }
 
-Parlons Ă  nouveau de certains des mĂȘmes [Concepts de dĂ©ploiement](concepts.md){.internal-link target=_blank} en termes de conteneurs.
+Parlons Ă  nouveau de certains des mĂȘmes [Concepts de dĂ©ploiement](concepts.md) en termes de conteneurs.
 
 Les conteneurs sont principalement un outil pour simplifier le processus de **construction et de dĂ©ploiement** d'une application, mais ils n'imposent pas une approche particuliĂšre pour gĂ©rer ces **concepts de dĂ©ploiement**, et il existe plusieurs stratĂ©gies possibles.
 
@@ -432,7 +432,7 @@ Passons en revue ces **concepts de dĂ©ploiement** en termes de conteneurs :
 
 Si l'on se concentre uniquement sur l'**image de conteneur** pour une application FastAPI (et plus tard sur le **conteneur** en cours d'exĂ©cution), HTTPS serait normalement gĂ©rĂ© **Ă  l'extĂ©rieur** par un autre outil.
 
-Cela pourrait ĂȘtre un autre conteneur, par exemple avec <a href="https://traefik.io/" class="external-link" target="_blank">Traefik</a>, gĂ©rant **HTTPS** et l'acquisition **automatique** des **certificats**.
+Cela pourrait ĂȘtre un autre conteneur, par exemple avec [Traefik](https://traefik.io/), gĂ©rant **HTTPS** et l'acquisition **automatique** des **certificats**.
 
 /// tip | Astuce
 
@@ -558,7 +558,7 @@ Si vous avez **plusieurs conteneurs**, probablement chacun exĂ©cutant un **seul
 
 /// info
 
-Si vous utilisez Kubernetes, ce sera probablement un <a href="https://kubernetes.io/docs/concepts/workloads/pods/init-containers/" class="external-link" target="_blank">Init Container</a>.
+Si vous utilisez Kubernetes, ce sera probablement un [Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/).
 
 ///
 
@@ -570,7 +570,7 @@ Si vous avez une configuration simple, avec **un seul conteneur** qui dĂ©marre e
 
 ### Image Docker de base { #base-docker-image }
 
-Il existait une image Docker officielle FastAPI : <a href="https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker" class="external-link" target="_blank">tiangolo/uvicorn-gunicorn-fastapi</a>. Mais elle est dĂ©sormais dĂ©prĂ©ciĂ©e. â›”
+Il existait une image Docker officielle FastAPI : [tiangolo/uvicorn-gunicorn-fastapi](https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker). Mais elle est dĂ©sormais dĂ©prĂ©ciĂ©e. â›”
 
 Vous ne devriez probablement **pas** utiliser cette image Docker de base (ni aucune autre similaire).
 
@@ -600,7 +600,7 @@ Par exemple :
 
 ## Image Docker avec `uv` { #docker-image-with-uv }
 
-Si vous utilisez <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">uv</a> pour installer et gĂ©rer votre projet, vous pouvez suivre leur <a href="https://docs.astral.sh/uv/guides/integration/docker/" class="external-link" target="_blank">guide Docker pour uv</a>.
+Si vous utilisez [uv](https://github.com/astral-sh/uv) pour installer et gĂ©rer votre projet, vous pouvez suivre leur [guide Docker pour uv](https://docs.astral.sh/uv/guides/integration/docker/).
 
 ## RĂ©capitulatif { #recap }
 
index 72f275cf6fc97616b6ffd972e2daa509ab2e697e..836e9148937ab8b022e326f67f59fcb05e0a4a05 100644 (file)
@@ -1,6 +1,6 @@
 # FastAPI Cloud { #fastapi-cloud }
 
-Vous pouvez dĂ©ployer votre application FastAPI sur <a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a> avec une **seule commande**, allez vous inscrire sur la liste d’attente si ce n’est pas dĂ©jĂ  fait. đŸš€
+Vous pouvez dĂ©ployer votre application FastAPI sur [FastAPI Cloud](https://fastapicloud.com) avec une **seule commande**, allez vous inscrire sur la liste d’attente si ce n’est pas dĂ©jĂ  fait. đŸš€
 
 ## Se connecter { #login }
 
@@ -40,7 +40,7 @@ C’est tout ! Vous pouvez maintenant accĂ©der Ă  votre application Ă  cette URL
 
 ## Ă€ propos de FastAPI Cloud { #about-fastapi-cloud }
 
-**<a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>** est dĂ©veloppĂ© par le mĂȘme auteur et la mĂȘme Ă©quipe Ă  l’origine de **FastAPI**.
+**[FastAPI Cloud](https://fastapicloud.com)** est dĂ©veloppĂ© par le mĂȘme auteur et la mĂȘme Ă©quipe Ă  l’origine de **FastAPI**.
 
 Cela simplifie le processus de **crĂ©ation**, de **dĂ©ploiement** et **d’accĂšs** Ă  une API avec un effort minimal.
 
index 1b3c7be56c38f6653aa955e0e86e9dad7e17fba1..34922f1686277cb8534caf0c9cd67853472bdbdb 100644 (file)
@@ -10,7 +10,7 @@ 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 <a href="https://howhttps.works/" class="external-link" target="_blank">https://howhttps.works/</a>.
+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 :
 
@@ -28,13 +28,13 @@ Maintenant, du point de vue d'un dĂ©veloppeur, voici plusieurs choses Ă  avoir e
 * **Par dĂ©faut**, cela signifie que vous ne pouvez avoir qu'**un seul certificat HTTPS par adresse IP**.
     * Quelle que soit la taille de votre serveur ou la petitesse de chacune des applications qu'il contient.
     * Il existe cependant une **solution** Ă  ce problĂšme.
-* Il existe une **extension** du protocole **TLS** (celui qui gĂšre le cryptage au niveau TCP, avant HTTP) appelĂ©e **<a href="https://en.wikipedia.org/wiki/Server_Name_Indication" class="external-link" target="_blank"><abbr title="Server Name Indication - Indication du nom du serveur">SNI</abbr></a>**.
+* Il existe une **extension** du protocole **TLS** (celui qui gĂšre le cryptage au niveau TCP, avant HTTP) appelĂ©e **[<abbr title="Server Name Indication - Indication du nom du serveur">SNI</abbr>](https://en.wikipedia.org/wiki/Server_Name_Indication)**.
     * Cette extension SNI permet Ă  un seul serveur (avec une **seule adresse IP**) d'avoir **plusieurs certificats HTTPS** et de servir **plusieurs domaines/applications HTTPS**.
     * Pour que cela fonctionne, un **seul** composant (programme) fonctionnant sur le serveur, Ă©coutant sur l'**adresse IP publique**, doit avoir **tous les certificats HTTPS** du serveur.
 * **AprĂšs** l'Ă©tablissement d'une connexion sĂ©curisĂ©e, le protocole de communication est **toujours HTTP**.
     * Le contenu est **cryptĂ©**, mĂȘme s'il est envoyĂ© avec le **protocole HTTP**.
 
-Il est courant d'avoir **un seul programme/serveur HTTP** fonctionnant sur le serveur (la machine, l'hĂŽte, etc.) et **gĂ©rant toutes les parties HTTPS** : recevoir les **requĂȘtes HTTPS chiffrĂ©es**, envoyer les **requĂȘtes HTTP dĂ©chiffrĂ©es** Ă  l'application HTTP rĂ©elle fonctionnant sur le mĂȘme serveur (l'application **FastAPI**, dans ce cas), prendre la **rĂ©ponse HTTP** de l'application, la **chiffrer** en utilisant le **certificat HTTPS** appropriĂ© et la renvoyer au client en utilisant **HTTPS**. Ce serveur est souvent appelĂ© un **<a href="https://en.wikipedia.org/wiki/TLS_termination_proxy" class="external-link" target="_blank">Proxy de terminaison TLS</a>**.
+Il est courant d'avoir **un seul programme/serveur HTTP** fonctionnant sur le serveur (la machine, l'hĂŽte, etc.) et **gĂ©rant toutes les parties HTTPS** : recevoir les **requĂȘtes HTTPS chiffrĂ©es**, envoyer les **requĂȘtes HTTP dĂ©chiffrĂ©es** Ă  l'application HTTP rĂ©elle fonctionnant sur le mĂȘme serveur (l'application **FastAPI**, dans ce cas), prendre la **rĂ©ponse HTTP** de l'application, la **chiffrer** en utilisant le **certificat HTTPS** appropriĂ© et la renvoyer au client en utilisant **HTTPS**. Ce serveur est souvent appelĂ© un **[Proxy de terminaison TLS](https://en.wikipedia.org/wiki/TLS_termination_proxy)**.
 
 Parmi les options que vous pourriez utiliser comme Proxy de terminaison TLS :
 
@@ -49,7 +49,7 @@ Avant Let's Encrypt, ces **certificats HTTPS** Ă©taient vendus par des tiers de
 
 Le processus d'acquisition de l'un de ces certificats Ă©tait auparavant lourd, nĂ©cessitait pas mal de paperasses et les certificats Ă©taient assez chers.
 
-Mais ensuite, **<a href="https://letsencrypt.org/" class="external-link" target="_blank">Let's Encrypt</a>** a Ă©tĂ© créé.
+Mais ensuite, **[Let's Encrypt](https://letsencrypt.org/)** a Ă©tĂ© créé.
 
 Il s'agit d'un projet de la Fondation Linux. Il fournit **des certificats HTTPS gratuitement**, de maniĂšre automatisĂ©e. Ces certificats utilisent toutes les sĂ©curitĂ©s cryptographiques standard et ont une durĂ©e de vie courte (environ 3 mois), de sorte que la **sĂ©curitĂ© est en fait meilleure** en raison de leur durĂ©e de vie rĂ©duite.
 
@@ -200,9 +200,9 @@ Ce **proxy** dĂ©finirait normalement certains en-tĂȘtes HTTP Ă  la volĂ©e avant
 
 Les en-tĂȘtes du proxy sont :
 
-* <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For" class="external-link" target="_blank">X-Forwarded-For</a>
-* <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto" class="external-link" target="_blank">X-Forwarded-Proto</a>
-* <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host" class="external-link" target="_blank">X-Forwarded-Host</a>
+* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-For)
+* [X-Forwarded-Proto](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Proto)
+* [X-Forwarded-Host](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Forwarded-Host)
 
 ///
 
@@ -218,7 +218,7 @@ Cela serait utile, par exemple, pour gĂ©rer correctement les redirections.
 
 /// tip | Astuce
 
-Vous pouvez en savoir plus dans la documentation [DerriĂšre un proxy - Activer les en-tĂȘtes transmis par le proxy](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers){.internal-link target=_blank}
+Vous pouvez en savoir plus dans la documentation [DerriĂšre un proxy - Activer les en-tĂȘtes transmis par le proxy](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers)
 
 ///
 
index 3b08e9af76d287672bf0fe5486ca60b6d4832b01..811d6816004a08cc8518ca1809a7e6c28dcb9fef 100644 (file)
@@ -22,7 +22,7 @@ utilisez.
 Vous pouvez **dĂ©ployer un serveur** vous-mĂȘme en utilisant une combinaison d'outils, vous pouvez utiliser un **service
 cloud** qui fait une partie du travail pour vous, ou encore d'autres options possibles.
 
-Par exemple, nous, l'Ă©quipe derriĂšre FastAPI, avons créé <a href="https://fastapicloud.com" class="external-link" target="_blank">**FastAPI Cloud**</a>, pour rendre le dĂ©ploiement d'applications FastAPI dans le cloud aussi fluide que possible, avec la mĂȘme expĂ©rience dĂ©veloppeur que lorsque vous travaillez avec FastAPI.
+Par exemple, nous, l'Ă©quipe derriĂšre FastAPI, avons créé [**FastAPI Cloud**](https://fastapicloud.com), pour rendre le dĂ©ploiement d'applications FastAPI dans le cloud aussi fluide que possible, avec la mĂȘme expĂ©rience dĂ©veloppeur que lorsque vous travaillez avec FastAPI.
 
 Je vais vous montrer certains des principaux concepts que vous devriez probablement avoir Ă  l'esprit lors du dĂ©ploiement
 d'une application **FastAPI** (bien que la plupart de ces concepts s'appliquent Ă  tout autre type d'application web).
index c0c388b02c115ab9b0206ea424994cfda839279e..4b87df9935dedcc264688c5f18e3b524aefb53b3 100644 (file)
@@ -52,11 +52,11 @@ La principale chose dont vous avez besoin pour exĂ©cuter une application **FastA
 
 Il existe plusieurs alternatives, notamment :
 
-* <a href="https://www.uvicorn.dev/" class="external-link" target="_blank">Uvicorn</a> : un serveur ASGI haute performance.
-* <a href="https://hypercorn.readthedocs.io/" class="external-link" target="_blank">Hypercorn</a> : un serveur ASGI compatible avec HTTP/2 et Trio entre autres fonctionnalitĂ©s.
-* <a href="https://github.com/django/daphne" class="external-link" target="_blank">Daphne</a> : le serveur ASGI conçu pour Django Channels.
-* <a href="https://github.com/emmett-framework/granian" class="external-link" target="_blank">Granian</a> : un serveur HTTP Rust pour les applications Python.
-* <a href="https://unit.nginx.org/howto/fastapi/" class="external-link" target="_blank">NGINX Unit</a> : NGINX Unit est un environnement d'exĂ©cution d'applications web lĂ©ger et polyvalent.
+* [Uvicorn](https://www.uvicorn.dev/) : un serveur ASGI haute performance.
+* [Hypercorn](https://hypercorn.readthedocs.io/) : un serveur ASGI compatible avec HTTP/2 et Trio entre autres fonctionnalitĂ©s.
+* [Daphne](https://github.com/django/daphne) : le serveur ASGI conçu pour Django Channels.
+* [Granian](https://github.com/emmett-framework/granian) : un serveur HTTP Rust pour les applications Python.
+* [NGINX Unit](https://unit.nginx.org/howto/fastapi/) : NGINX Unit est un environnement d'exĂ©cution d'applications web lĂ©ger et polyvalent.
 
 ## Machine serveur et programme serveur { #server-machine-and-server-program }
 
@@ -74,7 +74,7 @@ Lorsque vous installez FastAPI, il est fourni avec un serveur de production, Uvi
 
 Mais vous pouvez Ă©galement installer un serveur ASGI manuellement.
 
-Vous devez crĂ©er un [environnement virtuel](../virtual-environments.md){.internal-link target=_blank}, l'activer, puis vous pouvez installer l'application serveur.
+Vous devez crĂ©er un [environnement virtuel](../virtual-environments.md), l'activer, puis vous pouvez installer l'application serveur.
 
 Par exemple, pour installer Uvicorn :
 
index 338a5003d5b0f7a3820d2184e06071a19ab1a147..c0eca2dccbcf000ea991f8187d0aa7d951bbe613 100644 (file)
@@ -5,7 +5,7 @@ Reprenons ces concepts de dĂ©ploiement vus prĂ©cĂ©demment :
 * SĂ©curitĂ© - HTTPS
 * ExĂ©cution au dĂ©marrage
 * RedĂ©marrages
-* RĂ©plication (le nombre de processus en cours d'exĂ©cution)
+* **RĂ©plication (le nombre de processus en cours d'exĂ©cution)**
 * MĂ©moire
 * Ă‰tapes prĂ©alables avant le dĂ©marrage
 
@@ -13,15 +13,15 @@ Jusqu'Ă  prĂ©sent, avec tous les tutoriels dans les documents, vous avez probabl
 
 Lors du dĂ©ploiement d'applications, vous voudrez probablement avoir une rĂ©plication de processus pour tirer parti de plusieurs cƓurs et pouvoir gĂ©rer davantage de requĂȘtes.
 
-Comme vous l'avez vu dans le chapitre prĂ©cĂ©dent sur les [Concepts de dĂ©ploiement](concepts.md){.internal-link target=_blank}, il existe plusieurs stratĂ©gies possibles.
+Comme vous l'avez vu dans le chapitre prĂ©cĂ©dent sur les [Concepts de dĂ©ploiement](concepts.md), il existe plusieurs stratĂ©gies possibles.
 
 Ici, je vais vous montrer comment utiliser Uvicorn avec des processus workers en utilisant la commande `fastapi` ou directement la commande `uvicorn`.
 
 /// info | Info
 
-Si vous utilisez des conteneurs, par exemple avec Docker ou Kubernetes, je vous en dirai plus Ă  ce sujet dans le prochain chapitre : [FastAPI dans des conteneurs - Docker](docker.md){.internal-link target=_blank}.
+Si vous utilisez des conteneurs, par exemple avec Docker ou Kubernetes, je vous en dirai plus Ă  ce sujet dans le prochain chapitre : [FastAPI dans des conteneurs - Docker](docker.md).
 
-En particulier, lorsque vous exĂ©cutez sur Kubernetes, vous ne voudrez probablement pas utiliser de workers et plutĂŽt exĂ©cuter un seul processus Uvicorn par conteneur, mais je vous en parlerai plus en dĂ©tail dans ce chapitre.
+En particulier, lorsque vous exĂ©cutez sur **Kubernetes**, vous ne voudrez probablement **pas** utiliser de workers et plutĂŽt exĂ©cuter **un seul processus Uvicorn par conteneur**, mais je vous en parlerai plus en dĂ©tail dans ce chapitre.
 
 ///
 
@@ -109,7 +109,7 @@ $ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4
 
 La seule option nouvelle ici est `--workers` qui indique Ă  Uvicorn de dĂ©marrer 4 processus workers.
 
-Vous pouvez aussi voir qu'il affiche le PID de chaque processus, `27365` pour le processus parent (c'est le gestionnaire de processus) et un pour chaque processus worker : `27368`, `27369`, `27370` et `27367`.
+Vous pouvez aussi voir qu'il affiche le **PID** de chaque processus, `27365` pour le processus parent (c'est le **gestionnaire de processus**) et un pour chaque processus worker : `27368`, `27369`, `27370` et `27367`.
 
 ## Concepts de dĂ©ploiement { #deployment-concepts }
 
@@ -117,23 +117,23 @@ Ici, vous avez vu comment utiliser plusieurs workers pour parallĂ©liser l'exĂ©cu
 
 Dans la liste des concepts de dĂ©ploiement ci-dessus, l'utilisation de workers aide principalement Ă  la partie rĂ©plication, et un peu aux redĂ©marrages, mais vous devez toujours vous occuper des autres :
 
-* SĂ©curitĂ© - HTTPS
-* ExĂ©cution au dĂ©marrage
+* **SĂ©curitĂ© - HTTPS**
+* **ExĂ©cution au dĂ©marrage**
 * ***RedĂ©marrages***
 * RĂ©plication (le nombre de processus en cours d'exĂ©cution)
-* MĂ©moire
-* Ă‰tapes prĂ©alables avant le dĂ©marrage
+* **MĂ©moire**
+* **Étapes prĂ©alables avant le dĂ©marrage**
 
 ## Conteneurs et Docker { #containers-and-docker }
 
-Dans le prochain chapitre sur [FastAPI dans des conteneurs - Docker](docker.md){.internal-link target=_blank}, j'expliquerai quelques stratĂ©gies que vous pourriez utiliser pour gĂ©rer les autres concepts de dĂ©ploiement.
+Dans le prochain chapitre sur [FastAPI dans des conteneurs - Docker](docker.md), j'expliquerai quelques stratĂ©gies que vous pourriez utiliser pour gĂ©rer les autres **concepts de dĂ©ploiement**.
 
-Je vous montrerai comment crĂ©er votre propre image Ă  partir de zĂ©ro pour exĂ©cuter un seul processus Uvicorn. C'est un processus simple et c'est probablement ce que vous voudrez faire lorsque vous utilisez un systĂšme distribuĂ© de gestion de conteneurs comme Kubernetes.
+Je vous montrerai comment crĂ©er votre propre image Ă  partir de zĂ©ro pour exĂ©cuter un seul processus Uvicorn. C'est un processus simple et c'est probablement ce que vous voudrez faire lorsque vous utilisez un systĂšme distribuĂ© de gestion de conteneurs comme **Kubernetes**.
 
 ## RĂ©capitulatif { #recap }
 
-Vous pouvez utiliser plusieurs processus workers avec l'option CLI `--workers` des commandes `fastapi` ou `uvicorn` pour tirer parti des CPU multicƓurs, et exĂ©cuter plusieurs processus en parallĂšle.
+Vous pouvez utiliser plusieurs processus workers avec l'option CLI `--workers` des commandes `fastapi` ou `uvicorn` pour tirer parti des **CPU multicƓurs**, et exĂ©cuter **plusieurs processus en parallĂšle**.
 
 Vous pourriez utiliser ces outils et idĂ©es si vous mettez en place votre propre systĂšme de dĂ©ploiement tout en prenant vous-mĂȘme en charge les autres concepts de dĂ©ploiement.
 
-Consultez le prochain chapitre pour en savoir plus sur FastAPI avec des conteneurs (par exemple Docker et Kubernetes). Vous verrez que ces outils offrent aussi des moyens simples de rĂ©soudre les autres concepts de dĂ©ploiement. âœš
+Consultez le prochain chapitre pour en savoir plus sur **FastAPI** avec des conteneurs (par exemple Docker et Kubernetes). Vous verrez que ces outils offrent aussi des moyens simples de rĂ©soudre les autres **concepts de dĂ©ploiement**. âœš
index 81794428fbac5a72e7c95ba45f378b8ba38244bf..8787bc3dea03dc92434b57966591d124bb5a263a 100644 (file)
@@ -4,7 +4,7 @@
 
 De nouvelles fonctionnalitĂ©s sont ajoutĂ©es frĂ©quemment, des bogues sont corrigĂ©s rĂ©guliĂšrement et le code s'amĂ©liore continuellement.
 
-C'est pourquoi les versions actuelles sont toujours `0.x.x`, cela reflĂšte que chaque version pourrait potentiellement comporter des changements non rĂ©trocompatibles. Cela suit les conventions de <a href="https://semver.org/" class="external-link" target="_blank">versionnage sĂ©mantique</a>.
+C'est pourquoi les versions actuelles sont toujours `0.x.x`, cela reflĂšte que chaque version pourrait potentiellement comporter des changements non rĂ©trocompatibles. Cela suit les conventions de [versionnage sĂ©mantique](https://semver.org/).
 
 Vous pouvez crĂ©er des applications de production avec **FastAPI** dĂšs maintenant (et vous le faites probablement depuis un certain temps), vous devez juste vous assurer que vous utilisez une version qui fonctionne correctement avec le reste de votre code.
 
@@ -34,7 +34,7 @@ Si vous utilisez un autre outil pour gĂ©rer vos installations, comme `uv`, Poetr
 
 ## Versions disponibles { #available-versions }
 
-Vous pouvez consulter les versions disponibles (par exemple, pour vĂ©rifier quelle est la derniĂšre version en date) dans les [Notes de version](../release-notes.md){.internal-link target=_blank}.
+Vous pouvez consulter les versions disponibles (par exemple, pour vĂ©rifier quelle est la derniĂšre version en date) dans les [Notes de version](../release-notes.md).
 
 ## Ă€ propos des versions { #about-versions }
 
@@ -66,7 +66,7 @@ Le Â« MINOR Â» est le numĂ©ro au milieu, par exemple, dans `0.2.3`, la version M
 
 Vous devez ajouter des tests pour votre application.
 
-Avec **FastAPI** c'est trĂšs facile (merci Ă  Starlette), consultez les documents : [Tests](../tutorial/testing.md){.internal-link target=_blank}
+Avec **FastAPI** c'est trĂšs facile (merci Ă  Starlette), consultez les documents : [Tests](../tutorial/testing.md)
 
 AprĂšs avoir des tests, vous pouvez mettre Ă  niveau la version de **FastAPI** vers une version plus rĂ©cente et vous assurer que tout votre code fonctionne correctement en exĂ©cutant vos tests.
 
index 57479852ae35b204cccf6bb4152ab88fd0642360..7f052f27f69e9961d42e7d6eb658f6d52f450542 100644 (file)
@@ -65,7 +65,7 @@ print(f"Hello {name} from Python")
 
 /// tip | Astuce
 
-Le deuxiĂšme argument de <a href="https://docs.python.org/3.8/library/os.html#os.getenv" class="external-link" target="_blank">`os.getenv()`</a> est la valeur par dĂ©faut Ă  retourner.
+Le deuxiĂšme argument de [`os.getenv()`](https://docs.python.org/3.8/library/os.html#os.getenv) est la valeur par dĂ©faut Ă  retourner.
 
 S'il n'est pas fourni, c'est `None` par dĂ©faut ; ici, nous fournissons `"World"` comme valeur par dĂ©faut Ă  utiliser.
 
@@ -153,7 +153,7 @@ Hello World from Python
 
 /// tip | Astuce
 
-Vous pouvez en lire davantage sur <a href="https://12factor.net/config" class="external-link" target="_blank">The Twelve-Factor App : Config</a>.
+Vous pouvez en lire davantage sur [The Twelve-Factor App : Config](https://12factor.net/config).
 
 ///
 
@@ -163,7 +163,7 @@ Ces variables d'environnement ne peuvent gĂ©rer que des **chaĂźnes de texte**, c
 
 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.
 
-Vous en apprendrez davantage sur l'utilisation des variables d'environnement pour gĂ©rer les **paramĂštres d'application** dans le [Guide utilisateur avancĂ© - ParamĂštres et variables d'environnement](./advanced/settings.md){.internal-link target=_blank}.
+Vous en apprendrez davantage sur l'utilisation des variables d'environnement pour gĂ©rer les **paramĂštres d'application** dans le [Guide utilisateur avancĂ© - ParamĂštres et variables d'environnement](./advanced/settings.md).
 
 ## Variable d'environnement `PATH` { #path-environment-variable }
 
@@ -285,13 +285,13 @@ $ C:\opt\custompython\bin\python
 
 ////
 
-Ces informations vous seront utiles lors de l'apprentissage des [Environnements virtuels](virtual-environments.md){.internal-link target=_blank}.
+Ces informations vous seront utiles lors de l'apprentissage des [Environnements virtuels](virtual-environments.md).
 
 ## Conclusion { #conclusion }
 
 Avec cela, vous devriez avoir une comprĂ©hension de base de ce que sont les **variables d'environnement** et de la façon de les utiliser en Python.
 
-Vous pouvez Ă©galement en lire davantage sur la <a href="https://en.wikipedia.org/wiki/Environment_variable" class="external-link" target="_blank">page WikipĂ©dia dĂ©diĂ©e aux variables d'environnement</a>.
+Vous pouvez Ă©galement en lire davantage sur la [page WikipĂ©dia dĂ©diĂ©e aux variables d'environnement](https://en.wikipedia.org/wiki/Environment_variable).
 
 Dans de nombreux cas, il n'est pas Ă©vident de voir immĂ©diatement en quoi les variables d'environnement seraient utiles et applicables. Mais elles rĂ©apparaissent dans de nombreux scĂ©narios lorsque vous dĂ©veloppez, il est donc bon de les connaĂźtre.
 
index 9f31e8a2f62dd6c8575a8824e3d2b8160d27961b..03ef75adc7cbbd3e7e29dc2fe1b7c22d22f5c040 100644 (file)
@@ -1,15 +1,15 @@
 # FastAPI CLI { #fastapi-cli }
 
-**FastAPI CLI** est un programme en ligne de commande que vous pouvez utiliser pour servir votre application FastAPI, gĂ©rer votre projet FastAPI, et plus encore.
+**FastAPI <abbr title="command line interface - interface en ligne de commande">CLI</abbr>** est un programme en ligne de commande que vous pouvez utiliser pour servir votre application FastAPI, gĂ©rer votre projet FastAPI, et plus encore.
 
-Lorsque vous installez FastAPI (par exemple avec `pip install "fastapi[standard]"`), cela inclut un package appelĂ© `fastapi-cli` ; ce package fournit la commande `fastapi` dans le terminal.
+Lorsque vous installez FastAPI (par exemple avec `pip install "fastapi[standard]"`), il est fourni avec un programme en ligne de commande que vous pouvez exĂ©cuter dans le terminal.
 
 Pour exĂ©cuter votre application FastAPI en dĂ©veloppement, vous pouvez utiliser la commande `fastapi dev` :
 
 <div class="termy">
 
 ```console
-$ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:solid">main.py</u>
+$ <font color="#4E9A06">fastapi</font> dev
 
   <span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span>  Starting development server đŸš€
 
@@ -46,13 +46,66 @@ $ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:solid
 
 </div>
 
-Le programme en ligne de commande nommĂ© `fastapi` est **FastAPI CLI**.
+/// tip | Astuce
+
+Pour la production, utilisez `fastapi run` plutĂŽt que `fastapi dev`. đŸš€
+
+///
+
+En interne, **FastAPI CLI** utilise [Uvicorn](https://www.uvicorn.dev), un serveur ASGI haute performance, prĂȘt pour la production. đŸ˜Ž
+
+La CLI `fastapi` tentera de dĂ©tecter automatiquement l’application FastAPI Ă  exĂ©cuter, en supposant qu’il s’agit d’un objet nommĂ© `app` dans un fichier `main.py` (ou quelques autres variantes).
+
+Mais vous pouvez configurer explicitement l’application Ă  utiliser.
+
+## Configurer le `entrypoint` de l’application dans `pyproject.toml` { #configure-the-app-entrypoint-in-pyproject-toml }
+
+Vous pouvez configurer l’endroit oĂč se trouve votre application dans un fichier `pyproject.toml` comme suit :
+
+```toml
+[tool.fastapi]
+entrypoint = "main:app"
+```
+
+Cet `entrypoint` indiquera Ă  la commande `fastapi` qu’elle doit importer l’application comme ceci :
+
+```python
+from main import app
+```
 
-FastAPI CLI prend le chemin vers votre programme Python (par exemple `main.py`), dĂ©tecte automatiquement l’instance `FastAPI` (gĂ©nĂ©ralement nommĂ©e `app`), dĂ©termine la procĂ©dure d’importation correcte, puis la sert.
+Si votre code Ă©tait structurĂ© comme ceci :
+
+```
+.
+├── backend
+│   â”œâ”€â”€ main.py
+│   â”œâ”€â”€ __init__.py
+```
+
+Vous dĂ©finiriez alors le `entrypoint` comme suit :
+
+```toml
+[tool.fastapi]
+entrypoint = "backend.main:app"
+```
+
+ce qui serait Ă©quivalent Ă  :
+
+```python
+from backend.main import app
+```
+
+### `fastapi dev` avec un chemin { #fastapi-dev-with-path }
+
+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
+```
 
-Pour la production, vous utiliserez plutĂŽt `fastapi run`. đŸš€
+Mais vous devez vous rappeler de passer le bon chemin Ă  chaque fois que vous appelez la commande `fastapi`.
 
-En interne, **FastAPI CLI** utilise <a href="https://www.uvicorn.dev" class="external-link" target="_blank">Uvicorn</a>, un serveur ASGI haute performance, prĂȘt pour la production. đŸ˜Ž
+De plus, d’autres outils pourraient ne pas pouvoir 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`.
 
 ## `fastapi dev` { #fastapi-dev }
 
@@ -70,6 +123,6 @@ Dans la plupart des cas, vous avez (et devez avoir) un Â« termination proxy Â» a
 
 /// tip | Astuce
 
-Vous pouvez en savoir plus Ă  ce sujet dans la [documentation de dĂ©ploiement](deployment/index.md){.internal-link target=_blank}.
+Vous pouvez en savoir plus Ă  ce sujet dans la [documentation de dĂ©ploiement](deployment/index.md).
 
 ///
index e5e809940a8f11ef077841661a334d6f2124f375..7fae1d8817f475d590b2d55a9b270712d5ea8765 100644 (file)
@@ -6,8 +6,8 @@
 
 ### BasĂ© sur des standards ouverts { #based-on-open-standards }
 
-* <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank"><strong>OpenAPI</strong></a> pour la crĂ©ation d'API, incluant la dĂ©claration de <dfn title="aussi connu comme : endpoints, routes">chemin</dfn> <dfn title="aussi connu comme mĂ©thodes HTTP, comme POST, GET, PUT, DELETE">opĂ©rations</dfn>, paramĂštres, corps de requĂȘtes, sĂ©curitĂ©, etc.
-* Documentation automatique des modĂšles de donnĂ©es avec <a href="https://json-schema.org/" class="external-link" target="_blank"><strong>JSON Schema</strong></a> (puisque OpenAPI est lui-mĂȘme basĂ© sur JSON Schema).
+* [**OpenAPI**](https://github.com/OAI/OpenAPI-Specification) pour la crĂ©ation d'API, incluant la dĂ©claration de <dfn title="aussi connu comme : endpoints, routes">chemin</dfn> <dfn title="aussi connu comme mĂ©thodes HTTP, comme POST, GET, PUT, DELETE">opĂ©rations</dfn>, paramĂštres, corps de requĂȘtes, sĂ©curitĂ©, etc.
+* Documentation automatique des modĂšles de donnĂ©es avec [**JSON Schema**](https://json-schema.org/) (puisque OpenAPI est lui-mĂȘme basĂ© sur JSON Schema).
 * Conçu autour de ces standards, aprĂšs une Ă©tude mĂ©ticuleuse. PlutĂŽt qu'une couche ajoutĂ©e aprĂšs coup.
 * Cela permet Ă©galement d'utiliser la **gĂ©nĂ©ration automatique de code client** dans de nombreux langages.
 
 
 Documentation d'API interactive et interfaces web d'exploration. Comme le framework est basĂ© sur OpenAPI, plusieurs options existent, 2 incluses par dĂ©faut.
 
-* <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank"><strong>Swagger UI</strong></a>, avec exploration interactive, appelez et testez votre API directement depuis le navigateur.
+* [**Swagger UI**](https://github.com/swagger-api/swagger-ui), avec exploration interactive, appelez et testez votre API directement depuis le navigateur.
 
 ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)
 
-* Documentation d'API alternative avec <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank"><strong>ReDoc</strong></a>.
+* Documentation d'API alternative avec [**ReDoc**](https://github.com/Rebilly/ReDoc).
 
 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)
 
@@ -27,7 +27,7 @@ Documentation d'API interactive et interfaces web d'exploration. Comme le framew
 
 Tout est basĂ© sur les dĂ©clarations de **types Python** standard (grĂące Ă  Pydantic). Aucune nouvelle syntaxe Ă  apprendre. Juste du Python moderne standard.
 
-Si vous avez besoin d'un rappel de 2 minutes sur l'utilisation des types en Python (mĂȘme si vous n'utilisez pas FastAPI), consultez le court tutoriel : [Types Python](python-types.md){.internal-link target=_blank}.
+Si vous avez besoin d'un rappel de 2 minutes sur l'utilisation des types en Python (mĂȘme si vous n'utilisez pas FastAPI), consultez le court tutoriel : [Types Python](python-types.md).
 
 Vous Ă©crivez du Python standard avec des types :
 
@@ -75,7 +75,7 @@ Passez les clĂ©s et valeurs du dictionnaire `second_user_data` directement comme
 
 Tout le framework a Ă©tĂ© conçu pour ĂȘtre facile et intuitif Ă  utiliser, toutes les dĂ©cisions ont Ă©tĂ© testĂ©es sur plusieurs Ă©diteurs avant mĂȘme de commencer le dĂ©veloppement, pour assurer la meilleure expĂ©rience de dĂ©veloppement.
 
-Dans les enquĂȘtes auprĂšs des dĂ©veloppeurs Python, il est clair <a href="https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features" class="external-link" target="_blank">que l’une des fonctionnalitĂ©s les plus utilisĂ©es est Â« autocomplĂ©tion Â»</a>.
+Dans les enquĂȘtes auprĂšs des dĂ©veloppeurs Python, il est clair [que l’une des fonctionnalitĂ©s les plus utilisĂ©es est Â« autocomplĂ©tion Â»](https://www.jetbrains.com/research/python-developers-survey-2017/#tools-and-features).
 
 L'ensemble du framework **FastAPI** est conçu pour satisfaire cela. L'autocomplĂ©tion fonctionne partout.
 
@@ -83,11 +83,11 @@ Vous aurez rarement besoin de revenir aux documents.
 
 Voici comment votre Ă©diteur peut vous aider :
 
-* dans <a href="https://code.visualstudio.com/" class="external-link" target="_blank">Visual Studio Code</a> :
+* dans [Visual Studio Code](https://code.visualstudio.com/) :
 
 ![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)
 
-* dans <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a> :
+* dans [PyCharm](https://www.jetbrains.com/pycharm/) :
 
 ![editor support](https://fastapi.tiangolo.com/img/pycharm-completion.png)
 
@@ -124,7 +124,7 @@ SĂ©curitĂ© et authentification intĂ©grĂ©es. Sans aucun compromis avec les bases
 Tous les schĂ©mas de sĂ©curitĂ© dĂ©finis dans OpenAPI, y compris :
 
 * HTTP Basic.
-* **OAuth2** (Ă©galement avec des **tokens JWT**). Consultez le tutoriel [OAuth2 avec JWT](tutorial/security/oauth2-jwt.md){.internal-link target=_blank}.
+* **OAuth2** (Ă©galement avec des **tokens JWT**). Consultez le tutoriel [OAuth2 avec JWT](tutorial/security/oauth2-jwt.md).
 * ClĂ©s d'API dans :
     * les en-tĂȘtes.
     * les paramĂštres de requĂȘte.
@@ -159,13 +159,13 @@ Toute intĂ©gration est conçue pour ĂȘtre si simple Ă  utiliser (avec des dĂ©pen
 
 ## FonctionnalitĂ©s de Starlette { #starlette-features }
 
-**FastAPI** est entiĂšrement compatible avec (et basĂ© sur) <a href="https://www.starlette.dev/" class="external-link" target="_blank"><strong>Starlette</strong></a>. Donc, tout code Starlette additionnel que vous avez fonctionnera aussi.
+**FastAPI** est entiĂšrement compatible avec (et basĂ© sur) [**Starlette**](https://www.starlette.dev/). Donc, tout code Starlette additionnel que vous avez fonctionnera aussi.
 
 `FastAPI` est en fait une sous-classe de `Starlette`. Ainsi, si vous connaissez ou utilisez dĂ©jĂ  Starlette, la plupart des fonctionnalitĂ©s fonctionneront de la mĂȘme maniĂšre.
 
 Avec **FastAPI** vous obtenez toutes les fonctionnalitĂ©s de **Starlette** (puisque FastAPI est juste Starlette sous stĂ©roĂŻdes) :
 
-* Des performances vraiment impressionnantes. C'est <a href="https://github.com/encode/starlette#performance" class="external-link" target="_blank">l’un des frameworks Python les plus rapides disponibles, Ă  l’égal de **NodeJS** et **Go**</a>.
+* Des performances vraiment impressionnantes. C'est [l’un des frameworks Python les plus rapides disponibles, Ă  l’égal de **NodeJS** et **Go**](https://github.com/encode/starlette#performance).
 * Prise en charge des **WebSocket**.
 * TĂąches d'arriĂšre-plan dans le processus.
 * Ă‰vĂšnements de dĂ©marrage et d'arrĂȘt.
@@ -177,7 +177,7 @@ Avec **FastAPI** vous obtenez toutes les fonctionnalitĂ©s de **Starlette** (puis
 
 ## FonctionnalitĂ©s de Pydantic { #pydantic-features }
 
-**FastAPI** est entiĂšrement compatible avec (et basĂ© sur) <a href="https://docs.pydantic.dev/" class="external-link" target="_blank"><strong>Pydantic</strong></a>. Donc, tout code Pydantic additionnel que vous avez fonctionnera aussi.
+**FastAPI** est entiĂšrement compatible avec (et basĂ© sur) [**Pydantic**](https://docs.pydantic.dev/). Donc, tout code Pydantic additionnel que vous avez fonctionnera aussi.
 
 Y compris des bibliothĂšques externes Ă©galement basĂ©es sur Pydantic, servant d’<abbr title="Object-Relational Mapper - Mappeur objet-relationnel">ORM</abbr>, d’<abbr title="Object-Document Mapper - Mappeur objet-document">ODM</abbr> pour les bases de donnĂ©es.
 
index 08d9a7a723c8c0dc1051e6ae2b91a50c940c66df..e24809d6a8e7a54b2a056c01f0fc12cfb73cd1a9 100644 (file)
@@ -12,7 +12,7 @@ Et il existe aussi plusieurs façons d'obtenir de l'aide.
 
 ## S'abonner Ă  la newsletter { #subscribe-to-the-newsletter }
 
-Vous pouvez vous abonner Ă  la (peu frĂ©quente) [newsletter **FastAPI and friends**](newsletter.md){.internal-link target=_blank} pour rester informĂ© Ă  propos :
+Vous pouvez vous abonner Ă  la (peu frĂ©quente) [newsletter **FastAPI and friends**](newsletter.md) pour rester informĂ© Ă  propos :
 
 * Nouvelles sur FastAPI et ses amis đŸš€
 * Guides đŸ“
@@ -22,17 +22,17 @@ Vous pouvez vous abonner Ă  la (peu frĂ©quente) [newsletter **FastAPI and friend
 
 ## Suivre FastAPI sur X (Twitter) { #follow-fastapi-on-x-twitter }
 
-<a href="https://x.com/fastapi" class="external-link" target="_blank">Suivez @fastapi sur **X (Twitter)**</a> pour obtenir les derniĂšres nouvelles sur **FastAPI**. đŸŠ
+[Suivez @fastapi sur **X (Twitter)**](https://x.com/fastapi) pour obtenir les derniĂšres nouvelles sur **FastAPI**. đŸŠ
 
 ## Mettre une Ă©toile Ă  **FastAPI** sur GitHub { #star-fastapi-in-github }
 
-Vous pouvez Â« star Â» FastAPI sur GitHub (en cliquant sur le bouton Ă©toile en haut Ă  droite) : <a href="https://github.com/fastapi/fastapi" class="external-link" target="_blank">https://github.com/fastapi/fastapi</a>. â­ïž
+Vous pouvez Â« star Â» FastAPI sur GitHub (en cliquant sur le bouton Ă©toile en haut Ă  droite) : [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi). â­ïž
 
 En ajoutant une Ă©toile, les autres utilisateurs pourront le trouver plus facilement et voir qu'il a dĂ©jĂ  Ă©tĂ© utile Ă  d'autres.
 
 ## Suivre le dĂ©pĂŽt GitHub pour les releases { #watch-the-github-repository-for-releases }
 
-Vous pouvez Â« watch Â» FastAPI sur GitHub (en cliquant sur le bouton Â« watch Â» en haut Ă  droite) : <a href="https://github.com/fastapi/fastapi" class="external-link" target="_blank">https://github.com/fastapi/fastapi</a>. đŸ‘€
+Vous pouvez Â« watch Â» FastAPI sur GitHub (en cliquant sur le bouton Â« watch Â» en haut Ă  droite) : [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi). đŸ‘€
 
 Vous pouvez y sĂ©lectionner Â« Releases only Â».
 
@@ -40,45 +40,45 @@ Ainsi, vous recevrez des notifications (par e‑mail) chaque fois qu'il y aura u
 
 ## Entrer en contact avec l'auteur { #connect-with-the-author }
 
-Vous pouvez entrer en contact avec <a href="https://tiangolo.com" class="external-link" target="_blank">moi (SebastiĂĄn RamĂ­rez / `tiangolo`)</a>, l'auteur.
+Vous pouvez entrer en contact avec [moi (SebastiĂĄn RamĂ­rez / `tiangolo`)](https://tiangolo.com), l'auteur.
 
 Vous pouvez :
 
-* <a href="https://github.com/tiangolo" class="external-link" target="_blank">Me suivre sur **GitHub**</a>.
+* [Me suivre sur **GitHub**](https://github.com/tiangolo).
     * Voir d'autres projets Open Source que j'ai créés et qui pourraient vous aider.
     * Me suivre pour voir quand je crĂ©e un nouveau projet Open Source.
-* <a href="https://x.com/tiangolo" class="external-link" target="_blank">Me suivre sur **X (Twitter)**</a> ou sur <a href="https://fosstodon.org/@tiangolo" class="external-link" target="_blank">Mastodon</a>.
+* [Me suivre sur **X (Twitter)**](https://x.com/tiangolo) ou sur [Mastodon](https://fosstodon.org/@tiangolo).
     * Me dire comment vous utilisez FastAPI (j'adore l'entendre).
     * ĂŠtre informĂ© quand je fais des annonces ou publie de nouveaux outils.
-    * Vous pouvez aussi <a href="https://x.com/fastapi" class="external-link" target="_blank">suivre @fastapi sur X (Twitter)</a> (un compte sĂ©parĂ©).
-* <a href="https://www.linkedin.com/in/tiangolo/" class="external-link" target="_blank">Me suivre sur **LinkedIn**</a>.
+    * Vous pouvez aussi [suivre @fastapi sur X (Twitter)](https://x.com/fastapi) (un compte sĂ©parĂ©).
+* [Me suivre sur **LinkedIn**](https://www.linkedin.com/in/tiangolo/).
     * ĂŠtre informĂ© quand je fais des annonces ou publie de nouveaux outils (mĂȘme si j'utilise plus souvent X (Twitter) đŸ€·â€â™‚).
-* Lire ce que j'Ă©cris (ou me suivre) sur <a href="https://dev.to/tiangolo" class="external-link" target="_blank">**Dev.to**</a> ou <a href="https://medium.com/@tiangolo" class="external-link" target="_blank">**Medium**</a>.
+* Lire ce que j'Ă©cris (ou me suivre) sur [**Dev.to**](https://dev.to/tiangolo) ou [**Medium**](https://medium.com/@tiangolo).
     * Lire d'autres idĂ©es, des articles, et dĂ©couvrir des outils que j'ai créés.
     * Me suivre pour lire quand je publie quelque chose de nouveau.
 
 ## Tweeter Ă  propos de **FastAPI** { #tweet-about-fastapi }
 
-<a href="https://x.com/compose/tweet?text=I'm loving @fastapi because... https://github.com/fastapi/fastapi" class="external-link" target="_blank">Tweetez Ă  propos de **FastAPI**</a> et faites savoir Ă  moi et aux autres pourquoi vous l'apprĂ©ciez. đŸŽ‰
+[Tweetez Ă  propos de **FastAPI**](https://x.com/compose/tweet?text=I'm loving @fastapi because... https://github.com/fastapi/fastapi) et faites savoir Ă  moi et aux autres pourquoi vous l'apprĂ©ciez. đŸŽ‰
 
 J'adore entendre comment **FastAPI** est utilisĂ©, ce que vous avez aimĂ©, dans quel projet/quelle entreprise vous l'utilisez, etc.
 
 ## Voter pour FastAPI { #vote-for-fastapi }
 
-* <a href="https://www.slant.co/options/34241/~fastapi-review" class="external-link" target="_blank">Votez pour **FastAPI** sur Slant</a>.
-* <a href="https://alternativeto.net/software/fastapi/about/" class="external-link" target="_blank">Votez pour **FastAPI** sur AlternativeTo</a>.
-* <a href="https://stackshare.io/pypi-fastapi" class="external-link" target="_blank">Indiquez que vous utilisez **FastAPI** sur StackShare</a>.
+* [Votez pour **FastAPI** sur Slant](https://www.slant.co/options/34241/~fastapi-review).
+* [Votez pour **FastAPI** sur AlternativeTo](https://alternativeto.net/software/fastapi/about/).
+* [Indiquez que vous utilisez **FastAPI** sur StackShare](https://stackshare.io/pypi-fastapi).
 
 ## Aider les autres avec des questions sur GitHub { #help-others-with-questions-in-github }
 
 Vous pouvez essayer d'aider les autres avec leurs questions dans :
 
-* <a href="https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered" class="external-link" target="_blank">GitHub Discussions</a>
-* <a href="https://github.com/fastapi/fastapi/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Aquestion+-label%3Aanswered+" class="external-link" target="_blank">GitHub Issues</a>
+* [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/categories/questions?discussions_q=category%3AQuestions+is%3Aunanswered)
+* [GitHub Issues](https://github.com/fastapi/fastapi/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Aquestion+-label%3Aanswered+)
 
 Dans de nombreux cas, vous connaissez peut-ĂȘtre dĂ©jĂ  la rĂ©ponse Ă  ces questions. đŸ€“
 
-Si vous aidez beaucoup de personnes avec leurs questions, vous deviendrez un [Expert FastAPI](fastapi-people.md#fastapi-experts){.internal-link target=_blank} officiel. đŸŽ‰
+Si vous aidez beaucoup de personnes avec leurs questions, vous deviendrez un [Expert FastAPI](fastapi-people.md#fastapi-experts) officiel. đŸŽ‰
 
 N'oubliez pas, le point le plus important est : essayez d'ĂȘtre aimable. Les gens viennent avec leurs frustrations et, dans bien des cas, ne posent pas la question de la meilleure façon, mais faites de votre mieux pour rester aimable. đŸ€—
 
@@ -104,7 +104,7 @@ Dans la plupart des cas et pour la plupart des questions, il y a quelque chose l
 
 Dans de nombreux cas, elle ne copiera qu'un fragment de code, mais ce n'est pas suffisant pour **reproduire le problĂšme**.
 
-* Vous pouvez leur demander de fournir un <a href="https://stackoverflow.com/help/minimal-reproducible-example" class="external-link" target="_blank">exemple minimal, complet et vĂ©rifiable</a>, que vous pouvez **copier‑coller** et exĂ©cuter localement pour voir la mĂȘme erreur ou le mĂȘme comportement qu'ils observent, ou pour mieux comprendre leur cas d'utilisation.
+* Vous pouvez leur demander de fournir un [exemple minimal, complet et vĂ©rifiable](https://stackoverflow.com/help/minimal-reproducible-example), que vous pouvez **copier‑coller** et exĂ©cuter localement pour voir la mĂȘme erreur ou le mĂȘme comportement qu'ils observent, ou pour mieux comprendre leur cas d'utilisation.
 
 * Si vous vous sentez trĂšs gĂ©nĂ©reux, vous pouvez essayer de **crĂ©er un tel exemple** vous‑mĂȘme, simplement Ă  partir de la description du problĂšme. Gardez simplement Ă  l'esprit que cela peut prendre beaucoup de temps et qu'il peut ĂȘtre prĂ©fĂ©rable de leur demander d'abord de clarifier le problĂšme.
 
@@ -125,7 +125,7 @@ S'ils rĂ©pondent, il y a de fortes chances que vous ayez rĂ©solu leur problĂšme,
 
 ## Suivre le dĂ©pĂŽt GitHub { #watch-the-github-repository }
 
-Vous pouvez Â« watch Â» FastAPI sur GitHub (en cliquant sur le bouton Â« watch Â» en haut Ă  droite) : <a href="https://github.com/fastapi/fastapi" class="external-link" target="_blank">https://github.com/fastapi/fastapi</a>. đŸ‘€
+Vous pouvez Â« watch Â» FastAPI sur GitHub (en cliquant sur le bouton Â« watch Â» en haut Ă  droite) : [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi). đŸ‘€
 
 Si vous sĂ©lectionnez Â« Watching Â» au lieu de Â« Releases only Â», vous recevrez des notifications lorsque quelqu'un crĂ©e une nouvelle issue ou question. Vous pouvez aussi prĂ©ciser que vous ne souhaitez ĂȘtre notifiĂ© que pour les nouvelles issues, ou les discussions, ou les PR, etc.
 
@@ -133,7 +133,7 @@ Vous pouvez alors essayer de les aider Ă  rĂ©soudre ces questions.
 
 ## Poser des questions { #ask-questions }
 
-Vous pouvez <a href="https://github.com/fastapi/fastapi/discussions/new?category=questions" class="external-link" target="_blank">crĂ©er une nouvelle question</a> dans le dĂ©pĂŽt GitHub, par exemple pour :
+Vous pouvez [crĂ©er une nouvelle question](https://github.com/fastapi/fastapi/discussions/new?category=questions) dans le dĂ©pĂŽt GitHub, par exemple pour :
 
 * Poser une **question** ou demander Ă  propos d'un **problĂšme**.
 * SuggĂ©rer une nouvelle **fonctionnalitĂ©**.
@@ -196,12 +196,12 @@ Donc, il est vraiment important que vous lisiez et exĂ©cutiez le code, et que vo
 
 ## CrĂ©er une Pull Request { #create-a-pull-request }
 
-Vous pouvez [contribuer](contributing.md){.internal-link target=_blank} au code source avec des Pull Requests, par exemple :
+Vous pouvez [contribuer](contributing.md) au code source avec des Pull Requests, par exemple :
 
 * Corriger une coquille que vous avez trouvĂ©e dans la documentation.
-* Partager un article, une vidĂ©o ou un podcast que vous avez créé ou trouvĂ© Ă  propos de FastAPI en <a href="https://github.com/fastapi/fastapi/edit/master/docs/en/data/external_links.yml" class="external-link" target="_blank">modifiant ce fichier</a>.
+* Partager un article, une vidĂ©o ou un podcast que vous avez créé ou trouvĂ© Ă  propos de FastAPI en [modifiant ce fichier](https://github.com/fastapi/fastapi/edit/master/docs/en/data/external_links.yml).
     * Vous devez vous assurer d'ajouter votre lien au dĂ©but de la section correspondante.
-* Aider Ă  [traduire la documentation](contributing.md#translations){.internal-link target=_blank} dans votre langue.
+* Aider Ă  [traduire la documentation](contributing.md#translations) dans votre langue.
     * Vous pouvez aussi aider Ă  relire les traductions créées par d'autres.
 * Proposer de nouvelles sections de documentation.
 * Corriger une issue/un bug existant.
@@ -218,8 +218,8 @@ Il y a beaucoup de travail Ă  faire, et pour la plupart, **VOUS** pouvez le fair
 
 Les principales tĂąches que vous pouvez faire dĂšs maintenant sont :
 
-* [Aider les autres avec des questions sur GitHub](#help-others-with-questions-in-github){.internal-link target=_blank} (voir la section ci‑dessus).
-* [Relire des Pull Requests](#review-pull-requests){.internal-link target=_blank} (voir la section ci‑dessus).
+* [Aider les autres avec des questions sur GitHub](#help-others-with-questions-in-github) (voir la section ci‑dessus).
+* [Relire des Pull Requests](#review-pull-requests) (voir la section ci‑dessus).
 
 Ces deux tĂąches sont celles qui **consomment le plus de temps**. C'est le travail principal de la maintenance de FastAPI.
 
@@ -227,11 +227,11 @@ Si vous pouvez m'aider avec cela, **vous m'aidez Ă  maintenir FastAPI** et Ă  vo
 
 ## Rejoindre le chat { #join-the-chat }
 
-Rejoignez le đŸ‘„ <a href="https://discord.gg/VQjSZaeJmf" class="external-link" target="_blank">serveur Discord</a> đŸ‘„ et Ă©changez avec d'autres membres de la communautĂ© FastAPI.
+Rejoignez le đŸ‘„ [serveur Discord](https://discord.gg/VQjSZaeJmf) đŸ‘„ et Ă©changez avec d'autres membres de la communautĂ© FastAPI.
 
 /// tip | Astuce
 
-Pour les questions, posez‑les dans <a href="https://github.com/fastapi/fastapi/discussions/new?category=questions" class="external-link" target="_blank">GitHub Discussions</a>, vous avez bien plus de chances de recevoir de l'aide par les [Experts FastAPI](fastapi-people.md#fastapi-experts){.internal-link target=_blank}.
+Pour les questions, posez‑les dans [GitHub Discussions](https://github.com/fastapi/fastapi/discussions/new?category=questions), vous avez bien plus de chances de recevoir de l'aide par les [Experts FastAPI](fastapi-people.md#fastapi-experts).
 
 Utilisez le chat uniquement pour d'autres conversations gĂ©nĂ©rales.
 
@@ -243,13 +243,13 @@ Gardez Ă  l'esprit que, comme les chats permettent une Â« conversation libre Â»,
 
 Sur GitHub, le modĂšle vous guidera pour rĂ©diger la bonne question afin que vous puissiez plus facilement obtenir une bonne rĂ©ponse, ou mĂȘme rĂ©soudre le problĂšme vous‑mĂȘme avant de demander. Et sur GitHub, je peux m'assurer de toujours tout rĂ©pondre, mĂȘme si cela prend du temps. Je ne peux pas personnellement faire cela avec les systĂšmes de chat. đŸ˜…
 
-Les conversations dans les systĂšmes de chat ne sont pas non plus aussi facilement recherchables que sur GitHub, donc les questions et rĂ©ponses peuvent se perdre dans la conversation. Et seules celles sur GitHub comptent pour devenir un [Expert FastAPI](fastapi-people.md#fastapi-experts){.internal-link target=_blank}, vous aurez donc trĂšs probablement plus d'attention sur GitHub.
+Les conversations dans les systĂšmes de chat ne sont pas non plus aussi facilement recherchables que sur GitHub, donc les questions et rĂ©ponses peuvent se perdre dans la conversation. Et seules celles sur GitHub comptent pour devenir un [Expert FastAPI](fastapi-people.md#fastapi-experts), vous aurez donc trĂšs probablement plus d'attention sur GitHub.
 
 D'un autre cĂŽtĂ©, il y a des milliers d'utilisateurs dans les systĂšmes de chat, il y a donc de fortes chances que vous trouviez presque toujours quelqu'un avec qui parler. đŸ˜„
 
 ## Sponsoriser l'auteur { #sponsor-the-author }
 
-Si votre **produit/entreprise** dĂ©pend de **FastAPI** ou y est liĂ© et que vous souhaitez atteindre ses utilisateurs, vous pouvez sponsoriser l'auteur (moi) via <a href="https://github.com/sponsors/tiangolo" class="external-link" target="_blank">GitHub sponsors</a>. Selon le niveau, vous pourriez obtenir des avantages supplĂ©mentaires, comme un badge dans la documentation. đŸŽ
+Si votre **produit/entreprise** dĂ©pend de **FastAPI** ou y est liĂ© et que vous souhaitez atteindre ses utilisateurs, vous pouvez sponsoriser l'auteur (moi) via [GitHub sponsors](https://github.com/sponsors/tiangolo). Selon le niveau, vous pourriez obtenir des avantages supplĂ©mentaires, comme un badge dans les documents. đŸŽ
 
 ---
 
index 300f2e0f5cb76555755fb27133943ae6464d964f..6cd530c3f5c99901a203b52973779351f37634b3 100644 (file)
@@ -1,6 +1,6 @@
 # Histoire, conception et avenir { #history-design-and-future }
 
-Il y a quelque temps, <a href="https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920" class="external-link" target="_blank">un utilisateur de **FastAPI** a demandĂ©</a> :
+Il y a quelque temps, [un utilisateur de **FastAPI** a demandĂ©](https://github.com/fastapi/fastapi/issues/3#issuecomment-454956920) :
 
 > Quelle est l'histoire de ce projet ? Il semble ĂȘtre sorti de nulle part et est devenu gĂ©nial en quelques semaines [...].
 
@@ -14,7 +14,7 @@ Dans ce cadre, j'ai dĂ» Ă©tudier, tester et utiliser de nombreuses alternatives.
 
 L'histoire de **FastAPI** est en grande partie l'histoire de ses prĂ©dĂ©cesseurs.
 
-Comme dit dans la section [Alternatives](alternatives.md){.internal-link target=_blank} :
+Comme dit dans la section [Alternatives](alternatives.md) :
 
 <blockquote markdown="1">
 
@@ -44,7 +44,7 @@ Ensuite, j'ai passĂ© du temps Ă  concevoir l'« API Â» de dĂ©veloppeur que je vo
 
 J'ai testĂ© plusieurs idĂ©es dans les Ă©diteurs Python les plus populaires : PyCharm, VS Code, les Ă©diteurs basĂ©s sur Jedi.
 
-D'aprĂšs la derniĂšre <a href="https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools" class="external-link" target="_blank">EnquĂȘte DĂ©veloppeurs Python</a>, cela couvre environ 80% des utilisateurs.
+D'aprĂšs la derniĂšre [EnquĂȘte DĂ©veloppeurs Python](https://www.jetbrains.com/research/python-developers-survey-2018/#development-tools), cela couvre environ 80% des utilisateurs.
 
 Cela signifie que **FastAPI** a Ă©tĂ© spĂ©cifiquement testĂ© avec les Ă©diteurs utilisĂ©s par 80% des dĂ©veloppeurs Python. Et comme la plupart des autres Ă©diteurs ont tendance Ă  fonctionner de façon similaire, tous ses avantages devraient fonctionner pour pratiquement tous les Ă©diteurs.
 
@@ -54,11 +54,11 @@ Le tout de maniĂšre Ă  offrir la meilleure expĂ©rience de dĂ©veloppement Ă  tous
 
 ## Exigences { #requirements }
 
-AprĂšs avoir testĂ© plusieurs alternatives, j'ai dĂ©cidĂ© que j'allais utiliser <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">**Pydantic**</a> pour ses avantages.
+AprĂšs avoir testĂ© plusieurs alternatives, j'ai dĂ©cidĂ© que j'allais utiliser [**Pydantic**](https://docs.pydantic.dev/) pour ses avantages.
 
 J'y ai ensuite contribuĂ©, pour le rendre entiĂšrement compatible avec JSON Schema, pour supporter diffĂ©rentes maniĂšres de dĂ©finir les dĂ©clarations de contraintes, et pour amĂ©liorer le support des Ă©diteurs (vĂ©rifications de type, autocomplĂ©tion) sur la base des tests effectuĂ©s dans plusieurs Ă©diteurs.
 
-Pendant le dĂ©veloppement, j'ai Ă©galement contribuĂ© Ă  <a href="https://www.starlette.dev/" class="external-link" target="_blank">**Starlette**</a>, l'autre exigence clĂ©.
+Pendant le dĂ©veloppement, j'ai Ă©galement contribuĂ© Ă  [**Starlette**](https://www.starlette.dev/), l'autre exigence clĂ©.
 
 ## DĂ©veloppement { #development }
 
@@ -76,4 +76,4 @@ Mais il y a encore de nombreuses amĂ©liorations et fonctionnalitĂ©s Ă  venir.
 
 **FastAPI** a un grand avenir devant lui.
 
-Et [votre aide](help-fastapi.md){.internal-link target=_blank} est grandement apprĂ©ciĂ©e.
+Et [votre aide](help-fastapi.md) est grandement apprĂ©ciĂ©e.
index b8e87ee71eab45b0c2323b4e48374d79bbc1bc1d..8cbfe3d7bec2526135907763f4150cad13d0bad9 100644 (file)
@@ -2,7 +2,7 @@
 
 Avant FastAPI version `0.122.0`, lorsque les utilitaires de sĂ©curitĂ© intĂ©grĂ©s renvoyaient une erreur au client aprĂšs un Ă©chec d'authentification, ils utilisaient le code d'Ă©tat HTTP `403 Forbidden`.
 
-À partir de FastAPI version `0.122.0`, ils utilisent le code d'Ă©tat HTTP plus appropriĂ© `401 Unauthorized`, et renvoient un en-tĂȘte `WWW-Authenticate` pertinent dans la rĂ©ponse, conformĂ©ment aux spĂ©cifications HTTP, <a href="https://datatracker.ietf.org/doc/html/rfc7235#section-3.1" class="external-link" target="_blank">RFC 7235</a>, <a href="https://datatracker.ietf.org/doc/html/rfc9110#name-401-unauthorized" class="external-link" target="_blank">RFC 9110</a>.
+À partir de FastAPI version `0.122.0`, ils utilisent le code d'Ă©tat HTTP plus appropriĂ© `401 Unauthorized`, et renvoient un en-tĂȘte `WWW-Authenticate` pertinent dans la rĂ©ponse, conformĂ©ment aux spĂ©cifications HTTP, [RFC 7235](https://datatracker.ietf.org/doc/html/rfc7235#section-3.1), [RFC 9110](https://datatracker.ietf.org/doc/html/rfc9110#name-401-unauthorized).
 
 Mais si, pour une raison quelconque, vos clients dĂ©pendent de l'ancien comportement, vous pouvez y revenir en surchargeant la mĂ©thode `make_not_authenticated_error` dans vos classes de sĂ©curitĂ©.
 
index 61aa187cc5db14a215da1c551b6414e19248a8e0..dd72b392959e8014a20f29418ae0b5cd2f6c96ac 100644 (file)
@@ -2,15 +2,15 @@
 
 Si nĂ©cessaire, vous pouvez utiliser des paramĂštres et des variables d'environnement pour configurer OpenAPI de maniĂšre conditionnelle selon l'environnement, et mĂȘme le dĂ©sactiver complĂštement.
 
-## Ă€ propos de la sĂ©curitĂ©, des API et de la documentation { #about-security-apis-and-docs }
+## Ă€ propos de la sĂ©curitĂ©, des API et des documents { #about-security-apis-and-docs }
 
-Masquer vos interfaces utilisateur de la documentation en production ne devrait pas ĂȘtre la maniĂšre de protĂ©ger votre API.
+Masquer vos interfaces utilisateur des documents en production ne devrait pas ĂȘtre la maniĂšre de protĂ©ger votre API.
 
 Cela n'ajoute aucune sĂ©curitĂ© supplĂ©mentaire Ă  votre API, les *chemins d'accĂšs* resteront disponibles lĂ  oĂč ils se trouvent.
 
 S'il y a une faille de sĂ©curitĂ© dans votre code, elle existera toujours.
 
-Masquer la documentation rend simplement plus difficile la comprĂ©hension de la maniĂšre d'interagir avec votre API et pourrait aussi rendre son dĂ©bogage en production plus difficile. Cela pourrait ĂȘtre considĂ©rĂ© simplement comme une forme de <a href="https://en.wikipedia.org/wiki/Security_through_obscurity" class="external-link" target="_blank">SĂ©curitĂ© par l'obscuritĂ©</a>.
+Masquer les documents rend simplement plus difficile la comprĂ©hension de la maniĂšre d'interagir avec votre API et pourrait aussi rendre son dĂ©bogage en production plus difficile. Cela pourrait ĂȘtre considĂ©rĂ© simplement comme une forme de [SĂ©curitĂ© par l'obscuritĂ©](https://en.wikipedia.org/wiki/Security_through_obscurity).
 
 Si vous voulez sĂ©curiser votre API, il y a plusieurs meilleures approches possibles, par exemple :
 
@@ -21,11 +21,11 @@ Si vous voulez sĂ©curiser votre API, il y a plusieurs meilleures approches possi
 * Ajoutez des contrĂŽles d'autorisation plus granulaires avec des scopes OAuth2 lorsque nĂ©cessaire.
 * ... etc.
 
-NĂ©anmoins, vous pourriez avoir un cas d'utilisation trĂšs spĂ©cifique oĂč vous devez vraiment dĂ©sactiver la documentation de l'API pour un certain environnement (par exemple pour la production) ou selon des configurations provenant de variables d'environnement.
+NĂ©anmoins, vous pourriez avoir un cas d'utilisation trĂšs spĂ©cifique oĂč vous devez vraiment dĂ©sactiver les documents de l'API pour un certain environnement (par exemple pour la production) ou selon des configurations provenant de variables d'environnement.
 
 ## Configurer OpenAPI de maniĂšre conditionnelle avec des paramĂštres et des variables d'environnement { #conditional-openapi-from-settings-and-env-vars }
 
-Vous pouvez facilement utiliser les mĂȘmes paramĂštres Pydantic pour configurer votre OpenAPI gĂ©nĂ©rĂ© et les interfaces utilisateur de la documentation.
+Vous pouvez facilement utiliser les mĂȘmes paramĂštres Pydantic pour configurer votre OpenAPI gĂ©nĂ©rĂ© et les interfaces utilisateur des documents.
 
 Par exemple :
 
@@ -35,7 +35,7 @@ Ici nous dĂ©clarons le paramĂštre `openapi_url` avec la mĂȘme valeur par dĂ©faut
 
 Nous l'utilisons ensuite lors de la crĂ©ation de l'application `FastAPI`.
 
-Vous pouvez alors dĂ©sactiver OpenAPI (y compris les interfaces utilisateur de la documentation) en dĂ©finissant la variable d'environnement `OPENAPI_URL` sur la chaĂźne vide, comme ceci :
+Vous pouvez alors dĂ©sactiver OpenAPI (y compris les interfaces utilisateur des documents) en dĂ©finissant la variable d'environnement `OPENAPI_URL` sur la chaĂźne vide, comme ceci :
 
 <div class="termy">
 
index 73d0f00e81e3577916e4c60b8daea819f247bf73..34db055587241da7cb0fb53c1152e2fbb6d1b680 100644 (file)
@@ -1,6 +1,6 @@
 # Configurer Swagger UI { #configure-swagger-ui }
 
-Vous pouvez configurer des <a href="https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/" class="external-link" target="_blank">paramĂštres supplĂ©mentaires de Swagger UI</a>.
+Vous pouvez configurer des [paramĂštres supplĂ©mentaires de Swagger UI](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/).
 
 Pour les configurer, passez l'argument `swagger_ui_parameters` lors de la crĂ©ation de l'objet d'application `FastAPI()` ou Ă  la fonction `get_swagger_ui_html()`.
 
@@ -50,7 +50,7 @@ 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 la <a href="https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/" class="external-link" target="_blank">documentation officielle des paramĂštres de Swagger UI</a>.
+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 }
 
index d239a9696aae1590e743ec4d096fa5b3bb5da53b..339b806c30a413d318116c2adab35282c6d6ee74 100644 (file)
@@ -54,7 +54,7 @@ Maintenant, pour pouvoir vĂ©rifier que tout fonctionne, crĂ©ez un chemin d'accĂš
 
 ### Tester { #test-it }
 
-Vous devriez maintenant pouvoir aller Ă  vos docs sur <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>, puis recharger la page : elle chargera ces ressources depuis le nouveau CDN.
+Vous devriez maintenant pouvoir aller Ă  vos docs sur [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs), puis recharger la page : elle chargera ces ressources depuis le nouveau CDN.
 
 ## HĂ©berger en propre JavaScript et CSS pour les docs { #self-hosting-javascript-and-css-for-docs }
 
@@ -93,12 +93,12 @@ Vous pouvez probablement cliquer avec le bouton droit sur chaque lien et choisir
 
 **Swagger UI** utilise les fichiers :
 
-- <a href="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js" class="external-link" target="_blank">`swagger-ui-bundle.js`</a>
-- <a href="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css" class="external-link" target="_blank">`swagger-ui.css`</a>
+- [`swagger-ui-bundle.js`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js)
+- [`swagger-ui.css`](https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css)
 
 Et **ReDoc** utilise le fichier :
 
-- <a href="https://cdn.jsdelivr.net/npm/redoc@2/bundles/redoc.standalone.js" class="external-link" target="_blank">`redoc.standalone.js`</a>
+- [`redoc.standalone.js`](https://cdn.jsdelivr.net/npm/redoc@2/bundles/redoc.standalone.js)
 
 AprĂšs cela, votre structure de fichiers pourrait ressembler Ă  :
 
@@ -122,7 +122,7 @@ AprĂšs cela, votre structure de fichiers pourrait ressembler Ă  :
 
 ### Tester les fichiers statiques { #test-the-static-files }
 
-DĂ©marrez votre application et rendez‑vous sur <a href="http://127.0.0.1:8000/static/redoc.standalone.js" class="external-link" target="_blank">http://127.0.0.1:8000/static/redoc.standalone.js</a>.
+DĂ©marrez votre application et rendez‑vous sur [http://127.0.0.1:8000/static/redoc.standalone.js](http://127.0.0.1:8000/static/redoc.standalone.js).
 
 Vous devriez voir un trĂšs long fichier JavaScript pour **ReDoc**.
 
@@ -180,6 +180,6 @@ Maintenant, pour pouvoir vĂ©rifier que tout fonctionne, crĂ©ez un chemin d'accĂš
 
 ### Tester l’UI avec des fichiers statiques { #test-static-files-ui }
 
-Vous devriez maintenant pouvoir couper votre Wi‑Fi, aller Ă  vos docs sur <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> et recharger la page.
+Vous devriez maintenant pouvoir couper votre Wi‑Fi, aller Ă  vos docs sur [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) et recharger la page.
 
 Et mĂȘme sans Internet, vous pourrez voir la documentation de votre API et interagir avec elle.
index 506187d9f6857e2a74d48465188473938c9e00e6..4acb6464f84a5709ef1d3586944510e822b63ee8 100644 (file)
@@ -18,7 +18,7 @@ Si vous dĂ©butez avec **FastAPI**, vous pouvez ignorer cette section.
 
 Voici quelques cas d'utilisation :
 
-* Convertir des corps de requĂȘte non JSON en JSON (par exemple <a href="https://msgpack.org/index.html" class="external-link" target="_blank">`msgpack`</a>).
+* Convertir des corps de requĂȘte non JSON en JSON (par exemple [`msgpack`](https://msgpack.org/index.html)).
 * DĂ©compresser des corps de requĂȘte compressĂ©s en gzip.
 * Journaliser automatiquement tous les corps de requĂȘte.
 
@@ -32,7 +32,7 @@ Et une sous-classe d'`APIRoute` pour utiliser cette classe de requĂȘte personnal
 
 /// tip | Astuce
 
-Il s'agit d'un exemple simplifiĂ© pour montrer le fonctionnement ; si vous avez besoin de la prise en charge de Gzip, vous pouvez utiliser le [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware){.internal-link target=_blank} fourni.
+Il s'agit d'un exemple simplifiĂ© pour montrer le fonctionnement ; si vous avez besoin de la prise en charge de Gzip, vous pouvez utiliser le [`GzipMiddleware`](../advanced/middleware.md#gzipmiddleware) fourni.
 
 ///
 
@@ -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 <a href="https://www.starlette.dev/requests/" class="external-link" target="_blank">la documentation de Starlette sur les requĂȘtes</a>.
+Pour en savoir plus sur `Request`, consultez [la documentation de Starlette sur les requĂȘtes](https://www.starlette.dev/requests/).
 
 ///
 
@@ -82,7 +82,7 @@ Mais grĂące Ă  nos modifications dans `GzipRequest.body`, le corps de la requĂȘt
 
 /// tip | Astuce
 
-Pour rĂ©soudre ce mĂȘme problĂšme, il est probablement beaucoup plus simple d'utiliser `body` dans un gestionnaire personnalisĂ© pour `RequestValidationError` ([GĂ©rer les erreurs](../tutorial/handling-errors.md#use-the-requestvalidationerror-body){.internal-link target=_blank}).
+Pour rĂ©soudre ce mĂȘme problĂšme, il est probablement beaucoup plus simple d'utiliser `body` dans un gestionnaire personnalisĂ© pour `RequestValidationError` ([GĂ©rer les erreurs](../tutorial/handling-errors.md#use-the-requestvalidationerror-body)).
 
 Mais cet exemple reste valable et montre comment interagir avec les composants internes.
 
index 1c540ea6c7ceeb14738b27e4258ad0df0225a1f6..bdf4eeba93f19a73e032bdae262618377a15ea34 100644 (file)
@@ -37,7 +37,7 @@ Le paramĂštre `summary` est disponible Ă  partir d'OpenAPI 3.1.0, pris en charge
 
 En vous appuyant sur les informations ci-dessus, vous pouvez utiliser la mĂȘme fonction utilitaire pour gĂ©nĂ©rer le schĂ©ma OpenAPI et remplacer chaque partie dont vous avez besoin.
 
-Par exemple, ajoutons <a href="https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-logo" class="external-link" target="_blank">l’extension OpenAPI de ReDoc pour inclure un logo personnalisĂ©</a>.
+Par exemple, ajoutons [l’extension OpenAPI de ReDoc pour inclure un logo personnalisĂ©](https://github.com/Rebilly/ReDoc/blob/master/docs/redoc-vendor-extensions.md#x-logo).
 
 ### **FastAPI** normal { #normal-fastapi }
 
@@ -75,6 +75,6 @@ Vous pouvez maintenant remplacer la mĂ©thode `.openapi()` par votre nouvelle fon
 
 ### VĂ©rifier { #check-it }
 
-Une fois que vous allez sur <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>, vous verrez que vous utilisez votre logo personnalisĂ© (dans cet exemple, le logo de **FastAPI**) :
+Une fois que vous allez sur [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc), vous verrez que vous utilisez votre logo personnalisĂ© (dans cet exemple, le logo de **FastAPI**) :
 
 <img src="/img/tutorial/extending-openapi/image01.png">
index 09d4498aca7935f062785a7cad029a1cb1d2b18d..93ebf8953a34cd0370c06a928fc116c9973ea41f 100644 (file)
@@ -1,39 +1,43 @@
 # GĂ©nĂ©ral - Guides pratiques - Recettes { #general-how-to-recipes }
 
-Voici plusieurs renvois vers d'autres endroits de la documentation, pour des questions gĂ©nĂ©rales ou frĂ©quentes.
+Voici plusieurs renvois vers d'autres endroits dans les documents, pour des questions gĂ©nĂ©rales ou frĂ©quentes.
 
 ## Filtrer des donnĂ©es - SĂ©curitĂ© { #filter-data-security }
 
-Pour vous assurer que vous ne renvoyez pas plus de donnĂ©es que nĂ©cessaire, lisez la documentation [Tutoriel - ModĂšle de rĂ©ponse - Type de retour](../tutorial/response-model.md){.internal-link target=_blank}.
+Pour vous assurer que vous ne renvoyez pas plus de donnĂ©es que nĂ©cessaire, lisez les documents [Tutoriel - ModĂšle de rĂ©ponse - Type de retour](../tutorial/response-model.md).
+
+## Optimiser la performance des rĂ©ponses - ModĂšle de rĂ©ponse - Type de retour { #optimize-response-performance-response-model-return-type }
+
+Pour optimiser la performance lors du renvoi de donnĂ©es JSON, utilisez un type de retour ou un modĂšle de rĂ©ponse ; de cette façon, Pydantic prendra en charge la sĂ©rialisation en JSON cĂŽtĂ© Rust, sans passer par Python. Pour en savoir plus, lisez les documents [Tutoriel - ModĂšle de rĂ©ponse - Type de retour](../tutorial/response-model.md).
 
 ## Ă‰tiquettes de documentation - OpenAPI { #documentation-tags-openapi }
 
-Pour ajouter des Ă©tiquettes Ă  vos *chemins d'accĂšs* et les regrouper dans l'interface utilisateur de la documentation, lisez la documentation [Tutoriel - Configurations de chemin d'accĂšs - Tags](../tutorial/path-operation-configuration.md#tags){.internal-link target=_blank}.
+Pour ajouter des Ă©tiquettes Ă  vos *chemins d'accĂšs* et les regrouper dans l'interface utilisateur de la documentation, lisez les documents [Tutoriel - Configurations de chemin d'accĂšs - Tags](../tutorial/path-operation-configuration.md#tags).
 
 ## RĂ©sumĂ© et description de la documentation - OpenAPI { #documentation-summary-and-description-openapi }
 
-Pour ajouter un rĂ©sumĂ© et une description Ă  vos *chemins d'accĂšs* et les afficher dans l'interface utilisateur de la documentation, lisez la documentation [Tutoriel - Configurations de chemin d'accĂšs - RĂ©sumĂ© et description](../tutorial/path-operation-configuration.md#summary-and-description){.internal-link target=_blank}.
+Pour ajouter un rĂ©sumĂ© et une description Ă  vos *chemins d'accĂšs* et les afficher dans l'interface utilisateur de la documentation, lisez les documents [Tutoriel - Configurations de chemin d'accĂšs - RĂ©sumĂ© et description](../tutorial/path-operation-configuration.md#summary-and-description).
 
 ## Description de la rĂ©ponse dans la documentation - OpenAPI { #documentation-response-description-openapi }
 
-Pour dĂ©finir la description de la rĂ©ponse, affichĂ©e dans l'interface utilisateur de la documentation, lisez la documentation [Tutoriel - Configurations de chemin d'accĂšs - Description de la rĂ©ponse](../tutorial/path-operation-configuration.md#response-description){.internal-link target=_blank}.
+Pour dĂ©finir la description de la rĂ©ponse, affichĂ©e dans l'interface utilisateur de la documentation, lisez les documents [Tutoriel - Configurations de chemin d'accĂšs - Description de la rĂ©ponse](../tutorial/path-operation-configuration.md#response-description).
 
 ## DĂ©prĂ©cier un *chemin d'accĂšs* dans la documentation - OpenAPI { #documentation-deprecate-a-path-operation-openapi }
 
-Pour dĂ©prĂ©cier un *chemin d'accĂšs* et l'indiquer dans l'interface utilisateur de la documentation, lisez la documentation [Tutoriel - Configurations de chemin d'accĂšs - DĂ©prĂ©cier un chemin d'accĂšs](../tutorial/path-operation-configuration.md#deprecate-a-path-operation){.internal-link target=_blank}.
+Pour dĂ©prĂ©cier un *chemin d'accĂšs* et l'indiquer dans l'interface utilisateur de la documentation, lisez les documents [Tutoriel - Configurations de chemin d'accĂšs - DĂ©prĂ©ciation](../tutorial/path-operation-configuration.md#deprecate-a-path-operation).
 
 ## Convertir n'importe quelles donnĂ©es au format compatible JSON { #convert-any-data-to-json-compatible }
 
-Pour convertir des donnĂ©es vers un format compatible JSON, lisez la documentation [Tutoriel - Encodeur compatible JSON](../tutorial/encoder.md){.internal-link target=_blank}.
+Pour convertir des donnĂ©es vers un format compatible JSON, lisez les documents [Tutoriel - Encodeur compatible JSON](../tutorial/encoder.md).
 
 ## MĂ©tadonnĂ©es OpenAPI - Documentation { #openapi-metadata-docs }
 
-Pour ajouter des mĂ©tadonnĂ©es Ă  votre schĂ©ma OpenAPI, y compris une licence, une version, un contact, etc., lisez la documentation [Tutoriel - MĂ©tadonnĂ©es et URLs de la documentation](../tutorial/metadata.md){.internal-link target=_blank}.
+Pour ajouter des mĂ©tadonnĂ©es Ă  votre schĂ©ma OpenAPI, y compris une licence, une version, un contact, etc., lisez les documents [Tutoriel - MĂ©tadonnĂ©es et URLs de la documentation](../tutorial/metadata.md).
 
 ## URL OpenAPI personnalisĂ©e { #openapi-custom-url }
 
-Pour personnaliser l'URL OpenAPI (ou la supprimer), lisez la documentation [Tutoriel - MĂ©tadonnĂ©es et URLs de la documentation](../tutorial/metadata.md#openapi-url){.internal-link target=_blank}.
+Pour personnaliser l'URL OpenAPI (ou la supprimer), lisez les documents [Tutoriel - MĂ©tadonnĂ©es et URLs de la documentation](../tutorial/metadata.md#openapi-url).
 
 ## URL de la documentation OpenAPI { #openapi-docs-urls }
 
-Pour mettre Ă  jour les URL utilisĂ©es pour les interfaces utilisateur de documentation gĂ©nĂ©rĂ©es automatiquement, lisez la documentation [Tutoriel - MĂ©tadonnĂ©es et URLs de la documentation](../tutorial/metadata.md#docs-urls){.internal-link target=_blank}.
+Pour mettre Ă  jour les URL utilisĂ©es pour les interfaces utilisateur de documentation gĂ©nĂ©rĂ©es automatiquement, lisez les documents [Tutoriel - MĂ©tadonnĂ©es et URLs de la documentation](../tutorial/metadata.md#docs-urls).
index 59cd1590f34432bad1c1e8d2b365fc133128ba5a..912608a9814845d057c056341c17246633969a07 100644 (file)
@@ -18,18 +18,18 @@ 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** :
 
-* <a href="https://strawberry.rocks/" class="external-link" target="_blank">Strawberry</a> đŸ“
-    * Avec <a href="https://strawberry.rocks/docs/integrations/fastapi" class="external-link" target="_blank">la documentation pour FastAPI</a>
-* <a href="https://ariadnegraphql.org/" class="external-link" target="_blank">Ariadne</a>
-    * Avec <a href="https://ariadnegraphql.org/docs/fastapi-integration" class="external-link" target="_blank">la documentation pour FastAPI</a>
-* <a href="https://tartiflette.io/" class="external-link" target="_blank">Tartiflette</a>
-    * Avec <a href="https://tartiflette.github.io/tartiflette-asgi/" class="external-link" target="_blank">Tartiflette ASGI</a> pour fournir l'intĂ©gration ASGI
-* <a href="https://graphene-python.org/" class="external-link" target="_blank">Graphene</a>
-    * Avec <a href="https://github.com/ciscorn/starlette-graphene3" class="external-link" target="_blank">starlette-graphene3</a>
+* [Strawberry](https://strawberry.rocks/) đŸ“
+    * Avec [la documentation pour FastAPI](https://strawberry.rocks/docs/integrations/fastapi)
+* [Ariadne](https://ariadnegraphql.org/)
+    * Avec [la documentation 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/)
+    * Avec [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3)
 
 ## GraphQL avec Strawberry { #graphql-with-strawberry }
 
-Si vous avez besoin ou souhaitez travailler avec **GraphQL**, <a href="https://strawberry.rocks/" class="external-link" target="_blank">**Strawberry**</a> est la bibliothĂšque **recommandĂ©e** car sa conception est la plus proche de celle de **FastAPI**, tout est basĂ© sur des **annotations de type**.
+Si vous avez besoin ou souhaitez travailler avec **GraphQL**, [**Strawberry**](https://strawberry.rocks/) est la bibliothĂšque **recommandĂ©e** car sa conception est la plus proche de celle de **FastAPI**, tout est basĂ© sur des **annotations de type**.
 
 Selon votre cas d'utilisation, vous pourriez prĂ©fĂ©rer une autre bibliothĂšque, mais si vous me le demandiez, je vous suggĂ©rerais probablement d'essayer **Strawberry**.
 
@@ -37,24 +37,24 @@ Voici un petit aperçu de la maniĂšre dont vous pouvez intĂ©grer Strawberry avec
 
 {* ../../docs_src/graphql_/tutorial001_py310.py hl[3,22,25] *}
 
-Vous pouvez en apprendre davantage sur Strawberry dans la <a href="https://strawberry.rocks/" class="external-link" target="_blank">documentation de Strawberry</a>.
+Vous pouvez en apprendre davantage sur Strawberry dans la [documentation de Strawberry](https://strawberry.rocks/).
 
-Et Ă©galement la documentation sur <a href="https://strawberry.rocks/docs/integrations/fastapi" class="external-link" target="_blank">Strawberry avec FastAPI</a>.
+Et Ă©galement la documentation sur [Strawberry avec FastAPI](https://strawberry.rocks/docs/integrations/fastapi).
 
 ## Ancien `GraphQLApp` de Starlette { #older-graphqlapp-from-starlette }
 
-Les versions prĂ©cĂ©dentes de Starlette incluaient une classe `GraphQLApp` pour s'intĂ©grer Ă  <a href="https://graphene-python.org/" class="external-link" target="_blank">Graphene</a>.
+Les versions prĂ©cĂ©dentes de Starlette incluaient une classe `GraphQLApp` pour s'intĂ©grer Ă  [Graphene](https://graphene-python.org/).
 
-Elle a Ă©tĂ© dĂ©prĂ©ciĂ©e dans Starlette, mais si vous avez du code qui l'utilisait, vous pouvez facilement **migrer** vers <a href="https://github.com/ciscorn/starlette-graphene3" class="external-link" target="_blank">starlette-graphene3</a>, qui couvre le mĂȘme cas d'utilisation et propose une **interface presque identique**.
+Elle a Ă©tĂ© dĂ©prĂ©ciĂ©e dans Starlette, mais si vous avez du code qui l'utilisait, vous pouvez facilement **migrer** vers [starlette-graphene3](https://github.com/ciscorn/starlette-graphene3), qui couvre le mĂȘme cas d'utilisation et propose une **interface presque identique**.
 
 /// tip | Astuce
 
-Si vous avez besoin de GraphQL, je vous recommande tout de mĂȘme de regarder <a href="https://strawberry.rocks/" class="external-link" target="_blank">Strawberry</a>, car il est basĂ© sur des annotations de type plutĂŽt que sur des classes et types personnalisĂ©s.
+Si vous avez besoin de GraphQL, je vous recommande tout de mĂȘme de regarder [Strawberry](https://strawberry.rocks/), car il est basĂ© sur des annotations de type plutĂŽt que sur des classes et types personnalisĂ©s.
 
 ///
 
 ## En savoir plus { #learn-more }
 
-Vous pouvez en apprendre davantage sur **GraphQL** dans la <a href="https://graphql.org/" class="external-link" target="_blank">documentation officielle de GraphQL</a>.
+Vous pouvez en apprendre davantage sur **GraphQL** dans la [documentation officielle de GraphQL](https://graphql.org/).
 
 Vous pouvez Ă©galement en lire davantage sur chacune des bibliothĂšques dĂ©crites ci-dessus via leurs liens.
index 03736fa43fee331a45be40390a2fdb0a62f98f29..62e7d0457255afbb943cf4451a622c0cc4fabbcb 100644 (file)
@@ -8,6 +8,6 @@ Si quelque chose vous paraĂźt intĂ©ressant et utile pour votre projet, allez-y e
 
 /// tip | Astuce
 
-Si vous voulez **apprendre FastAPI** de façon structurĂ©e (recommandĂ©), allez lire le [Tutoriel - Guide utilisateur](../tutorial/index.md){.internal-link target=_blank} chapitre par chapitre Ă  la place.
+Si vous voulez **apprendre FastAPI** de façon structurĂ©e (recommandĂ©), allez lire le [Tutoriel - Guide utilisateur](../tutorial/index.md) chapitre par chapitre Ă  la place.
 
 ///
index 681cf697bb83a3fa7ef4d73099241007f79ae372..99d68ba817fe1c608301cec0d8149af85430696e 100644 (file)
@@ -10,19 +10,19 @@ FastAPI 0.126.0 a supprimĂ© la prise en charge de Pydantic v1, tout en continuan
 
 /// 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.
+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**.
 
-Cela inclut `pydantic.v1`, qui n'est plus pris en charge Ă  partir de Python 3.14.
+Cela inclut `pydantic.v1`, qui n'est plus pris en charge en Python 3.14 et versions ultĂ©rieures.
 
 Si vous souhaitez utiliser les derniĂšres fonctionnalitĂ©s de Python, vous devez vous assurer que vous utilisez Pydantic v2.
 
 ///
 
-Si vous avez une ancienne application FastAPI avec Pydantic v1, je vais vous montrer comment la migrer vers Pydantic v2, et les fonctionnalitĂ©s de FastAPI 0.119.0 pour vous aider Ă  une migration progressive.
+Si vous avez une ancienne application FastAPI avec Pydantic v1, je vais vous montrer comment la migrer vers Pydantic v2, et les **fonctionnalitĂ©s de FastAPI 0.119.0** pour vous aider Ă  une migration progressive.
 
 ## Guide officiel { #official-guide }
 
-Pydantic propose un <a href="https://docs.pydantic.dev/latest/migration/" class="external-link" target="_blank">Guide de migration</a> officiel de la v1 Ă  la v2.
+Pydantic propose un [Guide de migration](https://docs.pydantic.dev/latest/migration/) officiel de la v1 Ă  la v2.
 
 Il inclut aussi ce qui a changĂ©, comment les validations sont dĂ©sormais plus correctes et strictes, les piĂšges possibles, etc.
 
@@ -30,7 +30,7 @@ Vous pouvez le lire pour mieux comprendre ce qui a changĂ©.
 
 ## Tests { #tests }
 
-Vous devez vous assurer d'avoir des [tests](../tutorial/testing.md){.internal-link target=_blank} pour votre application et de les exĂ©cuter en intĂ©gration continue (CI).
+Vous devez vous assurer d'avoir des [tests](../tutorial/testing.md) pour votre application et de les exĂ©cuter en intĂ©gration continue (CI).
 
 De cette façon, vous pouvez effectuer la mise Ă  niveau et vous assurer que tout fonctionne toujours comme prĂ©vu.
 
@@ -38,7 +38,7 @@ De cette façon, vous pouvez effectuer la mise Ă  niveau et vous assurer que tou
 
 Dans de nombreux cas, lorsque vous utilisez des modĂšles Pydantic classiques sans personnalisations, vous pourrez automatiser la majeure partie du processus de migration de Pydantic v1 Ă  Pydantic v2.
 
-Vous pouvez utiliser <a href="https://github.com/pydantic/bump-pydantic" class="external-link" target="_blank">`bump-pydantic`</a> de la mĂȘme Ă©quipe Pydantic.
+Vous pouvez utiliser [`bump-pydantic`](https://github.com/pydantic/bump-pydantic) de la mĂȘme Ă©quipe Pydantic.
 
 Cet outil vous aidera Ă  modifier automatiquement la majeure partie du code Ă  adapter.
 
@@ -62,7 +62,7 @@ Vous pouvez donc mettre Ă  niveau Pydantic vers la derniĂšre version 2 et modifi
 
 /// warning | Alertes
 
-Gardez Ă  l'esprit que, puisque l'Ă©quipe Pydantic ne prend plus en charge Pydantic v1 dans les versions rĂ©centes de Python Ă  partir de Python 3.14, l'utilisation de `pydantic.v1` n'est pas non plus prise en charge Ă  partir de Python 3.14.
+Gardez Ă  l'esprit que, puisque l'Ă©quipe Pydantic ne prend plus en charge Pydantic v1 dans les versions rĂ©centes de Python Ă  partir de Python 3.14, l'utilisation de `pydantic.v1` n'est pas non plus prise en charge en Python 3.14 et versions ultĂ©rieures.
 
 ///
 
@@ -108,7 +108,7 @@ graph TB
     style V2Field fill:#f9fff3
 ```
 
-Dans certains cas, il est mĂȘme possible d'avoir des modĂšles Pydantic v1 et v2 dans le mĂȘme chemin d'accĂšs de votre application FastAPI :
+Dans certains cas, il est mĂȘme possible d'avoir des modĂšles Pydantic v1 et v2 dans le mĂȘme **chemin d'accĂšs** de votre application FastAPI :
 
 {* ../../docs_src/pydantic_v1_in_v2/tutorial003_an_py310.py hl[2:3,6,12,21:22] *}
 
index 3179bc4c6b9cfb46e01c37d63b7e0d926e9ebf10..be96bd2a22427c53f8f83f2871293053b301c6ff 100644 (file)
@@ -1,7 +1,7 @@
 # Tester une base de donnĂ©es { #testing-a-database }
 
-Vous pouvez Ă©tudier les bases de donnĂ©es, SQL et SQLModel dans <a href="https://sqlmodel.tiangolo.com/" class="external-link" target="_blank">les documents SQLModel</a>. đŸ€“
+Vous pouvez Ă©tudier les bases de donnĂ©es, SQL et SQLModel dans les [documents SQLModel](https://sqlmodel.tiangolo.com/). đŸ€“
 
-Il existe un mini <a href="https://sqlmodel.tiangolo.com/tutorial/fastapi/" class="external-link" target="_blank">tutoriel sur l'utilisation de SQLModel avec FastAPI</a>. âœš
+Il existe un mini [tutoriel sur l'utilisation de SQLModel avec FastAPI](https://sqlmodel.tiangolo.com/tutorial/fastapi/). âœš
 
-Ce tutoriel comprend une section sur <a href="https://sqlmodel.tiangolo.com/tutorial/fastapi/tests/" class="external-link" target="_blank">les tests des bases de donnĂ©es SQL</a>. đŸ˜Ž
+Ce tutoriel comprend une section sur les [tests des bases de donnĂ©es SQL](https://sqlmodel.tiangolo.com/tutorial/fastapi/tests/). đŸ˜Ž
index bf4446b940a33da58eca5fcfe5ee53db6b2504f5..3b297ffd3ce81c4efa3b397e3beed6d15935a226 100644 (file)
     <em>Framework FastAPI, haute performance, facile Ă  apprendre, rapide Ă  coder, prĂȘt pour la production</em>
 </p>
 <p align="center">
-<a href="https://github.com/fastapi/fastapi/actions?query=workflow%3ATest+event%3Apush+branch%3Amaster" target="_blank">
+<a href="https://github.com/fastapi/fastapi/actions?query=workflow%3ATest+event%3Apush+branch%3Amaster">
     <img src="https://github.com/fastapi/fastapi/actions/workflows/test.yml/badge.svg?event=push&branch=master" alt="Test">
 </a>
-<a href="https://coverage-badge.samuelcolvin.workers.dev/redirect/fastapi/fastapi" target="_blank">
+<a href="https://coverage-badge.samuelcolvin.workers.dev/redirect/fastapi/fastapi">
     <img src="https://coverage-badge.samuelcolvin.workers.dev/fastapi/fastapi.svg" alt="Coverage">
 </a>
-<a href="https://pypi.org/project/fastapi" target="_blank">
+<a href="https://pypi.org/project/fastapi">
     <img src="https://img.shields.io/pypi/v/fastapi?color=%2334D058&label=pypi%20package" alt="Package version">
 </a>
-<a href="https://pypi.org/project/fastapi" target="_blank">
+<a href="https://pypi.org/project/fastapi">
     <img src="https://img.shields.io/pypi/pyversions/fastapi.svg?color=%2334D058" alt="Supported Python versions">
 </a>
 </p>
 
 ---
 
-**Documentation** : <a href="https://fastapi.tiangolo.com/fr" target="_blank">https://fastapi.tiangolo.com/fr</a>
+**Documentation** : [https://fastapi.tiangolo.com/fr](https://fastapi.tiangolo.com/fr)
 
-**Code Source** : <a href="https://github.com/fastapi/fastapi" target="_blank">https://github.com/fastapi/fastapi</a>
+**Code Source** : [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi)
 
 ---
 
@@ -44,7 +44,7 @@ Les principales fonctionnalitĂ©s sont :
 * **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.
-* **BasĂ© sur des normes** : basĂ© sur (et entiĂšrement compatible avec) les standards ouverts pour les APIs : <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> (prĂ©cĂ©demment connu sous le nom de Swagger) et <a href="https://json-schema.org/" class="external-link" target="_blank">JSON Schema</a>.
+* **BasĂ© sur des normes** : basĂ© sur (et entiĂšrement compatible avec) les standards ouverts pour les APIs : [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (prĂ©cĂ©demment connu sous le nom de Swagger) et [JSON Schema](https://json-schema.org/).
 
 <small>* estimation basĂ©e sur des tests d'une Ă©quipe de dĂ©veloppement interne, construisant des applications de production.</small>
 
@@ -55,51 +55,51 @@ Les principales fonctionnalitĂ©s sont :
 ### Sponsor clĂ© de voĂ»te { #keystone-sponsor }
 
 {% for sponsor in sponsors.keystone -%}
-<a href="{{ sponsor.url }}" target="_blank" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
+<a href="{{ sponsor.url }}" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
 {% endfor -%}
 
 ### Sponsors Or et Argent { #gold-and-silver-sponsors }
 
 {% for sponsor in sponsors.gold -%}
-<a href="{{ sponsor.url }}" target="_blank" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
+<a href="{{ sponsor.url }}" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
 {% endfor -%}
 {%- for sponsor in sponsors.silver -%}
-<a href="{{ sponsor.url }}" target="_blank" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
+<a href="{{ sponsor.url }}" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
 {% endfor %}
 
 <!-- /sponsors -->
 
-<a href="https://fastapi.tiangolo.com/fr/fastapi-people/#sponsors" class="external-link" target="_blank">Autres sponsors</a>
+[Autres sponsors](https://fastapi.tiangolo.com/fr/fastapi-people/#sponsors)
 
 ## Opinions { #opinions }
 
 Â« _[...] J'utilise beaucoup **FastAPI** ces derniers temps. [...] Je prĂ©vois de l'utiliser dans mon Ă©quipe pour tous les **services de ML chez Microsoft**. Certains d'entre eux sont intĂ©grĂ©s au cƓur de **Windows** et Ă  certains produits **Office**._ Â»
 
-<div style="text-align: right; margin-right: 10%;">Kabir Khan - <strong>Microsoft</strong> <a href="https://github.com/fastapi/fastapi/pull/26" target="_blank"><small>(ref)</small></a></div>
+<div style="text-align: right; margin-right: 10%;">Kabir Khan - <strong>Microsoft</strong> <a href="https://github.com/fastapi/fastapi/pull/26"><small>(ref)</small></a></div>
 
 ---
 
 Â« _Nous avons adoptĂ© la bibliothĂšque **FastAPI** pour crĂ©er un serveur **REST** qui peut ĂȘtre interrogĂ© pour obtenir des **prĂ©dictions**. [pour Ludwig]_ Â»
 
-<div style="text-align: right; margin-right: 10%;">Piero Molino, Yaroslav Dudin, et Sai Sumanth Miryala - <strong>Uber</strong> <a href="https://eng.uber.com/ludwig-v0-2/" target="_blank"><small>(ref)</small></a></div>
+<div style="text-align: right; margin-right: 10%;">Piero Molino, Yaroslav Dudin, et Sai Sumanth Miryala - <strong>Uber</strong> <a href="https://eng.uber.com/ludwig-v0-2/"><small>(ref)</small></a></div>
 
 ---
 
 Â« _**Netflix** est heureux d'annoncer la publication en open source de notre framework d'orchestration de **gestion de crise** : **Dispatch** ! [construit avec **FastAPI**]_ Â»
 
-<div style="text-align: right; margin-right: 10%;">Kevin Glisson, Marc Vilanova, Forest Monsen - <strong>Netflix</strong> <a href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072" target="_blank"><small>(ref)</small></a></div>
+<div style="text-align: right; margin-right: 10%;">Kevin Glisson, Marc Vilanova, Forest Monsen - <strong>Netflix</strong> <a href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072"><small>(ref)</small></a></div>
 
 ---
 
 Â« _Je suis plus qu'enthousiaste Ă  propos de **FastAPI**. C'est tellement fun !_ Â»
 
-<div style="text-align: right; margin-right: 10%;">Brian Okken - <strong>Animateur du podcast <a href="https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855" target="_blank">Python Bytes</a></strong> <a href="https://x.com/brianokken/status/1112220079972728832" target="_blank"><small>(ref)</small></a></div>
+<div style="text-align: right; margin-right: 10%;">Brian Okken - <strong>Animateur du podcast [Python Bytes](https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855)</strong> <a href="https://x.com/brianokken/status/1112220079972728832"><small>(ref)</small></a></div>
 
 ---
 
 Â« _HonnĂȘtement, ce que vous avez construit a l'air super solide et soignĂ©. Ă€ bien des Ă©gards, c'est ce que je voulais que **Hug** soit â€” c'est vraiment inspirant de voir quelqu'un construire Ă§a._ Â»
 
-<div style="text-align: right; margin-right: 10%;">Timothy Crosley - <strong>CrĂ©ateur de <a href="https://github.com/hugapi/hug" target="_blank">Hug</a></strong> <a href="https://news.ycombinator.com/item?id=19455465" target="_blank"><small>(ref)</small></a></div>
+<div style="text-align: right; margin-right: 10%;">Timothy Crosley - <strong>CrĂ©ateur de [Hug](https://github.com/hugapi/hug)</strong> <a href="https://news.ycombinator.com/item?id=19455465"><small>(ref)</small></a></div>
 
 ---
 
@@ -107,27 +107,27 @@ Les principales fonctionnalitĂ©s sont :
 
 Â« _Nous sommes passĂ©s Ă  **FastAPI** pour nos **APIs** [...] Je pense que vous l'aimerez [...]_ Â»
 
-<div style="text-align: right; margin-right: 10%;">Ines Montani - Matthew Honnibal - <strong>Fondateurs de <a href="https://explosion.ai" target="_blank">Explosion AI</a> - CrĂ©ateurs de <a href="https://spacy.io" target="_blank">spaCy</a></strong> <a href="https://x.com/_inesmontani/status/1144173225322143744" target="_blank"><small>(ref)</small></a> - <a href="https://x.com/honnibal/status/1144031421859655680" target="_blank"><small>(ref)</small></a></div>
+<div style="text-align: right; margin-right: 10%;">Ines Montani - Matthew Honnibal - <strong>Fondateurs de [Explosion AI](https://explosion.ai) - CrĂ©ateurs de [spaCy](https://spacy.io)</strong> <a href="https://x.com/_inesmontani/status/1144173225322143744"><small>(ref)</small></a> - <a href="https://x.com/honnibal/status/1144031421859655680"><small>(ref)</small></a></div>
 
 ---
 
 Â« _Si quelqu'un cherche Ă  construire une API Python de production, je recommande vivement **FastAPI**. Il est **magnifiquement conçu**, **simple Ă  utiliser** et **hautement scalable**. Il est devenu un **composant clĂ©** de notre stratĂ©gie de dĂ©veloppement API-first et alimente de nombreuses automatisations et services tels que notre ingĂ©nieur TAC virtuel._ Â»
 
-<div style="text-align: right; margin-right: 10%;">Deon Pillsbury - <strong>Cisco</strong> <a href="https://www.linkedin.com/posts/deonpillsbury_cisco-cx-python-activity-6963242628536487936-trAp/" target="_blank"><small>(ref)</small></a></div>
+<div style="text-align: right; margin-right: 10%;">Deon Pillsbury - <strong>Cisco</strong> <a href="https://www.linkedin.com/posts/deonpillsbury_cisco-cx-python-activity-6963242628536487936-trAp/"><small>(ref)</small></a></div>
 
 ---
 
 ## Mini documentaire FastAPI { #fastapi-mini-documentary }
 
-Un <a href="https://www.youtube.com/watch?v=mpR8ngthqiE" class="external-link" target="_blank">mini documentaire FastAPI</a> est sorti fin 2025, vous pouvez le regarder en ligne :
+Un [mini documentaire FastAPI](https://www.youtube.com/watch?v=mpR8ngthqiE) est sorti fin 2025, vous pouvez le regarder en ligne :
 
-<a href="https://www.youtube.com/watch?v=mpR8ngthqiE" target="_blank"><img src="https://fastapi.tiangolo.com/img/fastapi-documentary.jpg" alt="FastAPI Mini Documentary"></a>
+<a href="https://www.youtube.com/watch?v=mpR8ngthqiE"><img src="https://fastapi.tiangolo.com/img/fastapi-documentary.jpg" alt="FastAPI Mini Documentary"></a>
 
 ## **Typer**, le FastAPI des CLIs { #typer-the-fastapi-of-clis }
 
-<a href="https://typer.tiangolo.com" target="_blank"><img src="https://typer.tiangolo.com/img/logo-margin/logo-margin-vector.svg" style="width: 20%;"></a>
+<a href="https://typer.tiangolo.com"><img src="https://typer.tiangolo.com/img/logo-margin/logo-margin-vector.svg" style="width: 20%;"></a>
 
-Si vous construisez une application <abbr title="Command Line Interface - Interface en ligne de commande">CLI</abbr> Ă  utiliser dans un terminal au lieu d'une API web, regardez <a href="https://typer.tiangolo.com/" class="external-link" target="_blank">**Typer**</a>.
+Si vous construisez une application <abbr title="Command Line Interface - Interface en ligne de commande">CLI</abbr> Ă  utiliser dans un terminal au lieu d'une API web, regardez [**Typer**](https://typer.tiangolo.com/).
 
 **Typer** est le petit frĂšre de FastAPI. Et il est destinĂ© Ă  ĂȘtre le **FastAPI des CLIs**. âŒšïž đŸš€
 
@@ -135,12 +135,12 @@ Si vous construisez une application <abbr title="Command Line Interface - Interf
 
 FastAPI repose sur les Ă©paules de gĂ©ants :
 
-* <a href="https://www.starlette.dev/" class="external-link" target="_blank">Starlette</a> pour les parties web.
-* <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a> pour les parties donnĂ©es.
+* [Starlette](https://www.starlette.dev/) pour les parties web.
+* [Pydantic](https://docs.pydantic.dev/) pour les parties donnĂ©es.
 
 ## Installation { #installation }
 
-CrĂ©ez et activez un <a href="https://fastapi.tiangolo.com/fr/virtual-environments/" class="external-link" target="_blank">environnement virtuel</a> puis installez FastAPI :
+CrĂ©ez et activez un [environnement virtuel](https://fastapi.tiangolo.com/fr/virtual-environments/) puis installez FastAPI :
 
 <div class="termy">
 
@@ -199,7 +199,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 <a href="https://fastapi.tiangolo.com/fr/async/#in-a-hurry" target="_blank">`async` et `await` dans la documentation</a>.
+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).
 
 </details>
 
@@ -210,7 +210,7 @@ Lancez le serveur avec :
 <div class="termy">
 
 ```console
-$ fastapi dev main.py
+$ fastapi dev
 
  â•­â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ FastAPI CLI - Development mode â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â•ź
  â”‚                                                     â”‚
@@ -235,19 +235,19 @@ INFO:     Application startup complete.
 </div>
 
 <details markdown="1">
-<summary>À propos de la commande <code>fastapi dev main.py</code>...</summary>
+<summary>À propos de la commande <code>fastapi dev</code>...</summary>
 
-La commande `fastapi dev` lit votre fichier `main.py`, dĂ©tecte l'application **FastAPI** qu'il contient et lance un serveur avec <a href="https://www.uvicorn.dev" class="external-link" target="_blank">Uvicorn</a>.
+La commande `fastapi dev` lit automatiquement votre fichier `main.py`, dĂ©tecte l'application **FastAPI** qu'il contient et lance un serveur avec [Uvicorn](https://www.uvicorn.dev).
 
 Par dĂ©faut, `fastapi dev` dĂ©marre avec le rechargement automatique activĂ© pour le dĂ©veloppement local.
 
-Vous pouvez en savoir plus dans la <a href="https://fastapi.tiangolo.com/fr/fastapi-cli/" target="_blank">documentation de la CLI FastAPI</a>.
+Vous pouvez en savoir plus dans la [documentation de la CLI FastAPI](https://fastapi.tiangolo.com/fr/fastapi-cli/).
 
 </details>
 
 ### VĂ©rifier { #check-it }
 
-Ouvrez votre navigateur Ă  l'adresse <a href="http://127.0.0.1:8000/items/5?q=somequery" class="external-link" target="_blank">http://127.0.0.1:8000/items/5?q=somequery</a>.
+Ouvrez votre navigateur Ă  l'adresse [http://127.0.0.1:8000/items/5?q=somequery](http://127.0.0.1:8000/items/5?q=somequery).
 
 Vous verrez la rĂ©ponse JSON :
 
@@ -264,17 +264,17 @@ Vous avez dĂ©jĂ  créé une API qui :
 
 ### Documentation API interactive { #interactive-api-docs }
 
-Maintenant, rendez-vous sur <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
+Maintenant, rendez-vous sur [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
 
-Vous verrez la documentation interactive automatique de l'API (fournie par <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a>) :
+Vous verrez la documentation interactive automatique de l'API (fournie par [Swagger UI](https://github.com/swagger-api/swagger-ui)) :
 
 ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)
 
 ### Documentation API alternative { #alternative-api-docs }
 
-Et maintenant, rendez-vous sur <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>.
+Et maintenant, rendez-vous sur [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).
 
-Vous verrez la documentation alternative automatique (fournie par <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>) :
+Vous verrez la documentation alternative automatique (fournie par [ReDoc](https://github.com/Rebilly/ReDoc)) :
 
 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)
 
@@ -316,7 +316,7 @@ Le serveur `fastapi dev` devrait se recharger automatiquement.
 
 ### Mettre Ă  niveau la documentation API interactive { #interactive-api-docs-upgrade }
 
-Maintenant, rendez-vous sur <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
+Maintenant, rendez-vous sur [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
 
 * La documentation interactive de l'API sera automatiquement mise Ă  jour, y compris le nouveau corps :
 
@@ -332,7 +332,7 @@ Maintenant, rendez-vous sur <a href="http://127.0.0.1:8000/docs" class="external
 
 ### Mettre Ă  niveau la documentation API alternative { #alternative-api-docs-upgrade }
 
-Et maintenant, rendez-vous sur <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>.
+Et maintenant, rendez-vous sur [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).
 
 * La documentation alternative reflĂštera Ă©galement le nouveau paramĂštre de requĂȘte et le nouveau corps :
 
@@ -442,7 +442,7 @@ Pour un exemple plus complet comprenant plus de fonctionnalitĂ©s, voir le <a hre
 * Un systĂšme **<dfn title="Ă©galement connu sous le nom de : composants, ressources, fournisseurs, services, injectables">d'injection de dĂ©pendances</dfn>** trĂšs puissant et facile Ă  utiliser.
 * SĂ©curitĂ© et authentification, y compris la prise en charge de **OAuth2** avec des **JWT tokens** et l'authentification **HTTP Basic**.
 * Des techniques plus avancĂ©es (mais tout aussi faciles) pour dĂ©clarer des **modĂšles JSON profondĂ©ment imbriquĂ©s** (grĂące Ă  Pydantic).
-* IntĂ©gration **GraphQL** avec <a href="https://strawberry.rocks" class="external-link" target="_blank">Strawberry</a> et d'autres bibliothĂšques.
+* IntĂ©gration **GraphQL** avec [Strawberry](https://strawberry.rocks) et d'autres bibliothĂšques.
 * De nombreuses fonctionnalitĂ©s supplĂ©mentaires (grĂące Ă  Starlette) comme :
     * **WebSockets**
     * des tests extrĂȘmement faciles basĂ©s sur HTTPX et `pytest`
@@ -452,24 +452,10 @@ Pour un exemple plus complet comprenant plus de fonctionnalitĂ©s, voir le <a hre
 
 ### DĂ©ployer votre application (optionnel) { #deploy-your-app-optional }
 
-Vous pouvez, si vous le souhaitez, dĂ©ployer votre application FastAPI sur <a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>, allez vous inscrire sur la liste d'attente si ce n'est pas dĂ©jĂ  fait. đŸš€
+Vous pouvez, si vous le souhaitez, dĂ©ployer votre application FastAPI sur [FastAPI Cloud](https://fastapicloud.com), allez vous inscrire sur la liste d'attente si ce n'est pas dĂ©jĂ  fait. đŸš€
 
 Si vous avez dĂ©jĂ  un compte **FastAPI Cloud** (nous vous avons invitĂ© depuis la liste d'attente đŸ˜‰), vous pouvez dĂ©ployer votre application avec une seule commande.
 
-Avant de dĂ©ployer, assurez-vous d'ĂȘtre connectĂ© :
-
-<div class="termy">
-
-```console
-$ fastapi login
-
-You are logged in to FastAPI Cloud đŸš€
-```
-
-</div>
-
-Puis dĂ©ployez votre application :
-
 <div class="termy">
 
 ```console
@@ -488,7 +474,7 @@ C'est tout ! Vous pouvez maintenant accĂ©der Ă  votre application Ă  cette URL.
 
 #### Ă€ propos de FastAPI Cloud { #about-fastapi-cloud }
 
-**<a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>** est construit par le mĂȘme auteur et la mĂȘme Ă©quipe derriĂšre **FastAPI**.
+**[FastAPI Cloud](https://fastapicloud.com)** est construit par le mĂȘme auteur et la mĂȘme Ă©quipe derriĂšre **FastAPI**.
 
 Il simplifie le processus de **construction**, de **dĂ©ploiement** et **d'accĂšs** Ă  une API avec un effort minimal.
 
@@ -504,9 +490,9 @@ Suivez les guides de votre fournisseur cloud pour y dĂ©ployer des applications F
 
 ## Performance { #performance }
 
-Les benchmarks TechEmpower indĂ©pendants montrent que les applications **FastAPI** s'exĂ©cutant sous Uvicorn sont <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">parmi les frameworks Python les plus rapides</a>, juste derriĂšre Starlette et Uvicorn eux-mĂȘmes (utilisĂ©s en interne par FastAPI). (*)
+Les benchmarks TechEmpower indĂ©pendants montrent que les applications **FastAPI** s'exĂ©cutant sous Uvicorn sont [parmi les frameworks Python les plus rapides](https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7), juste derriĂšre Starlette et Uvicorn eux-mĂȘmes (utilisĂ©s en interne par FastAPI). (*)
 
-Pour en savoir plus, consultez la section <a href="https://fastapi.tiangolo.com/fr/benchmarks/" class="internal-link" target="_blank">Benchmarks</a>.
+Pour en savoir plus, consultez la section [Benchmarks](https://fastapi.tiangolo.com/fr/benchmarks/).
 
 ## DĂ©pendances { #dependencies }
 
@@ -518,19 +504,19 @@ Lorsque vous installez FastAPI avec `pip install "fastapi[standard]"`, il inclut
 
 UtilisĂ©es par Pydantic :
 
-* <a href="https://github.com/JoshData/python-email-validator" target="_blank"><code>email-validator</code></a> - pour la validation des adresses e-mail.
+* [`email-validator`](https://github.com/JoshData/python-email-validator) - pour la validation des adresses e-mail.
 
 UtilisĂ©es par Starlette :
 
-* <a href="https://www.python-httpx.org" target="_blank"><code>httpx</code></a> - Obligatoire si vous souhaitez utiliser le `TestClient`.
-* <a href="https://jinja.palletsprojects.com" target="_blank"><code>jinja2</code></a> - Obligatoire si vous souhaitez utiliser la configuration de template par dĂ©faut.
-* <a href="https://github.com/Kludex/python-multipart" target="_blank"><code>python-multipart</code></a> - Obligatoire si vous souhaitez prendre en charge l’<dfn title="convertir la chaĂźne issue d'une requĂȘte HTTP en donnĂ©es Python">« parsing Â»</dfn> de formulaires avec `request.form()`.
+* [`httpx`](https://www.python-httpx.org) - Obligatoire si vous souhaitez utiliser le `TestClient`.
+* [`jinja2`](https://jinja.palletsprojects.com) - Obligatoire si vous souhaitez utiliser la configuration de template par dĂ©faut.
+* [`python-multipart`](https://github.com/Kludex/python-multipart) - Obligatoire si vous souhaitez prendre en charge l’<dfn title="convertir la chaĂźne issue d'une requĂȘte HTTP en donnĂ©es Python">« parsing Â»</dfn> de formulaires avec `request.form()`.
 
 UtilisĂ©es par FastAPI :
 
-* <a href="https://www.uvicorn.dev" target="_blank"><code>uvicorn</code></a> - pour le serveur qui charge et sert votre application. Cela inclut `uvicorn[standard]`, qui comprend certaines dĂ©pendances (par ex. `uvloop`) nĂ©cessaires pour une haute performance.
+* [`uvicorn`](https://www.uvicorn.dev) - pour le serveur qui charge et sert votre application. Cela inclut `uvicorn[standard]`, qui comprend certaines dĂ©pendances (par ex. `uvloop`) nĂ©cessaires pour une haute performance.
 * `fastapi-cli[standard]` - pour fournir la commande `fastapi`.
-    * Cela inclut `fastapi-cloud-cli`, qui vous permet de dĂ©ployer votre application FastAPI sur <a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>.
+    * Cela inclut `fastapi-cloud-cli`, qui vous permet de dĂ©ployer votre application FastAPI sur [FastAPI Cloud](https://fastapicloud.com).
 
 ### Sans les dĂ©pendances `standard` { #without-standard-dependencies }
 
@@ -546,13 +532,13 @@ Il existe des dĂ©pendances supplĂ©mentaires que vous pourriez vouloir installer.
 
 DĂ©pendances optionnelles supplĂ©mentaires pour Pydantic :
 
-* <a href="https://docs.pydantic.dev/latest/usage/pydantic_settings/" target="_blank"><code>pydantic-settings</code></a> - pour la gestion des paramĂštres.
-* <a href="https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/" target="_blank"><code>pydantic-extra-types</code></a> - pour des types supplĂ©mentaires Ă  utiliser avec Pydantic.
+* [`pydantic-settings`](https://docs.pydantic.dev/latest/usage/pydantic_settings/) - pour la gestion des paramĂštres.
+* [`pydantic-extra-types`](https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/) - pour des types supplĂ©mentaires Ă  utiliser avec Pydantic.
 
 DĂ©pendances optionnelles supplĂ©mentaires pour FastAPI :
 
-* <a href="https://github.com/ijl/orjson" target="_blank"><code>orjson</code></a> - Obligatoire si vous souhaitez utiliser `ORJSONResponse`.
-* <a href="https://github.com/esnme/ultrajson" target="_blank"><code>ujson</code></a> - Obligatoire si vous souhaitez utiliser `UJSONResponse`.
+* [`orjson`](https://github.com/ijl/orjson) - Obligatoire si vous souhaitez utiliser `ORJSONResponse`.
+* [`ujson`](https://github.com/esnme/ultrajson) - Obligatoire si vous souhaitez utiliser `UJSONResponse`.
 
 ## Licence { #license }
 
index f062ffecf5158f71c39e8b356026c5af1eefa984..e0636bfe55a9d5d21532113a7003e485fa90c607 100644 (file)
@@ -4,7 +4,7 @@ Les modĂšles, bien qu'ils soient gĂ©nĂ©ralement livrĂ©s avec une configuration s
 
 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.
 
-DĂ©pĂŽt GitHub : <a href="https://github.com/tiangolo/full-stack-fastapi-template" class="external-link" target="_blank">ModĂšle Full Stack FastAPI</a>
+DĂ©pĂŽt GitHub : [ModĂšle Full Stack FastAPI](https://github.com/tiangolo/full-stack-fastapi-template)
 
 ## ModĂšle Full Stack FastAPI - Pile technologique et fonctionnalitĂ©s { #full-stack-fastapi-template-technology-stack-and-features }
 
index 770f1514ac01104774a749dc620dfced433e1f1b..97230b7b925620d07bc9dbc8c8c61dcd8042ec7d 100644 (file)
@@ -172,7 +172,7 @@ Comme la liste est un type qui contient des types internes, mettez-les entre cro
 
 {* ../../docs_src/python_types/tutorial006_py310.py hl[1] *}
 
-/// info | Info
+/// info
 
 Ces types internes entre crochets sont appelĂ©s Â« paramĂštres de type Â».
 
@@ -269,7 +269,7 @@ Cela ne signifie pas Â« `one_person` est la **classe** appelĂ©e `Person` Â».
 
 ## ModĂšles Pydantic { #pydantic-models }
 
-<a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a> est une bibliothĂšque Python pour effectuer de la validation de donnĂ©es.
+[Pydantic](https://docs.pydantic.dev/) est une bibliothĂšque Python pour effectuer de la validation de donnĂ©es.
 
 Vous dĂ©clarez la Â« forme Â» de la donnĂ©e sous forme de classes avec des attributs.
 
@@ -283,15 +283,15 @@ Un exemple tirĂ© de la documentation officielle de Pydantic :
 
 {* ../../docs_src/python_types/tutorial011_py310.py *}
 
-/// info | Info
+/// info
 
-Pour en savoir plus Ă  propos de <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic, consultez sa documentation</a>.
+Pour en savoir plus Ă  propos de [Pydantic, consultez sa documentation](https://docs.pydantic.dev/).
 
 ///
 
 **FastAPI** est entiĂšrement basĂ© sur Pydantic.
 
-Vous verrez beaucoup plus de tout cela en pratique dans le [Tutoriel - Guide utilisateur](tutorial/index.md){.internal-link target=_blank}.
+Vous verrez beaucoup plus de tout cela en pratique dans le [Tutoriel - Guide utilisateur](tutorial/index.md).
 
 ## Annotations de type avec mĂ©tadonnĂ©es { #type-hints-with-metadata-annotations }
 
@@ -337,12 +337,12 @@ Avec **FastAPI**, vous dĂ©clarez des paramĂštres avec des annotations de type et
 * **Documenter** l'API avec OpenAPI :
     * ce qui est ensuite utilisĂ© par les interfaces utilisateur de documentation interactive automatiques.
 
-Tout cela peut sembler abstrait. Ne vous inquiĂ©tez pas. Vous verrez tout cela en action dans le [Tutoriel - Guide utilisateur](tutorial/index.md){.internal-link target=_blank}.
+Tout cela peut sembler abstrait. Ne vous inquiĂ©tez pas. Vous verrez tout cela en action dans le [Tutoriel - Guide utilisateur](tutorial/index.md).
 
 L'important est qu'en utilisant les types standards de Python, en un seul endroit (au lieu d'ajouter plus de classes, de dĂ©corateurs, etc.), **FastAPI** fera une grande partie du travail pour vous.
 
-/// info | Info
+/// info
 
-Si vous avez dĂ©jĂ  parcouru tout le tutoriel et ĂȘtes revenu pour en voir plus sur les types, une bonne ressource est <a href="https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html" class="external-link" target="_blank">l'« aide-mĂ©moire Â» de `mypy`</a>.
+Si vous avez dĂ©jĂ  parcouru tout le tutoriel et ĂȘtes revenu pour en voir plus sur les types, une bonne ressource est [l'« aide-mĂ©moire Â» de `mypy`](https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html).
 
 ///
index a8444ba27a70e2495abbcff85ad355ec2fbd67c5..c8f66e5258e366a2b92e9992c890341dba66415e 100644 (file)
@@ -61,7 +61,7 @@ Et ensuite une autre tĂąche d'arriĂšre-plan (gĂ©nĂ©rĂ©e dans la *fonction de che
 
 ## DĂ©tails techniques { #technical-details }
 
-La classe `BackgroundTasks` provient directement de <a href="https://www.starlette.dev/background/" class="external-link" target="_blank">`starlette.background`</a>.
+La classe `BackgroundTasks` provient directement de [`starlette.background`](https://www.starlette.dev/background/).
 
 Elle est importĂ©e/incluse directement dans **FastAPI** pour que vous puissiez l'importer depuis `fastapi` et Ă©viter d'importer accidentellement `BackgroundTask` (sans `s` Ă  la fin) depuis `starlette.background`.
 
@@ -69,11 +69,11 @@ En utilisant seulement `BackgroundTasks` (et non `BackgroundTask`), il est possi
 
 Il est tout de mĂȘme possible d'utiliser `BackgroundTask` seul dans **FastAPI**, mais dans ce cas il faut crĂ©er l'objet dans le code et renvoyer une `Response` Starlette l'incluant.
 
-Plus de dĂ©tails sont disponibles dans <a href="https://www.starlette.dev/background/" class="external-link" target="_blank">la documentation officielle de Starlette sur les tĂąches d'arriĂšre-plan</a>.
+Plus de dĂ©tails sont disponibles dans [la documentation officielle de Starlette sur les tĂąches d'arriĂšre-plan](https://www.starlette.dev/background/).
 
 ## Avertissement { #caveat }
 
-Si vous avez besoin de rĂ©aliser des traitements lourds en tĂąche d'arriĂšre-plan et que vous n'avez pas besoin que ces traitements aient lieu dans le mĂȘme process (par exemple, pas besoin de partager la mĂ©moire, les variables, etc.), il peut s'avĂ©rer profitable d'utiliser des outils plus importants tels que <a href="https://docs.celeryq.dev" class="external-link" target="_blank">Celery</a>.
+Si vous avez besoin de rĂ©aliser des traitements lourds en tĂąche d'arriĂšre-plan et que vous n'avez pas besoin que ces traitements aient lieu dans le mĂȘme process (par exemple, pas besoin de partager la mĂ©moire, les variables, etc.), il peut s'avĂ©rer profitable d'utiliser des outils plus importants tels que [Celery](https://docs.celeryq.dev).
 
 Ces outils nĂ©cessitent gĂ©nĂ©ralement des configurations plus complexes ainsi qu'un gestionnaire de queue de message, comme RabbitMQ ou Redis, mais ils permettent d'exĂ©cuter des tĂąches d'arriĂšre-plan dans diffĂ©rents process, et surtout, sur plusieurs serveurs.
 
index 06596223666a728eae9b8abdf419d71635641a83..82e204224c87a410f9b8e4f4c07e5971e549be7a 100644 (file)
@@ -123,7 +123,7 @@ Nous allons maintenant utiliser une dĂ©pendance simple pour lire un en-tĂȘte per
 
 Nous utilisons un en-tĂȘte inventĂ© pour simplifier cet exemple.
 
-Mais dans les cas rĂ©els, vous obtiendrez de meilleurs rĂ©sultats en utilisant les [utilitaires de sĂ©curitĂ©](security/index.md){.internal-link target=_blank} intĂ©grĂ©s.
+Mais dans les cas rĂ©els, vous obtiendrez de meilleurs rĂ©sultats en utilisant les [utilitaires de sĂ©curitĂ©](security/index.md) intĂ©grĂ©s.
 
 ///
 
@@ -169,7 +169,7 @@ Et nous pouvons ajouter une liste de `dependencies` qui seront ajoutĂ©es Ă  tous
 
 /// tip | Astuce
 
-Notez que, tout comme pour les [dĂ©pendances dans les dĂ©corateurs de *chemin d'accĂšs*](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}, aucune valeur ne sera transmise Ă  votre *fonction de chemin d'accĂšs*.
+Notez que, tout comme pour les [dĂ©pendances dans les dĂ©corateurs de *chemin d'accĂšs*](dependencies/dependencies-in-path-operation-decorators.md), aucune valeur ne sera transmise Ă  votre *fonction de chemin d'accĂšs*.
 
 ///
 
@@ -185,8 +185,8 @@ Le rĂ©sultat final est que les chemins d'item sont dĂ©sormais :
 * Ils incluront tous les `responses` prĂ©dĂ©finies.
 * Tous ces *chemins d'accĂšs* auront la liste des `dependencies` Ă©valuĂ©es/exĂ©cutĂ©es avant eux.
     * Si vous dĂ©clarez Ă©galement des dĂ©pendances dans un *chemin d'accĂšs* spĂ©cifique, **elles seront aussi exĂ©cutĂ©es**.
-    * Les dĂ©pendances du routeur sont exĂ©cutĂ©es en premier, puis les [`dependencies` dans le dĂ©corateur](dependencies/dependencies-in-path-operation-decorators.md){.internal-link target=_blank}, puis les dĂ©pendances des paramĂštres normaux.
-    * Vous pouvez Ă©galement ajouter des [`Security` dependencies avec des `scopes`](../advanced/security/oauth2-scopes.md){.internal-link target=_blank}.
+    * Les dĂ©pendances du routeur sont exĂ©cutĂ©es en premier, puis les [`dependencies` dans le dĂ©corateur](dependencies/dependencies-in-path-operation-decorators.md), puis les dĂ©pendances des paramĂštres normaux.
+    * Vous pouvez Ă©galement ajouter des [`Security` dependencies avec des `scopes`](../advanced/security/oauth2-scopes.md).
 
 /// tip | Astuce
 
@@ -303,7 +303,7 @@ Et comme la plupart de votre logique vivra dĂ©sormais dans son propre module, le
 
 Vous importez et crĂ©ez une classe `FastAPI` comme d'habitude.
 
-Et nous pouvons mĂȘme dĂ©clarer des [dĂ©pendances globales](dependencies/global-dependencies.md){.internal-link target=_blank} qui seront combinĂ©es avec les dĂ©pendances de chaque `APIRouter` :
+Et nous pouvons mĂȘme dĂ©clarer des [dĂ©pendances globales](dependencies/global-dependencies.md) qui seront combinĂ©es avec les dĂ©pendances de chaque `APIRouter` :
 
 {* ../../docs_src/bigger_applications/app_an_py310/main.py hl[1,3,7] title["app/main.py"] *}
 
@@ -353,7 +353,7 @@ La deuxiĂšme version est un Â« import absolu Â» :
 from app.routers import items, users
 ```
 
-Pour en savoir plus sur les Packages et Modules Python, lisez <a href="https://docs.python.org/3/tutorial/modules.html" class="external-link" target="_blank">la documentation officielle de Python sur les modules</a>.
+Pour en savoir plus sur les Packages et Modules Python, lisez [la documentation officielle de Python sur les modules](https://docs.python.org/3/tutorial/modules.html).
 
 ///
 
@@ -445,7 +445,7 @@ Ainsi, par exemple, d'autres projets pourraient utiliser le mĂȘme `APIRouter` av
 
 Nous pouvons Ă©galement ajouter des *chemins d'accĂšs* directement Ă  l'application `FastAPI`.
 
-Ici, nous le faisons... juste pour montrer que nous le pouvons đŸ€· :
+Ici, nous le faisons ... juste pour montrer que nous le pouvons đŸ€· :
 
 {* ../../docs_src/bigger_applications/app_an_py310/main.py hl[21:23] title["app/main.py"] *}
 
@@ -465,6 +465,37 @@ Comme nous ne pouvons pas simplement les isoler et les Â« monter Â» indĂ©pendamm
 
 ///
 
+## Configurer l'`entrypoint` dans `pyproject.toml` { #configure-the-entrypoint-in-pyproject-toml }
+
+Comme votre objet FastAPI `app` vit dans `app/main.py`, vous pouvez configurer l'`entrypoint` dans votre fichier `pyproject.toml` comme ceci :
+
+```toml
+[tool.fastapi]
+entrypoint = "app.main:app"
+```
+
+ce qui Ă©quivaut Ă  importer ainsi :
+
+```python
+from app.main import app
+```
+
+De cette façon, la commande `fastapi` saura oĂč trouver votre app.
+
+/// Note | Remarque
+
+Vous pourriez aussi passer le chemin Ă  la commande, comme :
+
+```console
+$ fastapi dev app/main.py
+```
+
+Mais vous devriez 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 }
 
 Maintenant, exĂ©cutez votre application :
@@ -472,14 +503,14 @@ Maintenant, exĂ©cutez votre application :
 <div class="termy">
 
 ```console
-$ fastapi dev app/main.py
+$ fastapi dev
 
 <span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
 ```
 
 </div>
 
-Et ouvrez les documents Ă  <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
+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 :
 
index dccfdb6c5dbbd1baad02617e4cae0731669f6a80..2d4064310dad99bf6ebc07fdb32e992db60452ae 100644 (file)
@@ -96,7 +96,7 @@ LĂ  encore, avec cette simple dĂ©claration, avec FastAPI vous obtenez :
 
 Outre les types singuliers normaux comme `str`, `int`, `float`, etc. vous pouvez utiliser des types singuliers plus complexes qui hĂ©ritent de `str`.
 
-Pour voir toutes les options dont vous disposez, consultez <a href="https://docs.pydantic.dev/latest/concepts/types/" class="external-link" target="_blank">l’aperçu des types de Pydantic</a>. Vous verrez quelques exemples au chapitre suivant.
+Pour voir toutes les options dont vous disposez, consultez [l’aperçu des types de Pydantic](https://docs.pydantic.dev/latest/concepts/types/). Vous verrez quelques exemples au chapitre suivant.
 
 Par exemple, comme dans le modĂšle `Image` nous avons un champ `url`, nous pouvons le dĂ©clarer comme instance de `HttpUrl` de Pydantic au lieu de `str` :
 
index 36ad12681c06927a72cc287c7dddb8dd024ec8e4..f036dd3c081f7992471b226815335c10fd7cdd04 100644 (file)
@@ -2,7 +2,7 @@
 
 ## Mettre Ă  jour en remplaçant avec `PUT` { #update-replacing-with-put }
 
-Pour mettre Ă  jour un Ă©lĂ©ment, vous pouvez utiliser l’opĂ©ration <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT" class="external-link" target="_blank">HTTP `PUT`</a>.
+Pour mettre Ă  jour un Ă©lĂ©ment, vous pouvez utiliser l’opĂ©ration [HTTP `PUT`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PUT).
 
 Vous pouvez utiliser le `jsonable_encoder` pour convertir les donnĂ©es d’entrĂ©e en donnĂ©es pouvant ĂȘtre stockĂ©es au format JSON (par exemple, avec une base de donnĂ©es NoSQL). Par exemple, convertir `datetime` en `str`.
 
@@ -24,11 +24,11 @@ Cela signifie que si vous souhaitez mettre Ă  jour l’élĂ©ment `bar` avec `PUT
 
 comme il n’inclut pas l’attribut dĂ©jĂ  enregistrĂ© Â« tax Â»: 20.2, le modĂšle d’entrĂ©e prendrait la valeur par dĂ©faut Â« tax Â»: 10.5.
 
-Et les donnĂ©es seraient enregistrĂ©es avec cette Â« nouvelle Â» `tax` de `10.5`.
+Et les donnĂ©es seraient enregistrĂ©es avec cette Â« nouvelle Â» Â« tax Â» de 10.5.
 
 ## Effectuer des mises Ă  jour partielles avec `PATCH` { #partial-updates-with-patch }
 
-Vous pouvez Ă©galement utiliser l’opĂ©ration <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH" class="external-link" target="_blank">HTTP `PATCH`</a> pour mettre Ă  jour des donnĂ©es de maniĂšre partielle.
+Vous pouvez Ă©galement utiliser l’opĂ©ration [HTTP `PATCH`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/PATCH) pour mettre Ă  jour des donnĂ©es de maniĂšre partielle.
 
 Cela signifie que vous pouvez n’envoyer que les donnĂ©es que vous souhaitez mettre Ă  jour, en laissant le reste intact.
 
@@ -95,6 +95,6 @@ Remarquez que le modĂšle d’entrĂ©e est toujours validĂ©.
 
 Ainsi, si vous souhaitez recevoir des mises Ă  jour partielles pouvant omettre tous les attributs, vous devez disposer d’un modĂšle avec tous les attributs marquĂ©s comme optionnels (avec des valeurs par dĂ©faut ou `None`).
 
-Pour distinguer les modĂšles avec toutes les valeurs optionnelles pour les mises Ă  jour et les modĂšles avec des valeurs requises pour la crĂ©ation, vous pouvez utiliser les idĂ©es dĂ©crites dans [ModĂšles supplĂ©mentaires](extra-models.md){.internal-link target=_blank}.
+Pour distinguer les modĂšles avec toutes les valeurs optionnelles pour les mises Ă  jour et les modĂšles avec des valeurs requises pour la crĂ©ation, vous pouvez utiliser les idĂ©es dĂ©crites dans [ModĂšles supplĂ©mentaires](extra-models.md).
 
 ///
index a8703e030d93538c0ea9d85483b9906ec6162cb7..6a94667982061897fab7f710627ed866ac20d4f1 100644 (file)
@@ -4,9 +4,9 @@ Quand vous avez besoin d'envoyer de la donnĂ©e depuis un client (comme un naviga
 
 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 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 <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a> en profitant de tous leurs avantages et fonctionnalitĂ©s.
+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.
 
 /// info
 
@@ -32,9 +32,9 @@ 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, cet attribut doit ĂȘtre renseignĂ© dans le corps de la requĂȘte. Utilisez `None` pour le rendre simplement optionnel.
+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 :
+Par exemple, le modĂšle ci-dessus dĂ©clare un JSON Â« `object` Â» (ou `dict` Python) tel que :
 
 ```JSON
 {
@@ -45,7 +45,7 @@ Par exemple, le modĂšle ci-dessus dĂ©clare un JSON Â«Â `object` » (ou `dict` P
 }
 ```
 
-... `description` et `tax` Ă©tant des attributs optionnels (avec `None` comme valeur par dĂ©faut), ce JSON Â«Â `object` » serait aussi valide :
+... `description` et `tax` Ă©tant des attributs optionnels (avec `None` comme valeur par dĂ©faut), ce JSON Â« `object` Â» serait aussi valide :
 
 ```JSON
 {
@@ -60,7 +60,7 @@ Pour l'ajouter Ă  votre *chemin d'accĂšs*, dĂ©clarez-le comme vous dĂ©clareriez
 
 {* ../../docs_src/body/tutorial001_py310.py hl[16] *}
 
-... et dĂ©clarez que son type est le modĂšle que vous avez créé : `Item`.
+... et dĂ©clarez que son type est le modĂšle que vous avez créé : `Item`.
 
 ## RĂ©sultats { #results }
 
@@ -72,7 +72,7 @@ En utilisant uniquement les dĂ©clarations de type Python, **FastAPI** rĂ©ussit 
     * Si la donnĂ©e est invalide, une erreur propre et claire sera renvoyĂ©e, indiquant exactement oĂč et quelle Ă©tait la donnĂ©e incorrecte.
 * 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 <a href="https://json-schema.org" class="external-link" target="_blank">JSON Schema</a> pour votre modĂšle ; vous pouvez Ă©galement les utiliser partout ailleurs si cela a du sens pour votre projet.
+* 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>.
 
 ## Documentation automatique { #automatic-docs }
@@ -101,21 +101,21 @@ Et cela a Ă©tĂ© rigoureusement testĂ© durant la phase de design, avant toute imp
 
 Des changements sur Pydantic ont mĂȘme Ă©tĂ© faits pour supporter cela.
 
-Les captures d'Ă©cran prĂ©cĂ©dentes ont Ă©tĂ© prises sur <a href="https://code.visualstudio.com" class="external-link" target="_blank">Visual Studio Code</a>.
+Les captures d'Ă©cran prĂ©cĂ©dentes ont Ă©tĂ© prises sur [Visual Studio Code](https://code.visualstudio.com).
 
-Mais vous auriez le mĂȘme support de l'Ă©diteur avec <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a> et la majoritĂ© des autres Ă©diteurs de code Python :
+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 :
 
 <img src="/img/tutorial/body/image05.png">
 
 /// tip | Astuce
 
-Si vous utilisez <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a> comme Ă©diteur, vous pouvez utiliser le plug-in <a href="https://github.com/koxudaxi/pydantic-pycharm-plugin/" class="external-link" target="_blank">Pydantic PyCharm Plugin</a>.
+Si vous utilisez [PyCharm](https://www.jetbrains.com/pycharm/) comme Ă©diteur, vous pouvez utiliser le plug-in [Pydantic PyCharm Plugin](https://github.com/koxudaxi/pydantic-pycharm-plugin/).
 
 Ce qui amĂ©liore le support pour les modĂšles Pydantic avec :
 
 * de l'autocomplĂ©tion
 * des vĂ©rifications de type
-* du Â«Â refactoring »
+* du Â« refactoring Â»
 * de la recherche
 * des inspections
 
@@ -161,4 +161,4 @@ Mais ajouter ces annotations de type permettra Ă  votre Ă©diteur de vous offrir
 
 ## Sans Pydantic { #without-pydantic }
 
-Si vous ne voulez pas utiliser des modĂšles Pydantic, vous pouvez aussi utiliser des paramĂštres de **Body**. Pour cela, allez voir la documentation sur [Corps de la requĂȘte - ParamĂštres multiples : Valeurs singuliĂšres dans le corps](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank}.
+Si vous ne voulez pas utiliser des modĂšles Pydantic, vous pouvez aussi utiliser des paramĂštres de **Body**. Pour cela, allez voir la documentation sur [Corps de la requĂȘte - ParamĂštres multiples : Valeurs singuliĂšres dans le corps](body-multiple-params.md#singular-values-in-body).
index 3ae7de07ca52b16bb7b583ff563d3abb2bc8e375..e534f2cd1ae8eb6c298d5d5f1c28a6fa681dc160 100644 (file)
@@ -1,6 +1,6 @@
 # CORS (Partage des ressources entre origines) { #cors-cross-origin-resource-sharing }
 
-<a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS" class="external-link" target="_blank">CORS ou Â« Cross-Origin Resource Sharing Â»</a> fait rĂ©fĂ©rence aux situations oĂč un frontend exĂ©cutĂ© dans un navigateur contient du code JavaScript qui communique avec un backend, et oĂč le backend se trouve dans une Â« origine Â» diffĂ©rente de celle du frontend.
+[CORS ou Â« Cross-Origin Resource Sharing Â»](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) fait rĂ©fĂ©rence aux situations oĂč un frontend exĂ©cutĂ© dans un navigateur contient du code JavaScript qui communique avec un backend, et oĂč le backend se trouve dans une Â« origine Â» diffĂ©rente de celle du frontend.
 
 ## Origine { #origin }
 
@@ -55,10 +55,10 @@ Les arguments suivants sont pris en charge :
 * `allow_origins` - Une liste d’origines autorisĂ©es Ă  effectuer des requĂȘtes cross-origin. Par ex. `['https://example.org', 'https://www.example.org']`. Vous pouvez utiliser `['*']` pour autoriser n’importe quelle origine.
 * `allow_origin_regex` - Une chaĂźne regex pour faire correspondre les origines autorisĂ©es Ă  effectuer des requĂȘtes cross-origin. Par ex. `'https://.*\.example\.org'`.
 * `allow_methods` - Une liste de mĂ©thodes HTTP qui doivent ĂȘtre autorisĂ©es pour les requĂȘtes cross-origin. Par dĂ©faut `['GET']`. Vous pouvez utiliser `['*']` pour autoriser toutes les mĂ©thodes standard.
-* `allow_headers` - Une liste d’en-tĂȘtes HTTP de requĂȘte qui doivent ĂȘtre pris en charge pour les requĂȘtes cross-origin. Par dĂ©faut `[]`. Vous pouvez utiliser `['*']` pour autoriser tous les en-tĂȘtes. Les en-tĂȘtes `Accept`, `Accept-Language`, `Content-Language` et `Content-Type` sont toujours autorisĂ©s pour les <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests" class="external-link" rel="noopener" target="_blank">requĂȘtes CORS simples</a>.
+* `allow_headers` - Une liste d’en-tĂȘtes HTTP de requĂȘte qui doivent ĂȘtre pris en charge pour les requĂȘtes cross-origin. Par dĂ©faut `[]`. Vous pouvez utiliser `['*']` pour autoriser tous les en-tĂȘtes. Les en-tĂȘtes `Accept`, `Accept-Language`, `Content-Language` et `Content-Type` sont toujours autorisĂ©s pour les [requĂȘtes CORS simples](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests).
 * `allow_credentials` - Indique que les cookies doivent ĂȘtre pris en charge pour les requĂȘtes cross-origin. Par dĂ©faut `False`.
 
-    Aucun de `allow_origins`, `allow_methods` et `allow_headers` ne peut ĂȘtre dĂ©fini Ă  `['*']` si `allow_credentials` est dĂ©fini Ă  `True`. Ils doivent tous ĂȘtre <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#credentialed_requests_and_wildcards" class="external-link" rel="noopener" target="_blank">spĂ©cifiĂ©s explicitement</a>.
+    Aucun de `allow_origins`, `allow_methods` et `allow_headers` ne peut ĂȘtre dĂ©fini Ă  `['*']` si `allow_credentials` est dĂ©fini Ă  `True`. Ils doivent tous ĂȘtre [spĂ©cifiĂ©s explicitement](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#credentialed_requests_and_wildcards).
 
 * `expose_headers` - Indique les en-tĂȘtes de rĂ©ponse qui doivent ĂȘtre accessibles au navigateur. Par dĂ©faut `[]`.
 * `max_age` - DĂ©finit un temps maximum (en secondes) pendant lequel les navigateurs peuvent mettre en cache les rĂ©ponses CORS. Par dĂ©faut `600`.
@@ -77,7 +77,7 @@ Toute requĂȘte avec un en-tĂȘte `Origin`. Dans ce cas, le middleware laissera pa
 
 ## En savoir plus { #more-info }
 
-Pour plus d’informations sur <abbr title="Cross-Origin Resource Sharing - Partage des ressources entre origines">CORS</abbr>, consultez la <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS" class="external-link" target="_blank">documentation CORS de Mozilla</a>.
+Pour plus d’informations sur <abbr title="Cross-Origin Resource Sharing - Partage des ressources entre origines">CORS</abbr>, consultez la [documentation CORS de Mozilla](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS).
 
 /// note | DĂ©tails techniques
 
index d69e6a3bae3672e63b536bf77aacb3adfdcb4a9b..6452b43fae7cc965a2e2f26ff32ea05b371e425d 100644 (file)
@@ -74,7 +74,7 @@ ne sera pas exĂ©cutĂ©e.
 
 /// info
 
-Pour plus d'informations, consultez <a href="https://docs.python.org/3/library/__main__.html" class="external-link" target="_blank">la documentation officielle de Python</a>.
+Pour plus d'informations, consultez [la documentation officielle de Python](https://docs.python.org/3/library/__main__.html).
 
 ///
 
index bf697fe8debf4d97a1d728817ff3fb204402e3c0..b32728a304bfc65b791ca590f2233aa3b36e1a81 100644 (file)
@@ -32,7 +32,7 @@ Cela peut Ă©galement Ă©viter toute confusion pour les nouveaux dĂ©veloppeurs qui
 
 Dans cet exemple, nous utilisons des en-tĂȘtes personnalisĂ©s fictifs `X-Key` et `X-Token`.
 
-Mais dans des cas rĂ©els, lors de l'implĂ©mentation de la sĂ©curitĂ©, vous tirerez davantage d'avantages en utilisant les [utilitaires de sĂ©curitĂ© (chapitre suivant)](../security/index.md){.internal-link target=_blank} intĂ©grĂ©s.
+Mais dans des cas rĂ©els, lors de l'implĂ©mentation de la sĂ©curitĂ©, vous tirerez davantage d'avantages en utilisant les [utilitaires de sĂ©curitĂ© (chapitre suivant)](../security/index.md) intĂ©grĂ©s.
 
 ///
 
@@ -62,7 +62,7 @@ Vous pouvez donc rĂ©utiliser une dĂ©pendance normale (qui retourne une valeur) q
 
 ## DĂ©finir des dĂ©pendances pour un groupe de chemins d'accĂšs { #dependencies-for-a-group-of-path-operations }
 
-Plus tard, en lisant comment structurer des applications plus grandes ([Applications plus grandes - Plusieurs fichiers](../../tutorial/bigger-applications.md){.internal-link target=_blank}), Ă©ventuellement avec plusieurs fichiers, vous apprendrez Ă  dĂ©clarer un unique paramĂštre `dependencies` pour un groupe de *chemins d'accĂšs*.
+Plus tard, en lisant comment structurer des applications plus grandes ([Applications plus grandes - Plusieurs fichiers](../../tutorial/bigger-applications.md)), Ă©ventuellement avec plusieurs fichiers, vous apprendrez Ă  dĂ©clarer un unique paramĂštre `dependencies` pour un groupe de *chemins d'accĂšs*.
 
 ## DĂ©finir des dĂ©pendances globales { #global-dependencies }
 
index 3f06df767431ca756def7cdca2ec1a539a4b08e6..53d4ae4cf3a352dd124f7227759d333faa5e545c 100644 (file)
@@ -14,8 +14,8 @@ Vous devez vous assurer d'utiliser `yield` une seule fois par dĂ©pendance.
 
 Toute fonction valide Ă  utiliser avec :
 
-* <a href="https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager" class="external-link" target="_blank">`@contextlib.contextmanager`</a> ou
-* <a href="https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager" class="external-link" target="_blank">`@contextlib.asynccontextmanager`</a>
+* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) ou
+* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager)
 
 sera valide comme dĂ©pendance **FastAPI**.
 
@@ -87,7 +87,7 @@ Vous pouvez combiner les dĂ©pendances comme vous le souhaitez.
 
 /// note | DĂ©tails techniques
 
-Cela fonctionne grĂące aux <a href="https://docs.python.org/3/library/contextlib.html" class="external-link" target="_blank">gestionnaires de contexte</a> de Python.
+Cela fonctionne grĂące aux [gestionnaires de contexte](https://docs.python.org/3/library/contextlib.html) de Python.
 
 **FastAPI** les utilise en interne pour y parvenir.
 
@@ -111,7 +111,7 @@ Mais elle est Ă  votre disposition si vous en avez besoin. đŸ€“
 
 {* ../../docs_src/dependencies/tutorial008b_an_py310.py hl[18:22,31] *}
 
-Si vous souhaitez intercepter des exceptions et crĂ©er une rĂ©ponse personnalisĂ©e en fonction de cela, crĂ©ez un [Gestionnaire d'exceptions personnalisĂ©](../handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank}.
+Si vous souhaitez intercepter des exceptions et crĂ©er une rĂ©ponse personnalisĂ©e en fonction de cela, crĂ©ez un [Gestionnaire d'exceptions personnalisĂ©](../handling-errors.md#install-custom-exception-handlers).
 
 ## Utiliser des dĂ©pendances avec `yield` et `except` { #dependencies-with-yield-and-except }
 
@@ -233,14 +233,14 @@ 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){.internal-link target=_blank}.
+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 }
 
 Les Â« Context Managers Â» sont des objets Python que vous pouvez utiliser dans une instruction `with`.
 
-Par exemple, <a href="https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files" class="external-link" target="_blank">vous pouvez utiliser `with` pour lire un fichier</a> :
+Par exemple, [vous pouvez utiliser `with` pour lire un fichier](https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files) :
 
 ```Python
 with open("./somefile.txt") as f:
@@ -264,7 +264,7 @@ Si vous dĂ©butez avec **FastAPI**, vous voudrez peut-ĂȘtre l'ignorer pour le mom
 
 ///
 
-En Python, vous pouvez crĂ©er des gestionnaires de contexte en <a href="https://docs.python.org/3/reference/datamodel.html#context-managers" class="external-link" target="_blank">crĂ©ant une classe avec deux mĂ©thodes : `__enter__()` et `__exit__()`</a>.
+En Python, vous pouvez crĂ©er des gestionnaires de contexte en [crĂ©ant une classe avec deux mĂ©thodes : `__enter__()` et `__exit__()`](https://docs.python.org/3/reference/datamodel.html#context-managers).
 
 Vous pouvez Ă©galement les utiliser dans des dĂ©pendances **FastAPI** avec `yield` en utilisant
 des instructions `with` ou `async with` Ă  l'intĂ©rieur de la fonction de dĂ©pendance :
@@ -275,8 +275,8 @@ des instructions `with` ou `async with` Ă  l'intĂ©rieur de la fonction de dĂ©pen
 
 Une autre façon de crĂ©er un gestionnaire de contexte consiste Ă  utiliser :
 
-* <a href="https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager" class="external-link" target="_blank">`@contextlib.contextmanager`</a> ou
-* <a href="https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager" class="external-link" target="_blank">`@contextlib.asynccontextmanager`</a>
+* [`@contextlib.contextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager) ou
+* [`@contextlib.asynccontextmanager`](https://docs.python.org/3/library/contextlib.html#contextlib.asynccontextmanager)
 
 pour dĂ©corer une fonction avec un unique `yield`.
 
index 2c418ee4a15f689e4fc4507abf94c675f7657607..f334c5d500b60691c01142fb730ecacc4ab7a0c2 100644 (file)
@@ -2,14 +2,14 @@
 
 Pour certains types d'applications, vous pourriez vouloir ajouter des dĂ©pendances Ă  l'application entiĂšre.
 
-Comme vous pouvez [ajouter des `dependencies` aux *dĂ©corateurs de chemin d'accĂšs*](dependencies-in-path-operation-decorators.md){.internal-link target=_blank}, vous pouvez les ajouter Ă  l'application `FastAPI`.
+Comme vous pouvez [ajouter des `dependencies` aux *dĂ©corateurs de chemin d'accĂšs*](dependencies-in-path-operation-decorators.md), vous pouvez les ajouter Ă  l'application `FastAPI`.
 
 Dans ce cas, elles seront appliquĂ©es Ă  tous les *chemins d'accĂšs* de l'application :
 
 {* ../../docs_src/dependencies/tutorial012_an_py310.py hl[17] *}
 
-Et toutes les idĂ©es de la section sur [l'ajout de `dependencies` aux *dĂ©corateurs de chemin d'accĂšs*](dependencies-in-path-operation-decorators.md){.internal-link target=_blank} s'appliquent toujours, mais dans ce cas Ă  tous les *chemins d'accĂšs* de l'application.
+Et toutes les idĂ©es de la section sur [l'ajout de `dependencies` aux *dĂ©corateurs de chemin d'accĂšs*](dependencies-in-path-operation-decorators.md) s'appliquent toujours, mais dans ce cas Ă  tous les *chemins d'accĂšs* de l'application.
 
 ## DĂ©pendances pour des groupes de *chemins d'accĂšs* { #dependencies-for-groups-of-path-operations }
 
-Plus tard, en lisant comment structurer des applications plus grandes ([Applications plus grandes - Plusieurs fichiers](../../tutorial/bigger-applications.md){.internal-link target=_blank}), Ă©ventuellement avec plusieurs fichiers, vous apprendrez comment dĂ©clarer un unique paramĂštre `dependencies` pour un groupe de *chemins d'accĂšs*.
+Plus tard, en lisant comment structurer des applications plus grandes ([Applications plus grandes - Plusieurs fichiers](../../tutorial/bigger-applications.md)), Ă©ventuellement avec plusieurs fichiers, vous apprendrez comment dĂ©clarer un unique paramĂštre `dependencies` pour un groupe de *chemins d'accĂšs*.
index 8fad77f62a4f8638e67d395a1df1ce50ab0c947a..03eea57e326e75ed7009a7d3a2d703ce9ec70d9e 100644 (file)
@@ -51,13 +51,13 @@ Dans ce cas, cette dĂ©pendance attend :
 
 Puis elle retourne simplement un `dict` contenant ces valeurs.
 
-/// info | Info
+/// info
 
 FastAPI a ajoutĂ© la prise en charge de `Annotated` (et a commencĂ© Ă  le recommander) dans la version 0.95.0.
 
 Si vous avez une version plus ancienne, vous obtiendrez des erreurs en essayant d’utiliser `Annotated`.
 
-Vous devez vous assurer de [mettre Ă  niveau la version de FastAPI](../../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank} vers au moins la 0.95.1 avant d’utiliser `Annotated`.
+Vous devez vous assurer de [mettre Ă  niveau la version de FastAPI](../../deployment/versions.md#upgrading-the-fastapi-versions) vers au moins la 0.95.1 avant d’utiliser `Annotated`.
 
 ///
 
@@ -152,7 +152,7 @@ Peu importe. **FastAPI** saura quoi faire.
 
 /// note | Remarque
 
-Si vous ne savez pas, consultez la section [Async : *« PressĂ© ? Â»*](../../async.md#in-a-hurry){.internal-link target=_blank} Ă  propos de `async` et `await` dans la documentation.
+Si vous ne savez pas, consultez la section [Async : *« PressĂ© ? Â»*](../../async.md#in-a-hurry) Ă  propos de `async` et `await` dans la documentation.
 
 ///
 
index f94be429ca0e233b2ca50666a23cde4147d429dc..15a6479ff39aca3ba82094e90694a65c9d413750 100644 (file)
@@ -12,7 +12,7 @@ Imaginons que vous ayez une base de donnĂ©es `fake_db` qui ne reçoit que des do
 
 Par exemple, elle ne reçoit pas d'objets `datetime`, car ceux-ci ne sont pas compatibles avec JSON.
 
-Ainsi, un objet `datetime` doit ĂȘtre converti en une `str` contenant les donnĂ©es au <a href="https://en.wikipedia.org/wiki/ISO_8601" class="external-link" target="_blank">format ISO</a>.
+Ainsi, un objet `datetime` doit ĂȘtre converti en une `str` contenant les donnĂ©es au [format ISO](https://en.wikipedia.org/wiki/ISO_8601).
 
 De la mĂȘme maniĂšre, cette base de donnĂ©es n'accepterait pas un modĂšle Pydantic (un objet avec des attributs), seulement un `dict`.
 
@@ -24,7 +24,7 @@ Elle reçoit un objet, comme un modĂšle Pydantic, et renvoie une version compati
 
 Dans cet exemple, elle convertirait le modĂšle Pydantic en `dict`, et le `datetime` en `str`.
 
-Le rĂ©sultat de son appel est quelque chose qui peut ĂȘtre encodĂ© avec la fonction standard de Python <a href="https://docs.python.org/3/library/json.html#json.dumps" class="external-link" target="_blank">`json.dumps()`</a>.
+Le rĂ©sultat de son appel est quelque chose qui peut ĂȘtre encodĂ© avec la fonction standard de Python [`json.dumps()`](https://docs.python.org/3/library/json.html#json.dumps).
 
 Elle ne renvoie pas une grande `str` contenant les donnĂ©es au format JSON (sous forme de chaĂźne). Elle renvoie une structure de donnĂ©es standard de Python (par ex. un `dict`) avec des valeurs et sous-valeurs toutes compatibles avec JSON.
 
index edaa7bd4c356e46dc3307b0aa22c6ce66e5017bc..7ee6816c8251db41f967d43e4f545f589a9f5783 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 Â», <a href="https://docs.pydantic.dev/latest/concepts/serialization/#custom-serializers" class="external-link" target="_blank">voir la documentation pour plus d'informations</a>.
+    * 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).
 * `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`.
@@ -49,7 +49,7 @@ Voici quelques types de donnĂ©es supplĂ©mentaires que vous pouvez utiliser :
 * `Decimal` :
     * `Decimal` Python standard.
     * Dans les requĂȘtes et les rĂ©ponses, gĂ©rĂ© de la mĂȘme maniĂšre qu'un `float`.
-* Vous pouvez consulter tous les types de donnĂ©es Pydantic valides ici : <a href="https://docs.pydantic.dev/latest/usage/types/types/" class="external-link" target="_blank">Types de donnĂ©es Pydantic</a>.
+* Vous pouvez consulter tous les types de donnĂ©es Pydantic valides ici : [Types de donnĂ©es Pydantic](https://docs.pydantic.dev/latest/usage/types/types/).
 
 ## Exemple { #example }
 
index 1f9eb15616915db9d7b8bc691267336860a31bf2..24a3fa31b76f9bd4825b98ffdc5646751a4c7987 100644 (file)
@@ -12,7 +12,7 @@ C'est particuliĂšrement vrai pour les modĂšles d'utilisateur, car :
 
 Ne stockez jamais les mots de passe des utilisateurs en clair. Stockez toujours un Â« hachage sĂ©curisĂ© Â» que vous pourrez ensuite vĂ©rifier.
 
-Si vous ne savez pas ce que c'est, vous apprendrez ce qu'est un Â« hachage de mot de passe Â» dans les [chapitres sur la sĂ©curitĂ©](security/simple-oauth2.md#password-hashing){.internal-link target=_blank}.
+Si vous ne savez pas ce que c'est, vous apprendrez ce qu'est un Â« hachage de mot de passe Â» dans les [chapitres sur la sĂ©curitĂ©](security/simple-oauth2.md#password-hashing).
 
 ///
 
@@ -162,11 +162,11 @@ 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 <a href="https://docs.python.org/3/library/typing.html#typing.Union" class="external-link" target="_blank">`typing.Union`</a> :
+Pour ce faire, utilisez l'annotation de type Python standard [`typing.Union`](https://docs.python.org/3/library/typing.html#typing.Union) :
 
 /// note | Remarque
 
-Lors de la dĂ©finition d'une <a href="https://docs.pydantic.dev/latest/concepts/types/#unions" class="external-link" target="_blank">`Union`</a>, incluez d'abord le type le plus spĂ©cifique, suivi du type le moins spĂ©cifique. Dans l'exemple ci-dessous, le type le plus spĂ©cifique `PlaneItem` prĂ©cĂšde `CarItem` dans `Union[PlaneItem, CarItem]`.
+Lors de la dĂ©finition d'une [`Union`](https://docs.pydantic.dev/latest/concepts/types/#unions), incluez d'abord le type le plus spĂ©cifique, suivi du type le moins spĂ©cifique. Dans l'exemple ci-dessous, le type le plus spĂ©cifique `PlaneItem` prĂ©cĂšde `CarItem` dans `Union[PlaneItem, CarItem]`.
 
 ///
 
index ae23584688c8123c8a2fa13fe4b280ce6911bda4..0a82004d2c2fa23f15a182f8302cb2b78b32f2a8 100644 (file)
@@ -11,7 +11,7 @@ DĂ©marrez le serveur en direct :
 <div class="termy">
 
 ```console
-$ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:solid">main.py</u>
+$ <font color="#4E9A06">fastapi</font> dev
 
   <span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span>  Starting development server đŸš€
 
@@ -58,7 +58,7 @@ Cette ligne montre l’URL oĂč votre application est servie, sur votre machine l
 
 ### VĂ©rifier { #check-it }
 
-Ouvrez votre navigateur Ă  l’adresse <a href="http://127.0.0.1:8000" class="external-link" target="_blank">http://127.0.0.1:8000</a>.
+Ouvrez votre navigateur Ă  l’adresse [http://127.0.0.1:8000](http://127.0.0.1:8000).
 
 Vous verrez la rĂ©ponse JSON suivante :
 
@@ -68,17 +68,17 @@ Vous verrez la rĂ©ponse JSON suivante :
 
 ### Documentation interactive de l’API { #interactive-api-docs }
 
-Allez maintenant sur <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
+Allez maintenant sur [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
 
-Vous verrez la documentation interactive de l’API gĂ©nĂ©rĂ©e automatiquement (fournie par <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a>) :
+Vous verrez la documentation interactive de l’API gĂ©nĂ©rĂ©e automatiquement (fournie par [Swagger UI](https://github.com/swagger-api/swagger-ui)) :
 
 ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)
 
 ### Documentation alternative de l’API { #alternative-api-docs }
 
-Et maintenant, allez sur <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>.
+Et maintenant, allez sur [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc).
 
-Vous verrez la documentation automatique alternative (fournie par <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>) :
+Vous verrez la documentation automatique alternative (fournie par [ReDoc](https://github.com/Rebilly/ReDoc)) :
 
 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)
 
@@ -92,7 +92,7 @@ Un Â« schĂ©ma Â» est une dĂ©finition ou une description de quelque chose. Pas le
 
 #### Â« SchĂ©ma Â» d’API { #api-schema }
 
-Ici, <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> est une spĂ©cification qui dicte comment dĂ©finir le schĂ©ma de votre API.
+Ici, [OpenAPI](https://github.com/OAI/OpenAPI-Specification) est une spĂ©cification qui dicte comment dĂ©finir le schĂ©ma de votre API.
 
 Cette dĂ©finition de schĂ©ma inclut les chemins de votre API, les paramĂštres possibles qu’ils prennent, etc.
 
@@ -110,7 +110,7 @@ OpenAPI dĂ©finit un schĂ©ma d’API pour votre API. Et ce schĂ©ma inclut des dĂ©
 
 Si vous ĂȘtes curieux de voir Ă  quoi ressemble le schĂ©ma OpenAPI brut, FastAPI gĂ©nĂšre automatiquement un JSON (schĂ©ma) avec les descriptions de toute votre API.
 
-Vous pouvez le voir directement Ă  l’adresse : <a href="http://127.0.0.1:8000/openapi.json" class="external-link" target="_blank">http://127.0.0.1:8000/openapi.json</a>.
+Vous pouvez le voir directement Ă  l’adresse : [http://127.0.0.1:8000/openapi.json](http://127.0.0.1:8000/openapi.json).
 
 Il affichera un JSON commençant par quelque chose comme :
 
@@ -143,9 +143,58 @@ Et il existe des dizaines d’alternatives, toutes basĂ©es sur OpenAPI. Vous pou
 
 Vous pourriez Ă©galement l’utiliser pour gĂ©nĂ©rer du code automatiquement, pour les clients qui communiquent avec votre API. Par exemple, des applications frontend, mobiles ou IoT.
 
+### 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 :
+
+```toml
+[tool.fastapi]
+entrypoint = "main:app"
+```
+
+Ce `entrypoint` indiquera Ă  la commande `fastapi` qu’elle doit importer l’application comme :
+
+```python
+from main import app
+```
+
+Si votre code est structurĂ© comme :
+
+```
+.
+├── backend
+│   â”œâ”€â”€ main.py
+│   â”œâ”€â”€ __init__.py
+```
+
+Alors vous dĂ©finiriez le `entrypoint` comme :
+
+```toml
+[tool.fastapi]
+entrypoint = "backend.main:app"
+```
+
+ce qui Ă©quivaudrait Ă â€Ż:
+
+```python
+from backend.main import app
+```
+
+### `fastapi dev` avec un chemin { #fastapi-dev-with-path }
+
+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
+```
+
+Mais vous devrez vous souvenir de passer le chemin 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`.
+
 ### DĂ©ployer votre application (optionnel) { #deploy-your-app-optional }
 
-Vous pouvez, si vous le souhaitez, dĂ©ployer votre application FastAPI sur <a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>, allez rejoindre la liste d’attente si ce n’est pas dĂ©jĂ  fait. đŸš€
+Vous pouvez, si vous le souhaitez, dĂ©ployer votre application FastAPI sur [FastAPI Cloud](https://fastapicloud.com), allez rejoindre la liste d’attente si ce n’est pas dĂ©jĂ  fait. đŸš€
 
 Si vous avez dĂ©jĂ  un compte **FastAPI Cloud** (nous vous avons invitĂ© depuis la liste d’attente đŸ˜‰), vous pouvez dĂ©ployer votre application avec une seule commande.
 
@@ -191,7 +240,7 @@ C’est tout ! Vous pouvez maintenant accĂ©der Ă  votre application Ă  cette URL
 
 `FastAPI` est une classe qui hĂ©rite directement de `Starlette`.
 
-Vous pouvez donc aussi utiliser toutes les fonctionnalitĂ©s de <a href="https://www.starlette.dev/" class="external-link" target="_blank">Starlette</a> avec `FastAPI`.
+Vous pouvez donc aussi utiliser toutes les fonctionnalitĂ©s de [Starlette](https://www.starlette.dev/) avec `FastAPI`.
 
 ///
 
@@ -336,7 +385,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){.internal-link target=_blank}.
+Si vous ne connaissez pas la diffĂ©rence, consultez [Asynchrone : Â« PressĂ© ? Â»](../async.md#in-a-hurry).
 
 ///
 
@@ -352,11 +401,11 @@ Il existe de nombreux autres objets et modĂšles qui seront automatiquement conve
 
 ### Ă‰tape 6 : le dĂ©ployer { #step-6-deploy-it }
 
-DĂ©ployez votre application sur **<a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>** avec une seule commande : `fastapi deploy`. đŸŽ‰
+DĂ©ployez votre application sur **[FastAPI Cloud](https://fastapicloud.com)** avec une seule commande : `fastapi deploy`. đŸŽ‰
 
 #### Ă€ propos de FastAPI Cloud { #about-fastapi-cloud }
 
-**<a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>** est construit par le mĂȘme auteur et l’équipe derriĂšre **FastAPI**.
+**[FastAPI Cloud](https://fastapicloud.com)** est construit par le mĂȘme auteur et l’équipe derriĂšre **FastAPI**.
 
 Il simplifie le processus de **construction**, de **dĂ©ploiement** et d’**accĂšs** Ă  une API avec un minimum d’effort.
 
index 38935c21ccbbbbd399171c5c679a0b1122e701f3..a697571f33cafcb46d17b8312812b52ccfc360a3 100644 (file)
@@ -81,7 +81,7 @@ Mais si vous en aviez besoin pour un scĂ©nario avancĂ©, vous pouvez ajouter des
 
 ## Installer des gestionnaires d'exception personnalisĂ©s { #install-custom-exception-handlers }
 
-Vous pouvez ajouter des gestionnaires d'exception personnalisĂ©s avec <a href="https://www.starlette.dev/exceptions/" class="external-link" target="_blank">les mĂȘmes utilitaires d'exception de Starlette</a>.
+Vous pouvez ajouter des gestionnaires d'exception personnalisĂ©s avec [les mĂȘmes utilitaires d'exception de Starlette](https://www.starlette.dev/exceptions/).
 
 Supposons que vous ayez une exception personnalisĂ©e `UnicornException` que vous (ou une bibliothĂšque que vous utilisez) pourriez `raise`.
 
index 0251b9b4b267f9caf608e12da2f569dc6c205aa1..2fc177ed95bb213714cef96da0fc1e979050b2e1 100644 (file)
@@ -10,12 +10,12 @@ Il est Ă©galement conçu pour servir de rĂ©fĂ©rence ultĂ©rieure, afin que vous p
 
 Tous les blocs de code peuvent ĂȘtre copiĂ©s et utilisĂ©s directement (il s'agit en fait de fichiers Python testĂ©s).
 
-Pour exĂ©cuter l'un de ces exemples, copiez le code dans un fichier `main.py`, et dĂ©marrez `fastapi dev` avec :
+Pour exĂ©cuter l'un de ces exemples, copiez le code dans un fichier `main.py`, et dĂ©marrez `fastapi dev` :
 
 <div class="termy">
 
 ```console
-$ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:solid">main.py</u>
+$ <font color="#4E9A06">fastapi</font> dev
 
   <span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span>  Starting development server đŸš€
 
@@ -62,7 +62,7 @@ L'utiliser dans votre Ă©diteur est ce qui vous montre vraiment les avantages de
 
 La premiĂšre Ă©tape consiste Ă  installer FastAPI.
 
-Assurez-vous de crĂ©er un [environnement virtuel](../virtual-environments.md){.internal-link target=_blank}, de l'activer, puis **d'installer FastAPI** :
+Assurez-vous de crĂ©er un [environnement virtuel](../virtual-environments.md), de l'activer, puis **d'installer FastAPI** :
 
 <div class="termy">
 
@@ -76,7 +76,7 @@ $ pip install "fastapi[standard]"
 
 /// note | Remarque
 
-Lorsque vous installez avec `pip install "fastapi[standard]"` cela inclut des dĂ©pendances standard optionnelles par dĂ©faut, y compris `fastapi-cloud-cli`, qui vous permet de dĂ©ployer sur <a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>.
+Lorsque vous installez avec `pip install "fastapi[standard]"`, cela inclut des dĂ©pendances standards optionnelles par dĂ©faut, y compris `fastapi-cloud-cli`, qui vous permet de dĂ©ployer sur [FastAPI Cloud](https://fastapicloud.com).
 
 Si vous ne souhaitez pas avoir ces dĂ©pendances optionnelles, vous pouvez Ă  la place installer `pip install fastapi`.
 
@@ -84,6 +84,12 @@ Si vous souhaitez installer les dĂ©pendances standard mais sans `fastapi-cloud-c
 
 ///
 
+/// tip | Astuce
+
+FastAPI dispose d'une [extension officielle pour VS Code](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode) (et Cursor), qui fournit de nombreuses fonctionnalitĂ©s, notamment un explorateur de chemins d'accĂšs, une recherche de chemins d'accĂšs, la navigation CodeLens dans les tests (aller Ă  la dĂ©finition depuis les tests), ainsi que le dĂ©ploiement et les journaux FastAPI Cloud, le tout depuis votre Ă©diteur.
+
+///
+
 ## Guide d'utilisation avancĂ© { #advanced-user-guide }
 
 Il existe Ă©galement un **Guide d'utilisation avancĂ©** que vous pouvez lire plus tard aprĂšs ce **Tutoriel - Guide d'utilisation**.
index 3ea3865bab69fc2445b61efaaefbd0eafb103df9..87f72fefa057e178f9997365b969011924f88ea9 100644 (file)
@@ -14,7 +14,7 @@ Vous pouvez dĂ©finir les champs suivants qui sont utilisĂ©s dans la spĂ©cificati
 | `version` | `string` | 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 <a href="https://spdx.org/licenses/" class="external-link" target="_blank">SPDX</a> 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> |
+| `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> |
 
 Vous pouvez les dĂ©finir comme suit :
 
@@ -76,7 +76,7 @@ Utilisez le paramĂštre `tags` avec vos *chemins d'accĂšs* (et `APIRouter`s) pour
 
 /// info
 
-En savoir plus sur les tags dans [Configuration de chemins d'accĂšs](path-operation-configuration.md#tags){.internal-link target=_blank}.
+En savoir plus sur les tags dans [Configuration de chemins d'accĂšs](path-operation-configuration.md#tags).
 
 ///
 
index 6cbbc3e45623ed820b18714c4f720fd4502f28e2..860b8041ce189eaf9bfa73761fec8c449c2b6f21 100644 (file)
@@ -15,7 +15,7 @@ Un Â« middleware Â» est une fonction qui agit sur chaque **requĂȘte** avant qu
 
 Si vous avez des dĂ©pendances avec `yield`, le code de sortie s’exĂ©cutera aprĂšs le middleware.
 
-S’il y avait des tĂąches d’arriĂšre-plan (prĂ©sentĂ©es dans la section [TĂąches d’arriĂšre-plan](background-tasks.md){.internal-link target=_blank}, que vous verrez plus tard), elles s’exĂ©cuteront aprĂšs tous les middlewares.
+S’il y avait des tĂąches d’arriĂšre-plan (prĂ©sentĂ©es dans la section [TĂąches d’arriĂšre-plan](background-tasks.md), que vous verrez plus tard), elles s’exĂ©cuteront aprĂšs tous les middlewares.
 
 ///
 
@@ -35,9 +35,9 @@ La fonction de middleware reçoit :
 
 /// tip | Astuce
 
-Gardez Ă  l’esprit que des en-tĂȘtes propriĂ©taires personnalisĂ©s peuvent ĂȘtre ajoutĂ©s <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers" class="external-link" target="_blank">en utilisant le prĂ©fixe `X-`</a>.
+Gardez Ă  l’esprit que des en-tĂȘtes propriĂ©taires personnalisĂ©s peuvent ĂȘtre ajoutĂ©s [en utilisant le prĂ©fixe `X-`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers).
 
-Mais si vous avez des en-tĂȘtes personnalisĂ©s que vous voulez rendre visibles pour un client dans un navigateur, vous devez les ajouter Ă  votre configuration CORS ([CORS (Partage des ressources entre origines)](cors.md){.internal-link target=_blank}) en utilisant le paramĂštre `expose_headers` documentĂ© dans <a href="https://www.starlette.dev/middleware/#corsmiddleware" class="external-link" target="_blank">la documentation CORS de Starlette</a>.
+Mais si vous avez des en-tĂȘtes personnalisĂ©s que vous voulez rendre visibles pour un client dans un navigateur, vous devez les ajouter Ă  votre configuration CORS ([CORS (Partage des ressources entre origines)](cors.md)) en utilisant le paramĂštre `expose_headers` documentĂ© dans [la documentation CORS de Starlette](https://www.starlette.dev/middleware/#corsmiddleware).
 
 ///
 
@@ -61,7 +61,7 @@ Par exemple, vous pourriez ajouter un en-tĂȘte personnalisĂ© `X-Process-Time` co
 
 /// tip | Astuce
 
-Ici, nous utilisons <a href="https://docs.python.org/3/library/time.html#time.perf_counter" class="external-link" target="_blank">`time.perf_counter()`</a> au lieu de `time.time()` car cela peut ĂȘtre plus prĂ©cis pour ces cas d’usage. đŸ€“
+Ici, nous utilisons [`time.perf_counter()`](https://docs.python.org/3/library/time.html#time.perf_counter) au lieu de `time.time()` car cela peut ĂȘtre plus prĂ©cis pour ces cas d’usage. đŸ€“
 
 ///
 
@@ -90,6 +90,6 @@ Ce comportement d’empilement garantit que les middlewares s’exĂ©cutent dans
 
 ## Autres middlewares { #other-middlewares }
 
-Vous pouvez en lire davantage sur d’autres middlewares dans le [Guide de l’utilisateur avancĂ© : Middleware avancĂ©](../advanced/middleware.md){.internal-link target=_blank}.
+Vous pouvez en lire davantage sur d’autres middlewares dans le [Guide de l’utilisateur avancĂ© : Middleware avancĂ©](../advanced/middleware.md).
 
 Vous verrez comment gĂ©rer <abbr title="Cross-Origin Resource Sharing - Partage des ressources entre origines">CORS</abbr> avec un middleware dans la section suivante.
index f8041fa69118b9af51a3f01b889ab5eebfbe112a..185adb6dd92336a7572a5eab0b0901a7d9a315e7 100644 (file)
@@ -58,7 +58,7 @@ Vous pouvez ajouter un `summary` et une `description` :
 
 Comme les descriptions ont tendance Ă  ĂȘtre longues et Ă  couvrir plusieurs lignes, vous pouvez dĂ©clarer la description du *chemin d'accĂšs* dans la <dfn title="une chaĂźne multilignes comme premiĂšre expression Ă  l'intĂ©rieur d'une fonction (non assignĂ©e Ă  une variable) utilisĂ©e pour la documentation">docstring</dfn> de la fonction et **FastAPI** la lira Ă  partir de lĂ .
 
-Vous pouvez Ă©crire <a href="https://en.wikipedia.org/wiki/Markdown" class="external-link" target="_blank">Markdown</a> dans la docstring, il sera interprĂ©tĂ© et affichĂ© correctement (en tenant compte de l'indentation de la docstring).
+Vous pouvez Ă©crire [Markdown](https://en.wikipedia.org/wiki/Markdown) dans la docstring, il sera interprĂ©tĂ© et affichĂ© correctement (en tenant compte de l'indentation de la docstring).
 
 {* ../../docs_src/path_operation_configuration/tutorial004_py310.py hl[17:25] *}
 
index 2dbaaa8caeaa0aa77bd0cc056395b4113b2034dd..b61b42ef78f0cf8b5010089902f564ae6589083d 100644 (file)
@@ -14,7 +14,7 @@ FastAPI a ajoutĂ© le support pour `Annotated` (et a commencĂ© Ă  le recommander)
 
 Si vous avez une version plus ancienne, vous obtiendrez des erreurs en essayant d'utiliser `Annotated`.
 
-Assurez-vous de [Mettre Ă  niveau la version de FastAPI](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank} Ă  la version 0.95.1 Ă  minima avant d'utiliser `Annotated`.
+Assurez-vous de [Mettre Ă  niveau la version de FastAPI](../deployment/versions.md#upgrading-the-fastapi-versions) Ă  la version 0.95.1 Ă  minima avant d'utiliser `Annotated`.
 
 ///
 
@@ -112,17 +112,17 @@ La mĂȘme chose s'applique pour :
 
 Les validations numĂ©riques fonctionnent Ă©galement pour les valeurs `float`.
 
-C'est ici qu'il devient important de pouvoir dĂ©clarer <abbr title="greater than"><code>gt</code></abbr> et pas seulement <abbr title="greater than or equal"><code>ge</code></abbr>. Avec cela, vous pouvez exiger, par exemple, qu'une valeur doit ĂȘtre supĂ©rieure Ă  `0`, mĂȘme si elle est infĂ©rieure Ă  `1`.
+C'est ici qu'il devient important de pouvoir dĂ©clarer <abbr title="greater than - supĂ©rieur Ă "><code>gt</code></abbr> et pas seulement <abbr title="greater than or equal - supĂ©rieur ou Ă©gal"><code>ge</code></abbr>. Avec cela, vous pouvez exiger, par exemple, qu'une valeur doit ĂȘtre supĂ©rieure Ă  `0`, mĂȘme si elle est infĂ©rieure Ă  `1`.
 
 Ainsi, `0.5` serait une valeur valide. Mais `0.0` ou `0` ne le serait pas.
 
-Et la mĂȘme chose pour <abbr title="less than"><code>lt</code></abbr>.
+Et la mĂȘme chose pour <abbr title="less than - infĂ©rieur Ă "><code>lt</code></abbr>.
 
 {* ../../docs_src/path_params_numeric_validations/tutorial006_an_py310.py hl[13] *}
 
 ## Pour rĂ©sumer { #recap }
 
-Avec `Query`, `Path` (et d'autres que vous verrez plus tard) vous pouvez dĂ©clarer des mĂ©tadonnĂ©es et des validations de chaĂźnes de la mĂȘme maniĂšre qu'avec les [ParamĂštres de requĂȘte et validations de chaĂźnes](query-params-str-validations.md){.internal-link target=_blank}.
+Avec `Query`, `Path` (et d'autres que vous verrez plus tard) vous pouvez dĂ©clarer des mĂ©tadonnĂ©es et des validations de chaĂźnes de la mĂȘme maniĂšre qu'avec les [ParamĂštres de requĂȘte et validations de chaĂźnes](query-params-str-validations.md).
 
 Et vous pouvez Ă©galement dĂ©clarer des validations numĂ©riques :
 
index 985eff635424780fd484a9030b37038426025a1c..f84c4c035715cf243d806e58c34e44620376fd82 100644 (file)
@@ -6,7 +6,7 @@ Vous pouvez dĂ©clarer des Â« paramĂštres Â» ou Â« variables Â» de chemin avec la
 
 La valeur du paramĂštre de chemin `item_id` sera transmise Ă  votre fonction dans l'argument `item_id`.
 
-Donc, si vous exĂ©cutez cet exemple et allez sur <a href="http://127.0.0.1:8000/items/foo" class="external-link" target="_blank">http://127.0.0.1:8000/items/foo</a>, vous verrez comme rĂ©ponse :
+Donc, si vous exĂ©cutez cet exemple et allez sur [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo), vous verrez comme rĂ©ponse :
 
 ```JSON
 {"item_id":"foo"}
@@ -28,7 +28,7 @@ Cela vous apporte la prise en charge par l'Ă©diteur dans votre fonction, avec v
 
 ## <dfn title="Ă©galement appelĂ© : sĂ©rialisation, parsing, marshalling">Conversion</dfn> de donnĂ©es { #data-conversion }
 
-Si vous exĂ©cutez cet exemple et ouvrez votre navigateur sur <a href="http://127.0.0.1:8000/items/3" class="external-link" target="_blank">http://127.0.0.1:8000/items/3</a>, vous verrez comme rĂ©ponse :
+Si vous exĂ©cutez cet exemple et ouvrez votre navigateur sur [http://127.0.0.1:8000/items/3](http://127.0.0.1:8000/items/3), vous verrez comme rĂ©ponse :
 
 ```JSON
 {"item_id":3}
@@ -44,7 +44,7 @@ Ainsi, avec cette dĂ©claration de type, **FastAPI** vous fournit automatiquement
 
 ## Validation de donnĂ©es { #data-validation }
 
-Mais si vous allez dans le navigateur sur <a href="http://127.0.0.1:8000/items/foo" class="external-link" target="_blank">http://127.0.0.1:8000/items/foo</a>, vous verrez une belle erreur HTTP :
+Mais si vous allez dans le navigateur sur [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo), vous verrez une belle erreur HTTP :
 
 ```JSON
 {
@@ -64,7 +64,7 @@ Mais si vous allez dans le navigateur sur <a href="http://127.0.0.1:8000/items/f
 
 car le paramĂštre de chemin `item_id` a pour valeur Â« foo Â», qui n'est pas un `int`.
 
-La mĂȘme erreur apparaĂźtrait si vous fournissiez un `float` au lieu d'un `int`, comme ici : <a href="http://127.0.0.1:8000/items/4.2" class="external-link" target="_blank">http://127.0.0.1:8000/items/4.2</a>
+La mĂȘme erreur apparaĂźtrait si vous fournissiez un `float` au lieu d'un `int`, comme ici : [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2)
 
 /// check | VĂ©rifications
 
@@ -78,7 +78,7 @@ C'est incroyablement utile lors du dĂ©veloppement et du dĂ©bogage du code qui in
 
 ## Documentation { #documentation }
 
-Et lorsque vous ouvrez votre navigateur sur <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>, vous verrez une documentation d'API automatique et interactive comme :
+Et lorsque vous ouvrez votre navigateur sur [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs), vous verrez une documentation d'API automatique et interactive comme :
 
 <img src="/img/tutorial/path-params/image01.png">
 
@@ -92,9 +92,9 @@ Remarquez que le paramĂštre de chemin est dĂ©clarĂ© comme entier.
 
 ## Les avantages d'une norme, documentation alternative { #standards-based-benefits-alternative-documentation }
 
-Et comme le schĂ©ma gĂ©nĂ©rĂ© suit la norme <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md" class="external-link" target="_blank">OpenAPI</a>, il existe de nombreux outils compatibles.
+Et comme le schĂ©ma gĂ©nĂ©rĂ© suit la norme [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md), il existe de nombreux outils compatibles.
 
-GrĂące Ă  cela, **FastAPI** fournit lui-mĂȘme une documentation d'API alternative (utilisant ReDoc), accessible sur <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a> :
+GrĂące Ă  cela, **FastAPI** fournit lui-mĂȘme une documentation d'API alternative (utilisant ReDoc), accessible sur [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) :
 
 <img src="/img/tutorial/path-params/image02.png">
 
@@ -102,7 +102,7 @@ De la mĂȘme façon, il existe de nombreux outils compatibles, y compris des outi
 
 ## Pydantic { #pydantic }
 
-Toute la validation de donnĂ©es est effectuĂ©e sous le capot par <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a>, vous en bĂ©nĂ©ficiez donc pleinement. Vous savez ainsi que vous ĂȘtes entre de bonnes mains.
+Toute la validation de donnĂ©es est effectuĂ©e sous le capot par [Pydantic](https://docs.pydantic.dev/), vous en bĂ©nĂ©ficiez donc pleinement. Vous savez ainsi que vous ĂȘtes entre de bonnes mains.
 
 Vous pouvez utiliser les mĂȘmes dĂ©clarations de type avec `str`, `float`, `bool` et de nombreux autres types de donnĂ©es complexes.
 
@@ -130,7 +130,7 @@ Le premier sera toujours utilisĂ© puisque le chemin correspond en premier.
 
 ## Valeurs prĂ©dĂ©finies { #predefined-values }
 
-Si vous avez un *chemin d'accĂšs* qui reçoit un *paramĂštre de chemin*, mais que vous voulez que les valeurs possibles de ce *paramĂštre de chemin* soient prĂ©dĂ©finies, vous pouvez utiliser une <abbr title="Enumeration - Ă‰numĂ©ration">`Enum`</abbr> Python standard.
+Si vous avez un *chemin d'accĂšs* qui reçoit un *paramĂštre de chemin*, mais que vous voulez que les valeurs possibles de ce *paramĂštre de chemin* soient prĂ©dĂ©finies, vous pouvez utiliser une <abbr title="ÉnumĂ©ration">`Enum`</abbr> Python standard.
 
 ### CrĂ©er une classe `Enum` { #create-an-enum-class }
 
index 17b751f239e44c548c3ef99a161b4fc000a34de0..57d3587581db77710e89ed21c6c41885dd4e94e1 100644 (file)
@@ -35,13 +35,13 @@ FastAPI a ajoutĂ© la prise en charge de `Annotated` (et a commencĂ© Ă  le recomm
 
 Si vous avez une version plus ancienne, vous obtiendrez des erreurs en essayant d’utiliser `Annotated`.
 
-Assurez-vous de [mettre Ă  niveau la version de FastAPI](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank} vers au moins 0.95.1 avant d’utiliser `Annotated`.
+Assurez-vous de [mettre Ă  niveau la version de FastAPI](../deployment/versions.md#upgrading-the-fastapi-versions) vers au moins 0.95.1 avant d’utiliser `Annotated`.
 
 ///
 
 ## Utiliser `Annotated` dans le type pour le paramĂštre `q` { #use-annotated-in-the-type-for-the-q-parameter }
 
-Vous vous souvenez que je vous ai dit plus tĂŽt que `Annotated` peut ĂȘtre utilisĂ© pour ajouter des mĂ©tadonnĂ©es Ă  vos paramĂštres dans l’[Introduction aux types Python](../python-types.md#type-hints-with-metadata-annotations){.internal-link target=_blank} ?
+Vous vous souvenez que je vous ai dit plus tĂŽt que `Annotated` peut ĂȘtre utilisĂ© pour ajouter des mĂ©tadonnĂ©es Ă  vos paramĂštres dans l’[Introduction aux types Python](../python-types.md#type-hints-with-metadata-annotations) ?
 
 C’est le moment de l’utiliser avec FastAPI. đŸš€
 
@@ -157,7 +157,7 @@ Vous pouvez **appeler** cette mĂȘme fonction dans **d’autres endroits** sans F
 
 Quand vous n’utilisez pas `Annotated` et utilisez Ă  la place l’**ancienne** mĂ©thode avec la **valeur par dĂ©faut**, si vous appelez cette fonction sans FastAPI dans **d’autres endroits**, vous devez **penser** Ă  passer les arguments Ă  la fonction pour qu’elle fonctionne correctement, sinon les valeurs seront diffĂ©rentes de ce que vous attendez (par ex. `QueryInfo` ou quelque chose de similaire au lieu d’une `str`). Et votre Ă©diteur ne se plaindra pas, et Python ne se plaindra pas en exĂ©cutant cette fonction, seulement quand les opĂ©rations internes Ă©choueront.
 
-Comme `Annotated` peut avoir plus d’une annotation de mĂ©tadonnĂ©es, vous pouvez maintenant mĂȘme utiliser la mĂȘme fonction avec d’autres outils, comme <a href="https://typer.tiangolo.com/" class="external-link" target="_blank">Typer</a>. đŸš€
+Comme `Annotated` peut avoir plus d’une annotation de mĂ©tadonnĂ©es, vous pouvez maintenant mĂȘme utiliser la mĂȘme fonction avec d’autres outils, comme [Typer](https://typer.tiangolo.com/). đŸš€
 
 ## Ajouter plus de validations { #add-more-validations }
 
@@ -369,11 +369,11 @@ Il peut y avoir des cas oĂč vous devez faire une **validation personnalisĂ©e** q
 
 Dans ces cas, vous pouvez utiliser une **fonction de validation personnalisĂ©e** qui est appliquĂ©e aprĂšs la validation normale (par ex. aprĂšs avoir validĂ© que la valeur est une `str`).
 
-Vous pouvez y parvenir en utilisant <a href="https://docs.pydantic.dev/latest/concepts/validators/#field-after-validator" class="external-link" target="_blank">`AfterValidator` de Pydantic</a> Ă  l’intĂ©rieur de `Annotated`.
+Vous pouvez y parvenir en utilisant [`AfterValidator` de Pydantic](https://docs.pydantic.dev/latest/concepts/validators/#field-after-validator) Ă  l’intĂ©rieur de `Annotated`.
 
 /// tip | Astuce
 
-Pydantic a aussi <a href="https://docs.pydantic.dev/latest/concepts/validators/#field-before-validator" class="external-link" target="_blank">`BeforeValidator`</a> et d’autres. đŸ€“
+Pydantic a aussi [`BeforeValidator`](https://docs.pydantic.dev/latest/concepts/validators/#field-before-validator) et d’autres. đŸ€“
 
 ///
 
index 01540ad17ca1f3e7c15f59632f92c10b04b5ca3d..8ecbc2853653a2337d0fe9087e6d0841a5f68f03 100644 (file)
@@ -111,7 +111,7 @@ ou n'importe quelle autre variation de casse (tout en majuscules, uniquement la
 
 ## 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.
+Vous pouvez dĂ©clarer plusieurs paramĂštres de chemin et paramĂštres de requĂȘte en mĂȘme temps, **FastAPI** sait lequel est lequel.
 
 Et vous n'avez pas besoin de les dĂ©clarer dans un ordre spĂ©cifique.
 
@@ -182,6 +182,6 @@ Dans ce cas, il y a 3 paramĂštres de requĂȘte :
 
 /// tip | Astuce
 
-Vous pourriez aussi utiliser des `Enum`s de la mĂȘme façon qu'avec les [ParamĂštres de chemin](path-params.md#predefined-values){.internal-link target=_blank}.
+Vous pourriez aussi utiliser des `Enum`s de la mĂȘme façon qu'avec les [ParamĂštres de chemin](path-params.md#predefined-values).
 
 ///
index 01a0b72eb91fe1fabf30567ffcd3e9a99e3f9a7b..e55f8e57fede6b4aff287dd5bfaa831932159273 100644 (file)
@@ -4,9 +4,9 @@ Vous pouvez dĂ©finir des fichiers Ă  tĂ©lĂ©verser par le client en utilisant `Fi
 
 /// info
 
-Pour recevoir des fichiers tĂ©lĂ©versĂ©s, installez d'abord <a href="https://github.com/Kludex/python-multipart" class="external-link" target="_blank">`python-multipart`</a>.
+Pour recevoir des fichiers tĂ©lĂ©versĂ©s, installez d'abord [`python-multipart`](https://github.com/Kludex/python-multipart).
 
-Assurez-vous de crĂ©er un [environnement virtuel](../virtual-environments.md){.internal-link target=_blank}, de l'activer, puis d'installer le paquet, par exemple :
+Assurez-vous de crĂ©er un [environnement virtuel](../virtual-environments.md), de l'activer, puis d'installer le paquet, par exemple :
 
 ```console
 $ pip install python-multipart
@@ -63,8 +63,8 @@ Utiliser `UploadFile` prĂ©sente plusieurs avantages par rapport Ă  `bytes` :
     - Un fichier stockĂ© en mĂ©moire jusqu'Ă  une taille maximale, puis, au-delĂ  de cette limite, stockĂ© sur le disque.
 - Cela fonctionne donc bien pour des fichiers volumineux comme des images, des vidĂ©os, de gros binaires, etc., sans consommer toute la mĂ©moire.
 - Vous pouvez obtenir des mĂ©tadonnĂ©es Ă  partir du fichier tĂ©lĂ©versĂ©.
-- Il offre une interface `async` de type <a href="https://docs.python.org/3/glossary.html#term-file-like-object" class="external-link" target="_blank">file-like</a>.
-- Il expose un vĂ©ritable objet Python <a href="https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile" class="external-link" target="_blank">`SpooledTemporaryFile`</a> que vous pouvez passer directement Ă  d'autres bibliothĂšques qui attendent un objet Â« file-like Â».
+- Il offre une interface `async` de type [file-like](https://docs.python.org/3/glossary.html#term-file-like-object).
+- Il expose un vĂ©ritable objet Python [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) que vous pouvez passer directement Ă  d'autres bibliothĂšques qui attendent un objet Â« file-like Â».
 
 ### `UploadFile` { #uploadfile }
 
@@ -72,7 +72,7 @@ Utiliser `UploadFile` prĂ©sente plusieurs avantages par rapport Ă  `bytes` :
 
 - `filename` : une `str` contenant le nom de fichier original tĂ©lĂ©versĂ© (par ex. `myimage.jpg`).
 - `content_type` : une `str` avec le type de contenu (type MIME / type mĂ©dia) (par ex. `image/jpeg`).
-- `file` : un <a href="https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile" class="external-link" target="_blank">`SpooledTemporaryFile`</a> (un objet <a href="https://docs.python.org/3/glossary.html#term-file-like-object" class="external-link" target="_blank">de type fichier</a>). C'est l'objet fichier Python rĂ©el que vous pouvez passer directement Ă  d'autres fonctions ou bibliothĂšques qui attendent un objet Â« file-like Â».
+- `file` : un [`SpooledTemporaryFile`](https://docs.python.org/3/library/tempfile.html#tempfile.SpooledTemporaryFile) (un objet [file-like](https://docs.python.org/3/glossary.html#term-file-like-object)). C'est l'objet fichier Python rĂ©el que vous pouvez passer directement Ă  d'autres fonctions ou bibliothĂšques qui attendent un objet Â« file-like Â».
 
 `UploadFile` a les mĂ©thodes `async` suivantes. Elles appellent toutes les mĂ©thodes correspondantes du fichier sous-jacent (en utilisant le `SpooledTemporaryFile` interne).
 
@@ -121,7 +121,7 @@ Les donnĂ©es des formulaires sont normalement encodĂ©es avec le Â« type de mĂ©di
 
 Mais lorsque le formulaire inclut des fichiers, il est encodĂ© en `multipart/form-data`. Si vous utilisez `File`, **FastAPI** saura qu'il doit rĂ©cupĂ©rer les fichiers depuis la partie appropriĂ©e du corps.
 
-Si vous souhaitez en savoir plus sur ces encodages et les champs de formulaire, consultez la <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST" class="external-link" target="_blank"><abbr title="Mozilla Developer Network - RĂ©seau des dĂ©veloppeurs Mozilla">MDN</abbr> Web Docs pour <code>POST</code></a>.
+Si vous souhaitez 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).
 
 ///
 
index 3fbac9c74a8617ae941c3c58b8d5608ae8b4add7..0f1e6dcfd178bb4a7fdc4d4978875c5cb3160b56 100644 (file)
@@ -4,9 +4,9 @@ Vous pouvez utiliser des **modĂšles Pydantic** pour dĂ©clarer des **champs de fo
 
 /// info
 
-Pour utiliser les formulaires, installez d'abord <a href="https://github.com/Kludex/python-multipart" class="external-link" target="_blank">`python-multipart`</a>.
+Pour utiliser les formulaires, installez d'abord [`python-multipart`](https://github.com/Kludex/python-multipart).
 
-Assurez-vous de crĂ©er un [environnement virtuel](../virtual-environments.md){.internal-link target=_blank}, de l'activer, puis d'installer le paquet, par exemple :
+Assurez-vous de crĂ©er un [environnement virtuel](../virtual-environments.md), de l'activer, puis d'installer le paquet, par exemple :
 
 ```console
 $ pip install python-multipart
index 6774eec8e4c59a303dc967a814bc56d3e8e24785..2e3f5b58bcbdbcf3aa3d6f1384aac2305842b50d 100644 (file)
@@ -4,9 +4,9 @@ Vous pouvez dĂ©finir des fichiers et des champs de formulaire en mĂȘme temps Ă 
 
 /// info
 
-Pour recevoir des fichiers tĂ©lĂ©versĂ©s et/ou des donnĂ©es de formulaire, installez d'abord <a href="https://github.com/Kludex/python-multipart" class="external-link" target="_blank">`python-multipart`</a>.
+Pour recevoir des fichiers tĂ©lĂ©versĂ©s et/ou des donnĂ©es de formulaire, installez d'abord [`python-multipart`](https://github.com/Kludex/python-multipart).
 
-Vous devez crĂ©er un [environnement virtuel](../virtual-environments.md){.internal-link target=_blank}, l'activer, puis installer ce paquet, par exemple :
+Vous devez crĂ©er un [environnement virtuel](../virtual-environments.md), l'activer, puis installer ce paquet, par exemple :
 
 ```console
 $ pip install python-multipart
index cea47c93e6d447f78225515bbf23152abbb1682a..9596f68ce2edaaa9bf4baf92ba32ceb2625659d9 100644 (file)
@@ -4,9 +4,9 @@ Lorsque vous devez recevoir des champs de formulaire au lieu de JSON, vous pouve
 
 /// info
 
-Pour utiliser les formulaires, installez d'abord <a href="https://github.com/Kludex/python-multipart" class="external-link" target="_blank">`python-multipart`</a>.
+Pour utiliser les formulaires, installez d'abord [`python-multipart`](https://github.com/Kludex/python-multipart).
 
-Assurez-vous de crĂ©er un [environnement virtuel](../virtual-environments.md){.internal-link target=_blank}, de l'activer, puis d'installer ce paquet, par exemple :
+Assurez-vous de crĂ©er un [environnement virtuel](../virtual-environments.md), de l'activer, puis installez-le, par exemple :
 
 ```console
 $ pip install python-multipart
@@ -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 <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST" class="external-link" target="_blank"><abbr title="Mozilla Developer Network - RĂ©seau des dĂ©veloppeurs Mozilla">MDN</abbr> web docs pour <code>POST</code></a>.
+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).
 
 ///
 
index 337b1aa485728d5f8a5138741088afcf44569a65..e3926a0c12ed9530370e77070820c15e39d512b3 100644 (file)
@@ -13,6 +13,7 @@ FastAPI utilisera ce type de retour pour :
 * Ajouter un **JSON Schema** pour la rĂ©ponse, dans l’OpenAPI du *chemin d'accĂšs*.
     * Ceci sera utilisĂ© par la **documentation automatique**.
     * Ceci sera Ă©galement utilisĂ© par les outils de gĂ©nĂ©ration automatique de code client.
+* **SĂ©rialiser** les donnĂ©es renvoyĂ©es en JSON en utilisant Pydantic, qui est Ă©crit en **Rust**, ce qui sera **beaucoup plus rapide**.
 
 Mais surtout :
 
@@ -73,9 +74,9 @@ Ici, nous dĂ©clarons un modĂšle `UserIn`, il contiendra un mot de passe en clair
 
 /// info | Info
 
-Pour utiliser `EmailStr`, installez d'abord <a href="https://github.com/JoshData/python-email-validator" class="external-link" target="_blank">`email-validator`</a>.
+Pour utiliser `EmailStr`, installez d'abord [`email-validator`](https://github.com/JoshData/python-email-validator).
 
-Assurez-vous de crĂ©er un [environnement virtuel](../virtual-environments.md){.internal-link target=_blank}, de l'activer, puis de l'installer, par exemple :
+Assurez-vous de crĂ©er un [environnement virtuel](../virtual-environments.md), de l'activer, puis de l'installer, par exemple :
 
 ```console
 $ pip install email-validator
@@ -181,7 +182,7 @@ Il peut y avoir des cas oĂč vous renvoyez quelque chose qui n'est pas un champ P
 
 ### Renvoyer directement une Response { #return-a-response-directly }
 
-Le cas le plus courant serait [de renvoyer directement une Response comme expliquĂ© plus loin dans la documentation avancĂ©e](../advanced/response-directly.md){.internal-link target=_blank}.
+Le cas le plus courant serait [de renvoyer directement une Response comme expliquĂ© plus loin dans la documentation avancĂ©e](../advanced/response-directly.md).
 
 {* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *}
 
@@ -257,7 +258,7 @@ Vous pouvez Ă©galement utiliser :
 * `response_model_exclude_defaults=True`
 * `response_model_exclude_none=True`
 
-comme dĂ©crit dans <a href="https://docs.pydantic.dev/1.10/usage/exporting_models/#modeldict" class="external-link" target="_blank">la documentation Pydantic</a> pour `exclude_defaults` et `exclude_none`.
+comme dĂ©crit dans [la documentation Pydantic](https://docs.pydantic.dev/1.10/usage/exporting_models/#modeldict) pour `exclude_defaults` et `exclude_none`.
 
 ///
 
index 388a53b3dfdbdeda89debd1cee809e42cf62c329..c8e45cd40edf115707103db5785ad7b834adcf86 100644 (file)
@@ -20,7 +20,7 @@ Le paramĂštre `status_code` reçoit un nombre correspondant au code d'Ă©tat HTTP
 
 /// info
 
-`status_code` peut aussi recevoir un `IntEnum`, comme le <a href="https://docs.python.org/3/library/http.html#http.HTTPStatus" class="external-link" target="_blank">`http.HTTPStatus`</a> de Python.
+`status_code` peut aussi recevoir un `IntEnum`, comme le [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus) de Python.
 
 ///
 
@@ -66,7 +66,7 @@ En bref :
 
 /// tip | Astuce
 
-Pour en savoir plus sur chaque code d'Ă©tat et Ă  quoi il correspond, consultez la <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status" class="external-link" target="_blank"><abbr title="Mozilla Developer Network - RĂ©seau des dĂ©veloppeurs Mozilla">MDN</abbr> documentation about HTTP status codes</a>.
+Pour en savoir plus sur chaque code d'Ă©tat et Ă  quoi il correspond, consultez la [<abbr title="Mozilla Developer Network - RĂ©seau des dĂ©veloppeurs Mozilla">MDN</abbr> documentation sur les codes d'Ă©tat HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status).
 
 ///
 
@@ -92,10 +92,10 @@ Elles ne sont qu'une commoditĂ©, elles contiennent le mĂȘme nombre, mais de cett
 
 Vous pourriez aussi utiliser `from starlette import status`.
 
-FastAPI fournit le mĂȘme `starlette.status` que `fastapi.status`, uniquement pour votre commoditĂ© de dĂ©veloppeur. Mais cela vient directement de Starlette.
+**FastAPI** fournit le mĂȘme `starlette.status` que `fastapi.status`, uniquement pour votre commoditĂ© de dĂ©veloppeur. Mais cela vient directement de Starlette.
 
 ///
 
 ## Modifier la valeur par dĂ©faut { #changing-the-default }
 
-Plus tard, dans le [Guide utilisateur avancĂ©](../advanced/response-change-status-code.md){.internal-link target=_blank}, vous verrez comment renvoyer un code d'Ă©tat diffĂ©rent de celui par dĂ©faut que vous dĂ©clarez ici.
+Plus tard, dans le [Guide utilisateur avancĂ©](../advanced/response-change-status-code.md), vous verrez comment renvoyer un code d'Ă©tat diffĂ©rent de celui par dĂ©faut que vous dĂ©clarez ici.
index d4403c779bf7c48ce1dcaf52f67434d1cef19079..404edff46d1c8b67e751c1bd66ce4313c24f4e4c 100644 (file)
@@ -12,7 +12,7 @@ Vous pouvez dĂ©clarer `examples` pour un modĂšle Pydantic qui seront ajoutĂ©s au
 
 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.
 
-Vous pouvez utiliser l'attribut `model_config` qui accepte un `dict` comme dĂ©crit dans <a href="https://docs.pydantic.dev/latest/api/config/" class="external-link" target="_blank">Documentation de Pydantic : Configuration</a>.
+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 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`.
 
@@ -145,12 +145,12 @@ JSON Schema n'avait pas `examples`, donc OpenAPI a ajoutĂ© son propre champ `exa
 
 OpenAPI a Ă©galement ajoutĂ© les champs `example` et `examples` Ă  d'autres parties de la spĂ©cification :
 
-* <a href="https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object" class="external-link" target="_blank">`Parameter Object` (dans la spĂ©cification)</a> qui Ă©tait utilisĂ© par les Ă©lĂ©ments FastAPI :
+* [`Parameter Object` (dans la spĂ©cification)](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#parameter-object) qui Ă©tait utilisĂ© par les Ă©lĂ©ments FastAPI :
     * `Path()`
     * `Query()`
     * `Header()`
     * `Cookie()`
-* <a href="https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object" class="external-link" target="_blank">`Request Body Object`, dans le champ `content`, sur le `Media Type Object` (dans la spĂ©cification)</a> qui Ă©tait utilisĂ© par les Ă©lĂ©ments FastAPI :
+* [`Request Body Object`, dans le champ `content`, sur le `Media Type Object` (dans la spĂ©cification)](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md#media-type-object) qui Ă©tait utilisĂ© par les Ă©lĂ©ments FastAPI :
     * `Body()`
     * `File()`
     * `Form()`
@@ -163,7 +163,7 @@ Ce paramĂštre `examples` ancien et spĂ©cifique Ă  OpenAPI est dĂ©sormais `openap
 
 ### Le champ `examples` de JSON Schema { #json-schemas-examples-field }
 
-Ensuite, JSON Schema a ajoutĂ© un champ <a href="https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.5" class="external-link" target="_blank">`examples`</a> dans une nouvelle version de la spĂ©cification.
+Ensuite, JSON Schema a ajoutĂ© un champ [`examples`](https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.5) dans une nouvelle version de la spĂ©cification.
 
 Puis le nouveau OpenAPI 3.1.0 s'est basĂ© sur la derniĂšre version (JSON Schema 2020-12) qui incluait ce nouveau champ `examples`.
 
index 8c4eb50d765a5964e25a574d4e314c0f5c2226da..c1d36d501c96f333cd18f233dfdad77bf846d5ff 100644 (file)
@@ -26,11 +26,11 @@ Copiez l'exemple dans un fichier `main.py` :
 
 /// info
 
-Le package <a href="https://github.com/Kludex/python-multipart" class="external-link" target="_blank">`python-multipart`</a> est installĂ© automatiquement avec **FastAPI** lorsque vous exĂ©cutez la commande `pip install "fastapi[standard]"`.
+Le package [`python-multipart`](https://github.com/Kludex/python-multipart) est installĂ© automatiquement avec **FastAPI** lorsque vous exĂ©cutez la commande `pip install "fastapi[standard]"`.
 
 Cependant, si vous utilisez la commande `pip install fastapi`, le package `python-multipart` n'est pas inclus par dĂ©faut.
 
-Pour l'installer manuellement, vous devez vous assurer de crĂ©er un [environnement virtuel](../../virtual-environments.md){.internal-link target=_blank}, de l'activer, puis de l'installer avec :
+Pour l'installer manuellement, vous devez vous assurer de crĂ©er un [environnement virtuel](../../virtual-environments.md), de l'activer, puis de l'installer avec :
 
 ```console
 $ pip install python-multipart
@@ -45,7 +45,7 @@ ExĂ©cutez l'exemple avec :
 <div class="termy">
 
 ```console
-$ fastapi dev main.py
+$ fastapi dev
 
 <span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
 ```
@@ -54,7 +54,7 @@ $ fastapi dev main.py
 
 ## VĂ©rifier { #check-it }
 
-Allez Ă  la documentation interactive Ă  l'adresse : <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
+Allez Ă  la documentation interactive Ă  l'adresse : [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
 
 Vous verrez quelque chose comme ceci :
 
@@ -140,7 +140,7 @@ Ici `tokenUrl="token"` fait rĂ©fĂ©rence Ă  une URL relative `token` que nous n'a
 
 Parce que nous utilisons une URL relative, si votre API se trouvait Ă  `https://example.com/`, alors elle ferait rĂ©fĂ©rence Ă  `https://example.com/token`. Mais si votre API se trouvait Ă  `https://example.com/api/v1/`, alors elle ferait rĂ©fĂ©rence Ă  `https://example.com/api/v1/token`.
 
-Utiliser une URL relative est important pour vous assurer que votre application continue de fonctionner mĂȘme dans un cas d'usage avancĂ© comme [DerriĂšre un proxy](../../advanced/behind-a-proxy.md){.internal-link target=_blank}.
+Utiliser une URL relative est important pour vous assurer que votre application continue de fonctionner mĂȘme dans un cas d'usage avancĂ© comme [DerriĂšre un proxy](../../advanced/behind-a-proxy.md).
 
 ///
 
index d35530fc9cee07a643dee87f74998c02b88c3a20..eec5ab13c0b5797ea9cd8ed1db4d0880d3379a3f 100644 (file)
@@ -24,13 +24,13 @@ De cette façon, vous pouvez crĂ©er un jeton avec une expiration d'une semaine,
 
 AprĂšs une semaine, le jeton aura expirĂ© et l'utilisateur ne sera pas autorisĂ© et devra se reconnecter pour obtenir un nouveau jeton. Et si l'utilisateur (ou un tiers) essayait de modifier le jeton pour changer l'expiration, vous pourriez le dĂ©tecter, car les signatures ne correspondraient pas.
 
-Si vous voulez expĂ©rimenter avec des jetons JWT et voir comment ils fonctionnent, consultez <a href="https://jwt.io/" class="external-link" target="_blank">https://jwt.io</a>.
+Si vous voulez expĂ©rimenter avec des jetons JWT et voir comment ils fonctionnent, consultez [https://jwt.io](https://jwt.io/).
 
 ## Installer `PyJWT` { #install-pyjwt }
 
 Nous devons installer `PyJWT` pour gĂ©nĂ©rer et vĂ©rifier les jetons JWT en Python.
 
-Assurez-vous de crĂ©er un [environnement virtuel](../../virtual-environments.md){.internal-link target=_blank}, de l'activer, puis d'installer `pyjwt` :
+Assurez-vous de crĂ©er un [environnement virtuel](../../virtual-environments.md), de l'activer, puis d'installer `pyjwt` :
 
 <div class="termy">
 
@@ -46,7 +46,7 @@ $ pip install pyjwt
 
 Si vous prĂ©voyez d'utiliser des algorithmes de signature numĂ©rique comme RSA ou ECDSA, vous devez installer la dĂ©pendance de bibliothĂšque de cryptographie `pyjwt[crypto]`.
 
-Vous pouvez en lire davantage dans la <a href="https://pyjwt.readthedocs.io/en/latest/installation.html" class="external-link" target="_blank">documentation d'installation de PyJWT</a>.
+Vous pouvez en lire davantage dans la [documentation d'installation de PyJWT](https://pyjwt.readthedocs.io/en/latest/installation.html).
 
 ///
 
@@ -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 de passe { #why-use-password-hashing }
+### Pourquoi utiliser le hachage de mot 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.
 
@@ -72,7 +72,7 @@ Il prend en charge de nombreux algorithmes de hachage sĂ©curisĂ©s et des utilita
 
 L'algorithme recommandĂ© est Â« Argon2 Â».
 
-Assurez-vous de crĂ©er un [environnement virtuel](../../virtual-environments.md){.internal-link target=_blank}, de l'activer, puis d'installer pwdlib avec Argon2 :
+Assurez-vous de crĂ©er un [environnement virtuel](../../virtual-environments.md), de l'activer, puis d'installer pwdlib avec Argon2 :
 
 <div class="termy">
 
@@ -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 : <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
+Lancez le serveur et allez Ă  la documentation : [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
 
 Vous verrez l'interface utilisateur suivante :
 
index 662444753ba454537d175a425a776d4a4dd3b74a..f47d94aa206b5512ce24e98492cf06fb5250c69d 100644 (file)
@@ -4,7 +4,7 @@ Construisons maintenant Ă  partir du chapitre prĂ©cĂ©dent et ajoutons les Ă©lĂ©m
 
 ## Obtenir `username` et `password` { #get-the-username-and-password }
 
-Nous allons utiliser les utilitaires de sĂ©curitĂ© de **FastAPI** pour obtenir `username` et `password`.
+Nous allons utiliser les utilitĂ©s de sĂ©curitĂ© de **FastAPI** pour obtenir `username` et `password`.
 
 OAuth2 spĂ©cifie que lorsqu'on utilise le Â« password flow Â» (ce que nous utilisons), le client/utilisateur doit envoyer des champs `username` et `password` en tant que donnĂ©es de formulaire.
 
@@ -46,7 +46,7 @@ Pour OAuth2, ce ne sont que des chaĂźnes.
 
 ## Ă‰crire le code pour obtenir `username` et `password` { #code-to-get-the-username-and-password }
 
-Utilisons maintenant les utilitaires fournis par **FastAPI** pour gĂ©rer cela.
+Utilisons maintenant les utilitĂ©s fournies par **FastAPI** pour gĂ©rer cela.
 
 ### `OAuth2PasswordRequestForm` { #oauth2passwordrequestform }
 
@@ -146,7 +146,7 @@ UserInDB(
 
 /// info
 
-Pour une explication plus complĂšte de `**user_dict`, consultez [la documentation pour **ModĂšles supplĂ©mentaires**](../extra-models.md#about-user-in-dict){.internal-link target=_blank}.
+Pour une explication plus complĂšte de `**user_dict`, consultez [la documentation pour **ModĂšles supplĂ©mentaires**](../extra-models.md#about-user-in-dict).
 
 ///
 
@@ -216,7 +216,7 @@ C'est l'avantage des standards ...
 
 ## Voir en action { #see-it-in-action }
 
-Ouvrez la documentation interactive : <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
+Ouvrez la documentation interactive : [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs).
 
 ### S'authentifier { #authenticate }
 
index 75f9ae14fc23bbece88c2a26188acbb7061f3131..70e5b1dbab638e8fb122e131abaf757ae3b36227 100644 (file)
@@ -2,9 +2,9 @@
 
 **FastAPI** ne vous oblige pas Ă  utiliser une base de donnĂ©es SQL (relationnelle). Mais vous pouvez utiliser **n'importe quelle base de donnĂ©es** que vous voulez.
 
-Ici, nous allons voir un exemple utilisant <a href="https://sqlmodel.tiangolo.com/" class="external-link" target="_blank">SQLModel</a>.
+Ici, nous allons voir un exemple utilisant [SQLModel](https://sqlmodel.tiangolo.com/).
 
-**SQLModel** est construit au-dessus de <a href="https://www.sqlalchemy.org/" class="external-link" target="_blank">SQLAlchemy</a> et de Pydantic. Il a Ă©tĂ© créé par le mĂȘme auteur que **FastAPI** pour ĂȘtre l'accord parfait pour les applications FastAPI qui ont besoin d'utiliser des **bases de donnĂ©es SQL**.
+**SQLModel** est construit au-dessus de [SQLAlchemy](https://www.sqlalchemy.org/) et de Pydantic. Il a Ă©tĂ© créé par le mĂȘme auteur que **FastAPI** pour ĂȘtre l'accord parfait pour les applications FastAPI qui ont besoin d'utiliser des **bases de donnĂ©es SQL**.
 
 /// tip | Astuce
 
@@ -26,15 +26,15 @@ Plus tard, pour votre application de production, vous voudrez peut-ĂȘtre utilise
 
 /// tip | Astuce
 
-Il existe un gĂ©nĂ©rateur de projet officiel avec **FastAPI** et **PostgreSQL**, incluant un frontend et plus d'outils : <a href="https://github.com/fastapi/full-stack-fastapi-template" class="external-link" target="_blank">https://github.com/fastapi/full-stack-fastapi-template</a>
+Il existe un gĂ©nĂ©rateur de projet officiel avec **FastAPI** et **PostgreSQL**, incluant un frontend et plus d'outils : [https://github.com/fastapi/full-stack-fastapi-template](https://github.com/fastapi/full-stack-fastapi-template)
 
 ///
 
-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 <a href="https://sqlmodel.tiangolo.com/" class="external-link" target="_blank">documentation SQLModel</a>.
+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/).
 
 ## Installer `SQLModel` { #install-sqlmodel }
 
-D'abord, assurez-vous de crĂ©er votre [environnement virtuel](../virtual-environments.md){.internal-link target=_blank}, de l'activer, puis d'installer `sqlmodel` :
+D'abord, assurez-vous de crĂ©er votre [environnement virtuel](../virtual-environments.md), de l'activer, puis d'installer `sqlmodel` :
 
 <div class="termy">
 
@@ -65,7 +65,7 @@ Il y a quelques diffĂ©rences :
 
 * `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).
 
-    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 <a href="https://sqlmodel.tiangolo.com/tutorial/create-db-and-table/#primary-key-id" class="external-link" target="_blank">documentation SQLModel sur les clĂ©s primaires</a> 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 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.
 
 * `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.
 
@@ -111,7 +111,7 @@ En production, vous utiliseriez probablement un script de migration qui s'exĂ©cu
 
 /// tip | Astuce
 
-SQLModel aura des utilitaires de migration enveloppant Alembic, mais pour l'instant, vous pouvez utiliser <a href="https://alembic.sqlalchemy.org/en/latest/" class="external-link" target="_blank">Alembic</a> directement.
+SQLModel aura des utilitaires de migration enveloppant Alembic, mais pour l'instant, vous pouvez utiliser [Alembic](https://alembic.sqlalchemy.org/en/latest/) directement.
 
 ///
 
@@ -152,7 +152,7 @@ Vous pouvez exĂ©cuter l'application :
 <div class="termy">
 
 ```console
-$ fastapi dev main.py
+$ fastapi dev
 
 <span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
 ```
@@ -337,7 +337,7 @@ Vous pouvez exĂ©cuter l'application Ă  nouveau :
 <div class="termy">
 
 ```console
-$ fastapi dev main.py
+$ fastapi dev
 
 <span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
 ```
@@ -352,6 +352,6 @@ Si vous allez sur l'UI `/docs` de l'API, vous verrez qu'elle est maintenant Ă  j
 
 ## RĂ©capitulatif { #recap }
 
-Vous pouvez utiliser <a href="https://sqlmodel.tiangolo.com/" class="external-link" target="_blank">**SQLModel**</a> 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 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 <a href="https://sqlmodel.tiangolo.com/tutorial/fastapi/" class="external-link" target="_blank">tutoriel plus long sur l'utilisation de SQLModel avec **FastAPI**</a>. đŸš€
+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/). đŸš€
index 3928fed9bc46fbcc0c39459758998215959bc6c5..6a54840afbb7820ad98d8189da0d00d7c71d3b39 100644 (file)
@@ -23,7 +23,7 @@ Vous pouvez Ă©galement utiliser `from starlette.staticfiles import StaticFiles`.
 
 Cela diffĂšre de l'utilisation d'un `APIRouter`, car une application montĂ©e est complĂštement indĂ©pendante. L'OpenAPI et les documents de votre application principale n'incluront rien provenant de l'application montĂ©e, etc.
 
-Vous pouvez en lire davantage Ă  ce sujet dans le [Guide utilisateur avancĂ©](../advanced/index.md){.internal-link target=_blank}.
+Vous pouvez en lire davantage Ă  ce sujet dans le [Guide utilisateur avancĂ©](../advanced/index.md).
 
 ## DĂ©tails { #details }
 
@@ -37,4 +37,4 @@ Tous ces paramĂštres peuvent ĂȘtre diffĂ©rents de Â« `static` Â», adaptez-les au
 
 ## Plus d'informations { #more-info }
 
-Pour plus de dĂ©tails et d'options, consultez la <a href="https://www.starlette.dev/staticfiles/" class="external-link" target="_blank">documentation de Starlette sur les fichiers statiques</a>.
+Pour plus de dĂ©tails et d'options, consultez la [documentation de Starlette sur les fichiers statiques](https://www.starlette.dev/staticfiles/).
index 8a609b644d81d5204d25cf288b77e9b76220654d..5cb2ee62903629d6d4e585bb801ffb3467118ece 100644 (file)
@@ -1,18 +1,18 @@
 # Tester { #testing }
 
-GrĂące Ă  <a href="https://www.starlette.dev/testclient/" class="external-link" target="_blank">Starlette</a>, tester des applications **FastAPI** est simple et agrĂ©able.
+GrĂące Ă  [Starlette](https://www.starlette.dev/testclient/), tester des applications **FastAPI** est simple et agrĂ©able.
 
-C’est basĂ© sur <a href="https://www.python-httpx.org" class="external-link" target="_blank">HTTPX</a>, dont la conception s’inspire de Requests, ce qui le rend trĂšs familier et intuitif.
+C’est basĂ© sur [HTTPX](https://www.python-httpx.org), dont la conception s’inspire de Requests, ce qui le rend trĂšs familier et intuitif.
 
-Avec cela, vous pouvez utiliser <a href="https://docs.pytest.org/" class="external-link" target="_blank">pytest</a> directement avec **FastAPI**.
+Avec cela, vous pouvez utiliser [pytest](https://docs.pytest.org/) directement avec **FastAPI**.
 
 ## Utiliser `TestClient` { #using-testclient }
 
 /// info
 
-Pour utiliser `TestClient`, installez d’abord <a href="https://www.python-httpx.org" class="external-link" target="_blank">`httpx`</a>.
+Pour utiliser `TestClient`, installez d’abord [`httpx`](https://www.python-httpx.org).
 
-Vous devez crĂ©er un [environnement virtuel](../virtual-environments.md){.internal-link target=_blank}, l’activer, puis y installer le paquet, par exemple :
+Vous devez crĂ©er un [environnement virtuel](../virtual-environments.md), l’activer, puis y installer le paquet, par exemple :
 
 ```console
 $ pip install httpx
@@ -52,7 +52,7 @@ Vous pouvez aussi utiliser `from starlette.testclient import TestClient`.
 
 /// tip | Astuce
 
-Si vous souhaitez appeler des fonctions `async` dans vos tests en dehors de l’envoi de requĂȘtes Ă  votre application FastAPI (par exemple des fonctions de base de donnĂ©es asynchrones), consultez les [Tests asynchrones](../advanced/async-tests.md){.internal-link target=_blank} dans le tutoriel avancĂ©.
+Si vous souhaitez appeler des fonctions `async` dans vos tests en dehors de l’envoi de requĂȘtes Ă  votre application FastAPI (par exemple des fonctions de base de donnĂ©es asynchrones), consultez les [Tests asynchrones](../advanced/async-tests.md) dans le tutoriel avancĂ©.
 
 ///
 
@@ -64,7 +64,7 @@ Et votre application **FastAPI** pourrait aussi ĂȘtre composĂ©e de plusieurs fic
 
 ### Fichier d’application **FastAPI** { #fastapi-app-file }
 
-Supposons que vous ayez une structure de fichiers comme dĂ©crit dans [Applications plus grandes](bigger-applications.md){.internal-link target=_blank} :
+Supposons que vous ayez une structure de fichiers comme dĂ©crit dans [Applications plus grandes](bigger-applications.md) :
 
 ```
 .
@@ -142,13 +142,13 @@ Par exemple :
 * Pour passer des en-tĂȘtes, utilisez un `dict` dans le paramĂštre `headers`.
 * Pour les cookies, un `dict` dans le paramĂštre `cookies`.
 
-Pour plus d’informations sur la maniĂšre de transmettre des donnĂ©es au backend (en utilisant `httpx` ou le `TestClient`), consultez la <a href="https://www.python-httpx.org" class="external-link" target="_blank">documentation HTTPX</a>.
+Pour plus d’informations sur la maniĂšre de transmettre des donnĂ©es au backend (en utilisant `httpx` ou le `TestClient`), consultez la [documentation HTTPX](https://www.python-httpx.org).
 
 /// info
 
 Notez que le `TestClient` reçoit des donnĂ©es qui peuvent ĂȘtre converties en JSON, pas des modĂšles Pydantic.
 
-Si vous avez un modĂšle Pydantic dans votre test et que vous souhaitez envoyer ses donnĂ©es Ă  l’application pendant les tests, vous pouvez utiliser le `jsonable_encoder` dĂ©crit dans [Encodeur compatible JSON](encoder.md){.internal-link target=_blank}.
+Si vous avez un modĂšle Pydantic dans votre test et que vous souhaitez envoyer ses donnĂ©es Ă  l’application pendant les tests, vous pouvez utiliser le `jsonable_encoder` dĂ©crit dans [Encodeur compatible JSON](encoder.md).
 
 ///
 
@@ -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){.internal-link target=_blank}, l’activer, puis y installer le paquet, par exemple :
+Vous devez crĂ©er un [environnement virtuel](../virtual-environments.md), l’activer, puis y installer le paquet, par exemple :
 
 <div class="termy">
 
index 86b5faadce41078d0c57a9ccb9b69703c4b19f65..4793e5dac2a376b03fb80b612fcb787d1f3d725c 100644 (file)
@@ -22,7 +22,7 @@ Un environnement virtuel est un rĂ©pertoire contenant certains fichiers.
 
 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 <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">uv</a>.
+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).
 
 ///
 
@@ -86,7 +86,7 @@ $ python -m venv .venv
 
 //// tab | `uv`
 
-Si vous avez installĂ© <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a>, vous pouvez l’utiliser pour crĂ©er un environnement virtuel.
+Si vous avez installĂ© [`uv`](https://github.com/astral-sh/uv), vous pouvez l’utiliser pour crĂ©er un environnement virtuel.
 
 <div class="termy">
 
@@ -150,7 +150,7 @@ $ .venv\Scripts\Activate.ps1
 
 //// tab | Windows Bash
 
-Ou si vous utilisez Bash pour Windows (par exemple <a href="https://gitforwindows.org/" class="external-link" target="_blank">Git Bash</a>) :
+Ou si vous utilisez Bash pour Windows (par exemple [Git Bash](https://gitforwindows.org/)) :
 
 <div class="termy">
 
@@ -216,7 +216,7 @@ S’il affiche le binaire `python` Ă  `.venv\Scripts\python`, dans votre projet
 
 /// tip | Astuce
 
-Si vous utilisez <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a>, vous l’utiliserez pour installer des Ă©lĂ©ments Ă  la place de `pip`, vous n’avez donc pas besoin de mettre `pip` Ă  niveau. đŸ˜Ž
+Si vous utilisez [`uv`](https://github.com/astral-sh/uv), vous l’utiliserez pour installer des Ă©lĂ©ments Ă  la place de `pip`, vous n’avez donc pas besoin de mettre `pip` Ă  niveau. đŸ˜Ž
 
 ///
 
@@ -268,7 +268,7 @@ Si vous utilisez Git (vous devriez), ajoutez un fichier `.gitignore` pour exclur
 
 /// tip | Astuce
 
-Si vous avez utilisĂ© <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a> pour crĂ©er l’environnement virtuel, il l’a dĂ©jĂ  fait pour vous, vous pouvez passer cette Ă©tape. đŸ˜Ž
+Si vous avez utilisĂ© [`uv`](https://github.com/astral-sh/uv) pour crĂ©er l’environnement virtuel, il l’a dĂ©jĂ  fait pour vous, vous pouvez passer cette Ă©tape. đŸ˜Ž
 
 ///
 
@@ -340,7 +340,7 @@ $ pip install "fastapi[standard]"
 
 //// tab | `uv`
 
-Si vous avez <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a> :
+Si vous avez [`uv`](https://github.com/astral-sh/uv) :
 
 <div class="termy">
 
@@ -372,7 +372,7 @@ $ pip install -r requirements.txt
 
 //// tab | `uv`
 
-Si vous avez <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">`uv`</a> :
+Si vous avez [`uv`](https://github.com/astral-sh/uv) :
 
 <div class="termy">
 
@@ -416,8 +416,8 @@ Vous utiliserez probablement un Ă©diteur, assurez-vous de le configurer pour uti
 
 Par exemple :
 
-* <a href="https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment" class="external-link" target="_blank">VS Code</a>
-* <a href="https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html" class="external-link" target="_blank">PyCharm</a>
+* [VS Code](https://code.visualstudio.com/docs/python/environments#_select-and-activate-an-environment)
+* [PyCharm](https://www.jetbrains.com/help/pycharm/creating-virtual-environment.html)
 
 /// tip | Astuce
 
@@ -455,7 +455,7 @@ Continuez la lecture. đŸ‘‡đŸ€“
 
 ## Pourquoi des environnements virtuels { #why-virtual-environments }
 
-Pour travailler avec FastAPI, vous devez installer <a href="https://www.python.org/" class="external-link" target="_blank">Python</a>.
+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.
 
@@ -564,7 +564,7 @@ $ pip install "fastapi[standard]"
 
 </div>
 
-Cela tĂ©lĂ©chargera un fichier compressĂ© avec le code de FastAPI, normalement depuis <a href="https://pypi.org/project/fastapi/" class="external-link" target="_blank">PyPI</a>.
+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.
 
@@ -627,7 +627,7 @@ $ .venv\Scripts\Activate.ps1
 
 //// tab | Windows Bash
 
-Ou si vous utilisez Bash pour Windows (par exemple <a href="https://gitforwindows.org/" class="external-link" target="_blank">Git Bash</a>) :
+Ou si vous utilisez Bash pour Windows (par exemple [Git Bash](https://gitforwindows.org/)) :
 
 <div class="termy">
 
@@ -639,13 +639,13 @@ $ source .venv/Scripts/activate
 
 ////
 
-Cette commande crĂ©era ou modifiera certaines [variables d’environnement](environment-variables.md){.internal-link target=_blank} qui seront disponibles pour les prochaines commandes.
+Cette commande crĂ©era ou modifiera certaines [variables d’environnement](environment-variables.md) qui seront disponibles pour les prochaines commandes.
 
 L’une de ces variables est la variable `PATH`.
 
 /// tip | Astuce
 
-Vous pouvez en savoir plus sur la variable d’environnement `PATH` dans la section [Variables d’environnement](environment-variables.md#path-environment-variable){.internal-link target=_blank}.
+Vous pouvez en savoir plus sur la variable d’environnement `PATH` dans la section [Variables d’environnement](environment-variables.md#path-environment-variable).
 
 ///
 
@@ -846,7 +846,7 @@ Ceci est un guide simple pour vous lancer et vous montrer comment tout fonctionn
 
 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 <a href="https://github.com/astral-sh/uv" class="external-link" target="_blank">uv</a>.
+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).
 
 `uv` peut faire beaucoup de choses, il peut :