diff --git a/docs/fr/docs/alternatives.md b/docs/fr/docs/alternatives.md
new file mode 100644
index 00000000..bf3e7bc3
--- /dev/null
+++ b/docs/fr/docs/alternatives.md
@@ -0,0 +1,446 @@
+# Alternatives, inspiration et comparaisons
+
+Ce qui a inspiré **FastAPI**, comment il se compare à d'autres solutions et ce qu'il en a appris.
+
+## Intro
+
+**FastAPI** n'existerait pas sans les précédentes contributions d'autres projets.
+
+De nombreux outils ont été créés auparavant et ont contribué à inspirer sa création.
+
+J'ai évité la création d'un nouveau framework pendant plusieurs années. J'ai d'abord essayé de combler toutes les
+fonctionnalités couvertes par **FastAPI** en utilisant de nombreux frameworks, plug-ins et outils différents.
+
+Mais à un moment donné il n'y avait pas d'autre option que de créer quelque chose qui offrait toutes ces
+fonctionnalités, en reprenant et en combinant de la meilleure façon possible les meilleures idées des outils
+précédents, en utilisant des fonctionnalités du langage qui n'étaient même pas disponibles auparavant (type hints depuis Python 3.6+).
+
+## Outils précédents
+
+### 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.
+
+Il est relativement fortement couplé aux bases de données relationnelles (comme MySQL ou PostgreSQL), de sorte qu'il
+n'est pas très facile d'utiliser une base de données NoSQL (comme Couchbase, MongoDB, Cassandra, etc.) comme principal moyen de
+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 IoT) communiquant avec lui.
+
+### 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.
+
+Il est utilisé par de nombreuses entreprises, dont Mozilla, Red Hat et Eventbrite.
+
+Il s'agissait de l'un des premiers exemples de **documentation automatique pour API**, et c'est précisément l'une des
+premières idées qui a inspiré "la recherche de" **FastAPI**.
+
+!!! note
+Django REST framework a été créé par Tom Christie. Le créateur de Starlette et Uvicorn, sur lesquels **FastAPI** est basé.
+
+!!! check "A inspiré **FastAPI** à"
+Avoir une interface de documentation automatique de l'API.
+
+### 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.
+
+Cette simplicité et cette flexibilité permettent d'utiliser des bases de données NoSQL comme principal système de stockage de données.
+
+Comme il est très simple, son apprentissage est relativement intuitif, bien que la documentation soit quelque peu
+technique par moments.
+
+Il est aussi couramment utilisé pour d'autres applications qui n'ont pas nécessairement besoin d'une base de données, de gestion des utilisateurs ou de l'une des nombreuses fonctionnalités préinstallées dans Django. Bien que beaucoup de ces fonctionnalités puissent être ajoutées avec des plug-ins.
+
+Ce découplage des parties, et le fait d'être un "micro-framework" qui puisse être étendu pour couvrir exactement ce
+qui est nécessaire, était une caractéristique clé que je voulais conserver.
+
+Compte tenu de la simplicité de Flask, il semblait bien adapté à la création d'API. La prochaine chose à trouver était un "Django REST Framework" pour Flask.
+
+!!! check "A inspiré **FastAPI** à"
+Être un micro-framework. Il est donc facile de combiner les outils et les pièces nécessaires.
+
+Proposer un système de routage simple et facile à utiliser.
+
+### Requests
+
+**FastAPI** n'est pas réellement une alternative à **Requests**. Leur cadre est très différent.
+
+Il serait en fait plus courant d'utiliser Requests _à l'intérieur_ d'une application FastAPI.
+
+Mais quand même, FastAPI s'est inspiré de Requests.
+
+**Requests** est une bibliothèque pour _interagir_ avec les API (en tant que client), tandis que **FastAPI** est une bibliothèque pour _créer_ des API (en tant que serveur).
+
+Ils sont, plus ou moins, aux extrémités opposées, se complétant l'un l'autre.
+
+Requests a un design très simple et intuitif, il est très facile à utiliser, avec des valeurs par défaut raisonnables, tout en étant très puissant et personnalisable.
+
+C'est pourquoi, comme le dit le site officiel :
+
+> Requests est l'un des packages Python les plus téléchargés de tous les temps
+
+La façon dont vous l'utilisez est très simple. Par exemple, pour faire une requête `GET`, vous devez écrire :
+
+```Python
+response = requests.get("http://example.com/some/url")
+```
+
+En contrepartie l'API _des opérations de chemin_ de FastAPI pourrait ressembler à ceci :
+
+```Python hl_lines="1"
+@app.get("/some/url")
+def read_url():
+ return {"message": "Hello World"}
+```
+
+Notez les similitudes entre `requests.get(...)` et `@app.get(...)`.
+
+!!! check "A inspiré **FastAPI** à"
+_ Avoir une API simple et intuitive.
+_ Utiliser les noms de méthodes HTTP (opérations) directement, de manière simple et intuitive. \* Avoir des valeurs par défaut raisonnables, mais des personnalisations puissantes.
+
+### Swagger / OpenAPI
+
+La principale fonctionnalité que j'ai emprunté à Django REST Framework était la documentation automatique des API.
+
+Puis j'ai découvert qu'il existait une norme pour documenter les API, en utilisant JSON (ou YAML, une extension de JSON) appelée Swagger.
+
+Il existait déjà une interface utilisateur Web pour les API Swagger. Donc, être capable de générer une documentation
+Swagger pour une API permettrait d'utiliser cette interface utilisateur web automatiquement.
+
+À un moment donné, Swagger a été cédé à la Fondation Linux, puis a été rebaptisé OpenAPI.
+
+C'est pourquoi, lorsqu'on parle de la version 2.0, il est courant de dire "Swagger", et pour la version 3+ "OpenAPI".
+
+!!! check "A inspiré **FastAPI** à"
+Adopter et utiliser une norme ouverte pour les spécifications des API, au lieu d'un schéma personnalisé.
+
+ Intégrer des outils d'interface utilisateur basés sur des normes :
+
+ * Swagger UI
+ * 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**).
+
+### Frameworks REST pour Flask
+
+Il y a plusieurs frameworks REST pour Flask, mais après avoir investi du temps et du travail pour les étudier, j'ai
+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.
+
+### Marshmallow
+
+L'une des principales fonctionnalités nécessaires aux systèmes API est la "sérialisation" des données, qui consiste à prendre les données du code (Python) et à
+les convertir en quelque chose qui peut être envoyé sur le réseau. Par exemple, convertir un objet contenant des
+données provenant d'une base de données en un objet JSON. Convertir des objets `datetime` en strings, etc.
+
+La validation des données est une autre fonctionnalité importante dont ont besoin les API. Elle permet de s'assurer
+que les données sont valides, compte tenu de certains paramètres. Par exemple, qu'un champ est un `int`, et non un
+string.
+Ceci est particulièrement utile pour les données entrantes.
+
+Sans un système de validation des données, vous devriez effectuer toutes les vérifications à la main, dans le code.
+
+Ces fonctionnalités sont ce pourquoi Marshmallow a été construit. C'est une excellente bibliothèque, et je l'ai déjà beaucoup utilisée.
+
+Mais elle a été créée avant que les type hints n'existent en Python. Ainsi, pour définir chaque schéma, vous devez utiliser des utilitaires et des classes spécifiques fournies par Marshmallow.
+
+!!! check "A inspiré **FastAPI** à"
+Utilisez du code pour définir des "schémas" qui fournissent automatiquement les types de données et la validation.
+
+### Webargs
+
+Une autre grande fonctionnalité requise par les API est le parsing des données provenant des requêtes entrantes.
+
+Webargs est un outil qui a été créé pour fournir cela par-dessus plusieurs frameworks, dont Flask.
+
+Il utilise Marshmallow pour effectuer la validation des données. Et il a été créé par les mêmes développeurs.
+
+C'est un outil formidable et je l'ai beaucoup utilisé aussi, avant d'avoir **FastAPI**.
+
+!!! info
+Webargs a été créé par les développeurs de Marshmallow.
+
+!!! check "A inspiré **FastAPI** à"
+Disposer d'une validation automatique des données des requêtes entrantes.
+
+### APISpec
+
+Marshmallow et Webargs fournissent la validation, l'analyse et la sérialisation en tant que plug-ins.
+
+Mais la documentation fait toujours défaut. C'est alors qu'APISpec a été créé.
+
+Il s'agit d'un plug-in pour de nombreux frameworks (et il existe également un plug-in pour Starlette).
+
+Le principe est le suivant : vous écrivez la définition du schéma au format YAML dans la docstring de chaque fonction gérant une route.
+
+Et il génère des schémas OpenAPI.
+
+C'est ainsi que cela fonctionne dans Flask, Starlette, Responder, etc.
+
+Mais alors, nous avons à nouveau le problème d'avoir une micro-syntaxe, dans une docstring Python (un gros morceau de YAML).
+
+L'éditeur ne peut guère aider en la matière. Et si nous modifions les paramètres ou les schémas Marshmallow et que nous oublions de modifier également cette docstring YAML, le schéma généré deviendrait obsolète.
+
+!!! info
+APISpec a été créé par les développeurs de Marshmallow.
+
+!!! check "A inspiré **FastAPI** à"
+Supporter la norme ouverte pour les API, OpenAPI.
+
+### Flask-apispec
+
+C'est un plug-in pour Flask, qui relie Webargs, Marshmallow et APISpec.
+
+Il utilise les informations de Webargs et Marshmallow pour générer automatiquement des schémas OpenAPI, en utilisant APISpec.
+
+C'est un excellent outil, très sous-estimé. Il devrait être beaucoup plus populaire que de nombreux plug-ins Flask. C'est peut-être dû au fait que sa documentation est trop concise et abstraite.
+
+Cela a permis de ne pas avoir à écrire YAML (une autre syntaxe) à l'intérieur des docstrings Python.
+
+Cette combinaison de Flask, Flask-apispec avec Marshmallow et Webargs était ma stack backend préférée jusqu'à la création de **FastAPI**.
+
+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 :
+
+- https://github.com/tiangolo/full-stack
+- https://github.com/tiangolo/full-stack-flask-couchbase
+- 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}.
+
+!!! info
+Flask-apispec a été créé par les développeurs de Marshmallow.
+
+!!! check "A inspiré **FastAPI** à"
+Générer le schéma OpenAPI automatiquement, à partir du même code qui définit la sérialisation et la validation.
+
+### NestJS (et Angular)
+
+Ce n'est même pas du Python, NestJS est un framework JavaScript (TypeScript) NodeJS inspiré d'Angular.
+
+Il réalise quelque chose de similaire à ce qui peut être fait avec Flask-apispec.
+
+Il possède un système d'injection de dépendances intégré, inspiré d'Angular 2. Il nécessite de pré-enregistrer les "injectables" (comme tous les autres systèmes d'injection de dépendances que je connais), donc, cela ajoute à la verbosité et à la répétition du code.
+
+Comme les paramètres sont décrits avec des types TypeScript (similaires aux type hints de Python), la prise en charge
+par l'éditeur est assez bonne.
+
+Mais comme les données TypeScript ne sont pas préservées après la compilation en JavaScript, il ne peut pas compter sur les types pour définir la validation, la sérialisation et la documentation en même temps. En raison de cela et de certaines décisions de conception, pour obtenir la validation, la sérialisation et la génération automatique de schémas, il est nécessaire d'ajouter des décorateurs à de nombreux endroits. Cela devient donc assez verbeux.
+
+Il ne peut pas très bien gérer les modèles imbriqués. Ainsi, si le corps JSON de la requête est un objet JSON comportant des champs internes qui sont à leur tour des objets JSON imbriqués, il ne peut pas être correctement documenté et validé.
+
+!!! check "A inspiré **FastAPI** à"
+Utiliser les types Python pour bénéficier d'un excellent support de l'éditeur.
+
+ Disposer d'un puissant système d'injection de dépendances. Trouver un moyen de minimiser la répétition du code.
+
+### 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 `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.
+
+!!! check "A inspiré **FastAPI** à"
+Trouvez 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).
+
+### 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.
+
+Il utilise le standard précédent pour les frameworks web Python (WSGI) qui est synchrone, donc il ne peut pas gérer les WebSockets et d'autres cas d'utilisation. Néanmoins, il offre de très bonnes performances.
+
+Il est conçu pour avoir des fonctions qui reçoivent deux paramètres, une "requête" et une "réponse". Ensuite, vous
+"lisez" des parties de la requête et "écrivez" des parties dans la réponse. En raison de cette conception, il n'est
+pas possible de déclarer des paramètres de requête et des corps avec des indications de type Python standard comme paramètres de fonction.
+
+Ainsi, la validation, la sérialisation et la documentation des données doivent être effectuées dans le code, et non pas automatiquement. Ou bien elles doivent être implémentées comme un framework au-dessus de Falcon, comme Hug. Cette même distinction se retrouve dans d'autres frameworks qui s'inspirent de la conception de Falcon, qui consiste à avoir un objet de requête et un objet de réponse comme paramètres.
+
+!!! check "A inspiré **FastAPI** à"
+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.
+
+ 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.
+
+### Molten
+
+J'ai découvert Molten lors des premières étapes de développement de **FastAPI**. Et il a des idées assez similaires :
+
+- Basé sur les type hints Python.
+- Validation et documentation via ces types.
+- Système d'injection de dépendances.
+
+Il n'utilise pas une librairie tiers de validation, sérialisation et de documentation tel que Pydantic, il utilise son propre système. Ainsi, ces définitions de types de données ne sont pas réutilisables aussi facilement.
+
+Il nécessite une configuration un peu plus verbeuse. Et comme il est basé sur WSGI (au lieu dASGI), il n'est pas
+conçu pour profiter des hautes performances fournies par des outils comme Uvicorn, Starlette et Sanic.
+
+Le système d'injection de dépendances exige le pré-enregistrement des dépendances et les dépendances sont résolues sur la base des types déclarés. Ainsi, il n'est pas possible de déclarer plus d'un "composant" qui fournit un certain type.
+
+Les routes sont déclarées à un seul endroit, en utilisant des fonctions déclarées à d'autres endroits (au lieu
+d'utiliser des décorateurs qui peuvent être placés juste au-dessus de la fonction qui gère l'endpoint). Cette
+méthode est plus proche de celle de Django que de celle de Flask (et Starlette). Il sépare dans le code des choses
+qui sont relativement fortement couplées.
+
+!!! check "A inspiré **FastAPI** à"
+Définir des validations supplémentaires pour les types de données utilisant la valeur "par défaut" des attributs du modèle. Ceci améliore le support de l'éditeur, et n'était pas disponible dans Pydantic auparavant.
+
+ Cela a en fait inspiré la mise à jour de certaines parties de Pydantic, afin de supporter le même style de déclaration de validation (toute cette fonctionnalité est maintenant déjà disponible dans Pydantic).
+
+### Hug
+
+Hug a été l'un des premiers frameworks à implémenter la déclaration des types de paramètres d'API en utilisant les type hints Python. C'était une excellente idée qui a inspiré d'autres outils à faire de même.
+
+Il utilisait des types personnalisés dans ses déclarations au lieu des types Python standard, mais c'était tout de même un énorme pas en avant.
+
+Il a également été l'un des premiers frameworks à générer un schéma personnalisé déclarant l'ensemble de l'API en JSON.
+
+Il n'était pas basé sur une norme comme OpenAPI et JSON Schema. Il ne serait donc pas simple de l'intégrer à d'autres outils, comme Swagger UI. Mais encore une fois, c'était une idée très innovante.
+
+Il présente une caractéristique intéressante et peu commune : à l'aide du même framework, il est possible de créer des
+API et des CLI.
+
+Comme il est basé sur l'ancienne norme pour les frameworks web Python synchrones (WSGI), il ne peut pas gérer les Websockets et autres, bien qu'il soit également très performant.
+
+!!! info
+Hug a été créé par Timothy Crosley, le créateur de `isort`, un excellent outil pour trier automatiquement les imports dans les fichiers Python.
+
+!!! check "A inspiré **FastAPI** à"
+Hug a inspiré certaines parties d'APIStar, et était l'un des outils que je trouvais les plus prometteurs, à côté d'APIStar.
+
+ Hug a contribué à inspirer **FastAPI** pour utiliser les type hints Python
+ pour déclarer les paramètres, et pour générer automatiquement un schéma définissant l'API.
+
+ Hug a inspiré **FastAPI** pour déclarer un paramètre `response` dans les fonctions pour définir les en-têtes et les cookies.
+
+### 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.
+
+C'était l'une des premières implémentations d'un framework utilisant les type hints Python pour déclarer les paramètres
+et les requêtes que j'ai vues (avant NestJS et Molten). Je l'ai trouvé plus ou moins en même temps que Hug. Mais APIStar utilisait le standard OpenAPI.
+
+Il disposait de la validation automatique, sérialisation des données et d'une génération de schéma OpenAPI basée sur les mêmes type hints à plusieurs endroits.
+
+La définition du schéma de corps de requête n'utilisait pas les mêmes type hints Python que Pydantic, il était un peu plus proche de Marshmallow, donc le support de l'éditeur n'était pas aussi bon, mais APIStar était quand même la meilleure option disponible.
+
+Il avait les meilleures performances d'après les benchmarks de l'époque (seulement surpassé par Starlette).
+
+Au départ, il ne disposait pas d'une interface web de documentation automatique de l'API, mais je savais que je pouvais lui ajouter une interface Swagger.
+
+Il avait un système d'injection de dépendances. Il nécessitait un pré-enregistrement des composants, comme d'autres outils discutés ci-dessus. Mais c'était quand même une excellente fonctionnalité.
+
+Je n'ai jamais pu l'utiliser dans un projet complet, car il n'avait pas d'intégration de sécurité, et je ne pouvais donc pas remplacer toutes les fonctionnalités que j'avais avec les générateurs complets basés sur Flask-apispec. J'avais dans mon backlog de projets de créer une pull request pour ajouter cette fonctionnalité.
+
+Mais ensuite, le projet a changé d'orientation.
+
+Il ne s'agissait plus d'un framework web API, le créateur devant se concentrer sur Starlette.
+
+Maintenant, APIStar est un ensemble d'outils pour valider les spécifications OpenAPI, et non un framework web.
+
+!!! info
+APIStar a été créé par Tom Christie. Le même gars qui a créé :
+
+ * Django REST Framework
+ * Starlette (sur lequel **FastAPI** est basé)
+ * Uvicorn (utilisé par Starlette et **FastAPI**)
+
+!!! check "A inspiré **FastAPI** à"
+Exister.
+
+ L'idée de déclarer plusieurs choses (validation des données, sérialisation et documentation) avec les mêmes types Python, tout en offrant un excellent support pour les éditeurs, était pour moi une idée brillante.
+
+ Et après avoir longtemps cherché un framework similaire et testé de nombreuses alternatives, APIStar était la meilleure option disponible.
+
+ Puis APIStar a cessé d'exister en tant que serveur et Starlette a été créé, et a constitué une meilleure base pour un tel système. Ce fut l'inspiration finale pour construire **FastAPI**.
+
+ Je considère **FastAPI** comme un "successeur spirituel" d'APIStar, tout en améliorant et en augmentant les fonctionnalités, le système de typage et d'autres parties, sur la base des enseignements tirés de tous ces outils précédents.
+
+## Utilisés par **FastAPI**
+
+### 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 Python type hints.
+
+Cela le rend extrêmement intuitif.
+
+Il est comparable à Marshmallow. Bien qu'il soit plus rapide que Marshmallow dans les benchmarks. Et comme il est
+basé sur les mêmes type hints Python, le support de l'éditeur est grand.
+
+!!! check "**FastAPI** l'utilise pour"
+Gérer toute la validation des données, leur sérialisation et la documentation automatique du modèle (basée sur le schéma JSON).
+
+ **FastAPI** prend ensuite ces données JSON Schema et les place dans OpenAPI, en plus de toutes les autres choses qu'il fait.
+
+### Starlette
+
+Starlette est un framework/toolkit léger ASGI, qui est idéal pour construire des services asyncio performants.
+
+Il est très simple et intuitif. Il est conçu pour être facilement extensible et avoir des composants modulaires.
+
+Il offre :
+
+- Des performances vraiment impressionnantes.
+- Le support des WebSockets.
+- Le support de GraphQL.
+- Les tâches d'arrière-plan.
+- Les événements de démarrage et d'arrêt.
+- Un client de test basé sur request.
+- CORS, GZip, fichiers statiques, streaming des réponses.
+- Le support des sessions et des cookies.
+- Une couverture de test à 100 %.
+- 100 % de la base de code avec des annotations de type.
+- Zéro forte dépendance à d'autres packages.
+
+Starlette est actuellement le framework Python le plus rapide testé. Seulement dépassé par Uvicorn, qui n'est pas un framework, mais un serveur.
+
+Starlette fournit toutes les fonctionnalités de base d'un micro-framework web.
+
+Mais il ne fournit pas de validation automatique des données, de sérialisation ou de documentation.
+
+C'est l'une des principales choses que **FastAPI** ajoute par-dessus, le tout basé sur les type hints Python (en utilisant Pydantic). Cela, plus le système d'injection de dépendances, les utilitaires de sécurité, la génération de schémas OpenAPI, etc.
+
+!!! note "Détails techniques"
+ASGI est une nouvelle "norme" développée par les membres de l'équipe principale de Django. Il ne s'agit pas encore d'une "norme Python" (un PEP), bien qu'ils soient en train de le faire.
+
+ Néanmoins, il est déjà utilisé comme "standard" par plusieurs outils. Cela améliore grandement l'interopérabilité, puisque vous pouvez remplacer Uvicorn par n'importe quel autre serveur ASGI (comme Daphne ou Hypercorn), ou vous pouvez ajouter des outils compatibles ASGI, comme `python-socketio`.
+
+!!! check "**FastAPI** l'utilise pour"
+Gérer toutes les parties web de base. Ajouter des fonctionnalités par-dessus.
+
+ La classe `FastAPI` elle-même hérite directement de la classe `Starlette`.
+
+ Ainsi, tout ce que vous pouvez faire avec Starlette, vous pouvez le faire directement avec **FastAPI**, car il s'agit en fait de Starlette sous stéroïdes.
+
+### Uvicorn
+
+Uvicorn est un serveur ASGI rapide comme l'éclair, basé sur uvloop et httptools.
+
+Il ne s'agit pas d'un framework web, mais d'un serveur. Par exemple, il ne fournit pas d'outils pour le routing. C'est
+quelque chose qu'un framework comme Starlette (ou **FastAPI**) fournirait par-dessus.
+
+C'est le serveur recommandé pour Starlette et **FastAPI**.
+
+!!! check "**FastAPI** le recommande comme"
+Le serveur web principal pour exécuter les applications **FastAPI**.
+
+ Vous pouvez le combiner avec Gunicorn, pour avoir un serveur multi-processus asynchrone.
+
+ Pour plus de détails, consultez la section [Déploiement](deployment/index.md){.internal-link target=_blank}.
+
+## Benchmarks et vitesse
+
+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}.
diff --git a/docs/fr/docs/external-links.md b/docs/fr/docs/external-links.md
new file mode 100644
index 00000000..002e6d2b
--- /dev/null
+++ b/docs/fr/docs/external-links.md
@@ -0,0 +1,82 @@
+# Articles et liens externes
+
+**FastAPI** possède une grande communauté en constante extension.
+
+Il existe de nombreux articles, outils et projets liés à **FastAPI**.
+
+Voici une liste incomplète de certains d'entre eux.
+
+!!! tip "Astuce"
+ Si vous avez un article, projet, outil, ou quoi que ce soit lié à **FastAPI** qui n'est actuellement pas listé ici, créez une Pull Request l'ajoutant.
+
+## Articles
+
+### Anglais
+
+{% if external_links %}
+{% for article in external_links.articles.english %}
+
+* {{ article.title }} par {{ article.author }}.
+{% endfor %}
+{% endif %}
+
+### Japonais
+
+{% if external_links %}
+{% for article in external_links.articles.japanese %}
+
+* {{ article.title }} par {{ article.author }}.
+{% endfor %}
+{% endif %}
+
+### Vietnamien
+
+{% if external_links %}
+{% for article in external_links.articles.vietnamese %}
+
+* {{ article.title }} par {{ article.author }}.
+{% endfor %}
+{% endif %}
+
+### Russe
+
+{% if external_links %}
+{% for article in external_links.articles.russian %}
+
+* {{ article.title }} par {{ article.author }}.
+{% endfor %}
+{% endif %}
+
+### Allemand
+
+{% if external_links %}
+{% for article in external_links.articles.german %}
+
+* {{ article.title }} par {{ article.author }}.
+{% endfor %}
+{% endif %}
+
+## Podcasts
+
+{% if external_links %}
+{% for article in external_links.podcasts.english %}
+
+* {{ article.title }} par {{ article.author }}.
+{% endfor %}
+{% endif %}
+
+## Conférences
+
+{% if external_links %}
+{% for article in external_links.talks.english %}
+
+* {{ article.title }} par {{ article.author }}.
+{% endfor %}
+{% endif %}
+
+## Projets
+
+Les projets Github avec le topic `fastapi` les plus récents :
+
+
+
diff --git a/docs/fr/docs/history-design-future.md b/docs/fr/docs/history-design-future.md
index b62d6637..5c8d69d7 100644
--- a/docs/fr/docs/history-design-future.md
+++ b/docs/fr/docs/history-design-future.md
@@ -4,7 +4,7 @@ Il y a quelque temps, https://github.com/tiangolo/full-stack-fastapi-postgresql
+
+### Full Stack FastAPI PostgreSQL - Fonctionnalités
+
+* Intégration **Docker** complète (basée sur Docker).
+* Déploiement Docker en mode Swarm
+* Intégration **Docker Compose** et optimisation pour développement local.
+* Serveur web Python **prêt au déploiement** utilisant Uvicorn et Gunicorn.
+* Backend Python **FastAPI** :
+ * **Rapide** : Très hautes performances, comparables à **NodeJS** ou **Go** (grâce à Starlette et Pydantic).
+ * **Intuitif** : Excellent support des éditeurs. Complétion partout. Moins de temps passé à déboguer.
+ * **Facile** : Fait pour être facile à utiliser et apprendre. Moins de temps passé à lire de la documentation.
+ * **Concis** : Minimise la duplication de code. Plusieurs fonctionnalités à chaque déclaration de paramètre.
+ * **Robuste** : Obtenez du code prêt pour être utilisé en production. Avec de la documentation automatique interactive.
+ * **Basé sur des normes** : Basé sur (et totalement compatible avec) les normes ouvertes pour les APIs : OpenAPI et JSON Schema.
+ * **Et bien d'autres fonctionnalités** comme la validation automatique, la sérialisation, l'authentification avec OAuth2 JWT tokens, etc.
+* Hashage de **mots de passe sécurisé** par défaut.
+* Authentification par **jetons JWT**.
+* Modèles **SQLAlchemy** (indépendants des extensions Flask, afin qu'ils puissent être utilisés directement avec des *workers* Celery).
+* Modèle de démarrages basiques pour les utilisateurs (à modifier et supprimer au besoin).
+* Migrations **Alembic**.
+* **CORS** (partage des ressources entre origines multiples, ou *Cross Origin Resource Sharing*).
+* *Worker* **Celery** pouvant importer et utiliser les modèles et le code du reste du backend.
+* Tests du backend REST basés sur **Pytest**, intégrés dans Docker, pour que vous puissiez tester toutes les interactions de l'API indépendamment de la base de données. Étant exécutés dans Docker, les tests peuvent utiliser un nouvel entrepôt de données créé de zéro à chaque fois (vous pouvez donc utiliser ElasticSearch, MongoDB, CouchDB, etc. et juste tester que l'API fonctionne).
+* Intégration Python facile avec **Jupyter Kernels** pour le développement à distance ou intra-Docker avec des extensions comme Atom Hydrogen ou Visual Studio Code Jupyter.
+* Frontend **Vue** :
+ * Généré avec Vue CLI.
+ * Gestion de l'**Authentification JWT**.
+ * Page de connexion.
+ * Après la connexion, page de tableau de bord principal.
+ * Tableau de bord principal avec création et modification d'utilisateurs.
+ * Modification de ses propres caractéristiques utilisateur.
+ * **Vuex**.
+ * **Vue-router**.
+ * **Vuetify** pour de magnifiques composants *material design*.
+ * **TypeScript**.
+ * Serveur Docker basé sur **Nginx** (configuré pour être facilement manipulé avec Vue-router).
+ * Utilisation de *Docker multi-stage building*, pour ne pas avoir besoin de sauvegarder ou *commit* du code compilé.
+ * Tests frontend exécutés à la compilation (pouvant être désactivés).
+ * Fait aussi modulable que possible, pour pouvoir fonctionner comme tel, tout en pouvant être utilisé qu'en partie grâce à Vue CLI.
+* **PGAdmin** pour les bases de données PostgreSQL, facilement modifiable pour utiliser PHPMYAdmin ou MySQL.
+* **Flower** pour la surveillance de tâches Celery.
+* Équilibrage de charge entre le frontend et le backend avec **Traefik**, afin de pouvoir avoir les deux sur le même domaine, séparés par chemins, mais servis par différents conteneurs.
+* Intégration Traefik, comprenant la génération automatique de certificat **HTTPS** Let's Encrypt.
+* GitLab **CI** (intégration continue), comprenant des tests pour le frontend et le backend.
+
+## Full Stack FastAPI Couchbase
+
+GitHub : https://github.com/tiangolo/full-stack-fastapi-couchbase
+
+⚠️ **ATTENTION** ⚠️
+
+Si vous démarrez un nouveau projet de zéro, allez voir les alternatives au début de cette page.
+
+Par exemple, le générateur de projet Full Stack FastAPI PostgreSQL peut être une meilleure alternative, étant activement maintenu et utilisé et comprenant toutes les nouvelles fonctionnalités et améliorations.
+
+Vous êtes toujours libre d'utiliser le générateur basé sur Couchbase si vous le voulez, cela devrait probablement fonctionner correctement, et si vous avez déjà un projet généré en utilisant ce dernier, cela devrait fonctionner aussi (et vous l'avez déjà probablement mis à jour suivant vos besoins).
+
+Vous pouvez en apprendre plus dans la documentation du dépôt GithHub.
+
+## Full Stack FastAPI MongoDB
+
+...viendra surement plus tard, suivant le temps que j'ai. 😅 🎉
+
+## Modèles d'apprentissage automatique avec spaCy et FastAPI
+
+GitHub : https://github.com/microsoft/cookiecutter-spacy-fastapi
+
+## Modèles d'apprentissage automatique avec spaCy et FastAPI - Fonctionnalités
+
+* Intégration d'un modèle NER **spaCy**.
+* Formatage de requête pour **Azure Cognitive Search**.
+* Serveur Python web **prêt à utiliser en production** utilisant Uvicorn et Gunicorn.
+* Déploiement CI/CD Kubernetes pour **Azure DevOps** (AKS).
+* **Multilangues**. Choisissez facilement l'une des langues intégrées à spaCy durant la mise en place du projet.
+* **Facilement généralisable** à d'autres bibliothèques similaires (Pytorch, Tensorflow), et non juste spaCy.
diff --git a/docs/fr/docs/python-types.md b/docs/fr/docs/python-types.md
new file mode 100644
index 00000000..4008ed96
--- /dev/null
+++ b/docs/fr/docs/python-types.md
@@ -0,0 +1,314 @@
+# Introduction aux Types Python
+
+Python supporte des annotations de type (ou *type hints*) optionnelles.
+
+Ces annotations de type constituent une syntaxe spéciale qui permet de déclarer le type d'une variable.
+
+En déclarant les types de vos variables, cela permet aux différents outils comme les éditeurs de texte d'offrir un meilleur support.
+
+Ce chapitre n'est qu'un **tutoriel rapide / rappel** sur les annotations de type Python.
+Seulement le minimum nécessaire pour les utiliser avec **FastAPI** sera couvert... ce qui est en réalité très peu.
+
+**FastAPI** est totalement basé sur ces annotations de type, qui lui donnent de nombreux avantages.
+
+Mais même si vous n'utilisez pas ou n'utiliserez jamais **FastAPI**, vous pourriez bénéficier d'apprendre quelques choses sur ces dernières.
+
+!!! note
+ Si vous êtes un expert Python, et que vous savez déjà **tout** sur les annotations de type, passez au chapitre suivant.
+
+## Motivations
+
+Prenons un exemple simple :
+
+```Python
+{!../../../docs_src/python_types/tutorial001.py!}
+```
+
+Exécuter ce programe affiche :
+
+```
+John Doe
+```
+
+La fonction :
+
+* Prend un `first_name` et un `last_name`.
+* Convertit la première lettre de chaque paramètre en majuscules grâce à `title()`.
+* Concatène les résultats avec un espace entre les deux.
+
+```Python hl_lines="2"
+{!../../../docs_src/python_types/tutorial001.py!}
+```
+
+### Limitations
+
+C'est un programme très simple.
+
+Mais maintenant imaginez que vous l'écriviez de zéro.
+
+À un certain point vous auriez commencé la définition de la fonction, vous aviez les paramètres prêts.
+
+Mais vous aviez besoin de "cette méthode qui convertit la première lettre en majuscule".
+
+Était-ce `upper` ? `uppercase` ? `first_uppercase` ? `capitalize` ?
+
+Vous essayez donc d'utiliser le vieil ami du programmeur, l'auto-complétion de l'éditeur.
+
+Vous écrivez le premier paramètre, `first_name`, puis un point (`.`) et appuyez sur `Ctrl+Espace` pour déclencher l'auto-complétion.
+
+Mais malheureusement, rien d'utile n'en résulte :
+
+
+
+### Ajouter des types
+
+Modifions une seule ligne de la version précédente.
+
+Nous allons changer seulement cet extrait, les paramètres de la fonction, de :
+
+
+```Python
+ first_name, last_name
+```
+
+à :
+
+```Python
+ first_name: str, last_name: str
+```
+
+C'est tout.
+
+Ce sont des annotations de types :
+
+```Python hl_lines="1"
+{!../../../docs_src/python_types/tutorial002.py!}
+```
+
+À ne pas confondre avec la déclaration de valeurs par défaut comme ici :
+
+```Python
+ first_name="john", last_name="doe"
+```
+
+C'est une chose différente.
+
+On utilise un deux-points (`:`), et pas un égal (`=`).
+
+Et ajouter des annotations de types ne crée normalement pas de différence avec le comportement qui aurait eu lieu si elles n'étaient pas là.
+
+Maintenant, imaginez que vous êtes en train de créer cette fonction, mais avec des annotations de type cette fois.
+
+Au même moment que durant l'exemple précédent, vous essayez de déclencher l'auto-complétion et vous voyez :
+
+
+
+Vous pouvez donc dérouler les options jusqu'à trouver la méthode à laquelle vous pensiez.
+
+
+
+## Plus de motivations
+
+Cette fonction possède déjà des annotations de type :
+
+```Python hl_lines="1"
+{!../../../docs_src/python_types/tutorial003.py!}
+```
+
+Comme l'éditeur connaît le type des variables, vous n'avez pas seulement l'auto-complétion, mais aussi de la détection d'erreurs :
+
+
+
+Maintenant que vous avez connaissance du problème, convertissez `age` en chaine de caractères grâce à `str(age)` :
+
+```Python hl_lines="2"
+{!../../../docs_src/python_types/tutorial004.py!}
+```
+
+## Déclarer des types
+
+Vous venez de voir là où les types sont généralement déclarés : dans les paramètres de fonctions.
+
+C'est aussi ici que vous les utiliseriez avec **FastAPI**.
+
+### Types simples
+
+Vous pouvez déclarer tous les types de Python, pas seulement `str`.
+
+Comme par exemple :
+
+* `int`
+* `float`
+* `bool`
+* `bytes`
+
+```Python hl_lines="1"
+{!../../../docs_src/python_types/tutorial005.py!}
+```
+
+### Types génériques avec des paramètres de types
+
+Il existe certaines structures de données qui contiennent d'autres valeurs, comme `dict`, `list`, `set` et `tuple`. Et les valeurs internes peuvent elles aussi avoir leurs propres types.
+
+Pour déclarer ces types et les types internes, on utilise le module standard de Python `typing`.
+
+Il existe spécialement pour supporter ces annotations de types.
+
+#### `List`
+
+Par exemple, définissons une variable comme `list` de `str`.
+
+Importez `List` (avec un `L` majuscule) depuis `typing`.
+
+```Python hl_lines="1"
+{!../../../docs_src/python_types/tutorial006.py!}
+```
+
+Déclarez la variable, en utilisant la syntaxe des deux-points (`:`).
+
+Et comme type, mettez `List`.
+
+Les listes étant un type contenant des types internes, mettez ces derniers entre crochets (`[`, `]`) :
+
+```Python hl_lines="4"
+{!../../../docs_src/python_types/tutorial006.py!}
+```
+
+!!! tip "Astuce"
+ Ces types internes entre crochets sont appelés des "paramètres de type".
+
+ Ici, `str` est un paramètre de type passé à `List`.
+
+Ce qui signifie : "la variable `items` est une `list`, et chacun de ses éléments a pour type `str`.
+
+En faisant cela, votre éditeur pourra vous aider, même pendant que vous traitez des éléments de la liste.
+
+
+
+Sans types, c'est presque impossible à réaliser.
+
+Vous remarquerez que la variable `item` n'est qu'un des éléments de la list `items`.
+
+Et pourtant, l'éditeur sait qu'elle est de type `str` et pourra donc vous aider à l'utiliser.
+
+#### `Tuple` et `Set`
+
+C'est le même fonctionnement pour déclarer un `tuple` ou un `set` :
+
+```Python hl_lines="1 4"
+{!../../../docs_src/python_types/tutorial007.py!}
+```
+
+Dans cet exemple :
+
+* La variable `items_t` est un `tuple` avec 3 éléments, un `int`, un deuxième `int`, et un `str`.
+* La variable `items_s` est un `set`, et chacun de ses éléments est de type `bytes`.
+
+#### `Dict`
+
+Pour définir un `dict`, il faut lui passer 2 paramètres, séparés par une virgule (`,`).
+
+Le premier paramètre de type est pour les clés et le second pour les valeurs du dictionnaire (`dict`).
+
+```Python hl_lines="1 4"
+{!../../../docs_src/python_types/tutorial008.py!}
+```
+
+Dans cet exemple :
+
+* La variable `prices` est de type `dict` :
+ * Les clés de ce dictionnaire sont de type `str`.
+ * Les valeurs de ce dictionnaire sont de type `float`.
+
+#### `Optional`
+
+Vous pouvez aussi utiliser `Optional` pour déclarer qu'une variable a un type, comme `str` mais qu'il est "optionnel" signifiant qu'il pourrait aussi être `None`.
+
+```Python hl_lines="1 4"
+{!../../../docs_src/python_types/tutorial009.py!}
+```
+
+Utiliser `Optional[str]` plutôt que `str` permettra à l'éditeur de vous aider à détecter les erreurs où vous supposeriez qu'une valeur est toujours de type `str`, alors qu'elle pourrait aussi être `None`.
+
+#### Types génériques
+
+Les types qui peuvent contenir des paramètres de types entre crochets, comme :
+
+* `List`
+* `Tuple`
+* `Set`
+* `Dict`
+* `Optional`
+* ...et d'autres.
+
+sont appelés des **types génériques** ou **Generics**.
+
+### Classes en tant que types
+
+Vous pouvez aussi déclarer une classe comme type d'une variable.
+
+Disons que vous avez une classe `Person`, avec une variable `name` :
+
+```Python hl_lines="1-3"
+{!../../../docs_src/python_types/tutorial010.py!}
+```
+
+Vous pouvez ensuite déclarer une variable de type `Person` :
+
+```Python hl_lines="6"
+{!../../../docs_src/python_types/tutorial010.py!}
+```
+
+Et vous aurez accès, encore une fois, au support complet offert par l'éditeur :
+
+
+
+## Les modèles Pydantic
+
+Pydantic est une bibliothèque Python pour effectuer de la validation de données.
+
+Vous déclarez la forme de la donnée avec des classes et des attributs.
+
+Chaque attribut possède un type.
+
+Puis vous créez une instance de cette classe avec certaines valeurs et **Pydantic** validera les valeurs, les convertira dans le type adéquat (si c'est nécessaire et possible) et vous donnera un objet avec toute la donnée.
+
+Ainsi, votre éditeur vous offrira un support adapté pour l'objet résultant.
+
+Extrait de la documentation officielle de **Pydantic** :
+
+```Python
+{!../../../docs_src/python_types/tutorial011.py!}
+```
+
+!!! info
+ Pour en savoir plus à propos de Pydantic, allez jeter un coup d'oeil à sa documentation.
+
+**FastAPI** est basé entièrement sur **Pydantic**.
+
+Vous verrez bien plus d'exemples de son utilisation dans [Tutoriel - Guide utilisateur](tutorial/index.md){.internal-link target=_blank}.
+
+## Les annotations de type dans **FastAPI**
+
+**FastAPI** utilise ces annotations pour faire différentes choses.
+
+Avec **FastAPI**, vous déclarez des paramètres grâce aux annotations de types et vous obtenez :
+
+* **du support de l'éditeur**
+* **de la vérification de types**
+
+...et **FastAPI** utilise ces mêmes déclarations pour :
+
+* **Définir les prérequis** : depuis les paramètres de chemins des requêtes, les entêtes, les corps, les dépendances, etc.
+* **Convertir des données** : depuis la requête vers les types requis.
+* **Valider des données** : venant de chaque requête :
+ * Générant automatiquement des **erreurs** renvoyées au client quand la donnée est invalide.
+* **Documenter** l'API avec OpenAPI :
+ * ce qui ensuite utilisé par les interfaces utilisateur automatiques de documentation interactive.
+
+Tout cela peut paraître bien abstrait, mais ne vous inquiétez pas, vous verrez tout ça en pratique dans [Tutoriel - Guide utilisateur](tutorial/index.md){.internal-link target=_blank}.
+
+Ce qu'il faut retenir c'est qu'en utilisant les types standard de Python, à un seul endroit (plutôt que d'ajouter plus de classes, de décorateurs, etc.), **FastAPI** fera une grande partie du travail pour vous.
+
+!!! info
+ Si vous avez déjà lu le tutoriel et êtes revenus ici pour voir plus sur les types, une bonne ressource est la "cheat sheet" de `mypy`.
diff --git a/docs/fr/mkdocs.yml b/docs/fr/mkdocs.yml
index 68ac8836..00e2d82f 100644
--- a/docs/fr/mkdocs.yml
+++ b/docs/fr/mkdocs.yml
@@ -5,21 +5,21 @@ theme:
name: material
custom_dir: overrides
palette:
- - scheme: default
- primary: teal
- accent: amber
- toggle:
- icon: material/lightbulb-outline
- name: Switch to light mode
- - scheme: slate
- primary: teal
- accent: amber
- toggle:
- icon: material/lightbulb
- name: Switch to dark mode
+ - scheme: default
+ primary: teal
+ accent: amber
+ toggle:
+ icon: material/lightbulb-outline
+ name: Switch to light mode
+ - scheme: slate
+ primary: teal
+ accent: amber
+ toggle:
+ icon: material/lightbulb
+ name: Switch to dark mode
features:
- - search.suggest
- - search.highlight
+ - search.suggest
+ - search.highlight
icon:
repo: fontawesome/brands/github-alt
logo: https://fastapi.tiangolo.com/img/icon-white.svg
@@ -27,99 +27,102 @@ theme:
language: fr
repo_name: tiangolo/fastapi
repo_url: https://github.com/tiangolo/fastapi
-edit_uri: ''
+edit_uri: ""
google_analytics:
-- UA-133183413-1
-- auto
+ - UA-133183413-1
+ - auto
plugins:
-- search
-- markdownextradata:
- data: data
+ - search
+ - markdownextradata:
+ data: data
nav:
-- FastAPI: index.md
-- Languages:
- - en: /
- - es: /es/
- - fr: /fr/
- - it: /it/
- - ja: /ja/
- - ko: /ko/
- - pl: /pl/
- - pt: /pt/
- - ru: /ru/
- - sq: /sq/
- - tr: /tr/
- - uk: /uk/
- - zh: /zh/
-- features.md
-- fastapi-people.md
-- Tutoriel - Guide utilisateur:
- - tutorial/background-tasks.md
-- history-design-future.md
+ - FastAPI: index.md
+ - Languages:
+ - en: /
+ - es: /es/
+ - fr: /fr/
+ - it: /it/
+ - ja: /ja/
+ - ko: /ko/
+ - pl: /pl/
+ - pt: /pt/
+ - ru: /ru/
+ - sq: /sq/
+ - tr: /tr/
+ - uk: /uk/
+ - zh: /zh/
+ - features.md
+ - fastapi-people.md
+ - python-types.md
+ - Tutoriel - Guide utilisateur:
+ - tutorial/background-tasks.md
+ - project-generation.md
+ - alternatives.md
+ - history-design-future.md
+ - external-links.md
markdown_extensions:
-- toc:
- permalink: true
-- markdown.extensions.codehilite:
- guess_lang: false
-- markdown_include.include:
- base_path: docs
-- admonition
-- codehilite
-- extra
-- pymdownx.superfences:
- custom_fences:
- - name: mermaid
- class: mermaid
- format: !!python/name:pymdownx.superfences.fence_div_format ''
-- pymdownx.tabbed
+ - toc:
+ permalink: true
+ - markdown.extensions.codehilite:
+ guess_lang: false
+ - markdown_include.include:
+ base_path: docs
+ - admonition
+ - codehilite
+ - extra
+ - pymdownx.superfences:
+ custom_fences:
+ - name: mermaid
+ class: mermaid
+ format: !!python/name:pymdownx.superfences.fence_div_format ""
+ - pymdownx.tabbed
extra:
social:
- - icon: fontawesome/brands/github-alt
- link: https://github.com/tiangolo/fastapi
- - icon: fontawesome/brands/discord
- link: https://discord.gg/VQjSZaeJmf
- - icon: fontawesome/brands/twitter
- link: https://twitter.com/tiangolo
- - icon: fontawesome/brands/linkedin
- link: https://www.linkedin.com/in/tiangolo
- - icon: fontawesome/brands/dev
- link: https://dev.to/tiangolo
- - icon: fontawesome/brands/medium
- link: https://medium.com/@tiangolo
- - icon: fontawesome/solid/globe
- link: https://tiangolo.com
+ - icon: fontawesome/brands/github-alt
+ link: https://github.com/tiangolo/fastapi
+ - icon: fontawesome/brands/discord
+ link: https://discord.gg/VQjSZaeJmf
+ - icon: fontawesome/brands/twitter
+ link: https://twitter.com/tiangolo
+ - icon: fontawesome/brands/linkedin
+ link: https://www.linkedin.com/in/tiangolo
+ - icon: fontawesome/brands/dev
+ link: https://dev.to/tiangolo
+ - icon: fontawesome/brands/medium
+ link: https://medium.com/@tiangolo
+ - icon: fontawesome/solid/globe
+ link: https://tiangolo.com
alternate:
- - link: /
- name: en - English
- - link: /es/
- name: es - español
- - link: /fr/
- name: fr - français
- - link: /it/
- name: it - italiano
- - link: /ja/
- name: ja - 日本語
- - link: /ko/
- name: ko - 한국어
- - link: /pl/
- name: pl
- - link: /pt/
- name: pt - português
- - link: /ru/
- name: ru - русский язык
- - link: /sq/
- name: sq - shqip
- - link: /tr/
- name: tr - Türkçe
- - link: /uk/
- name: uk - українська мова
- - link: /zh/
- name: zh - 汉语
+ - link: /
+ name: en - English
+ - link: /es/
+ name: es - español
+ - link: /fr/
+ name: fr - français
+ - link: /it/
+ name: it - italiano
+ - link: /ja/
+ name: ja - 日本語
+ - link: /ko/
+ name: ko - 한국어
+ - link: /pl/
+ name: pl
+ - link: /pt/
+ name: pt - português
+ - link: /ru/
+ name: ru - русский язык
+ - link: /sq/
+ name: sq - shqip
+ - link: /tr/
+ name: tr - Türkçe
+ - link: /uk/
+ name: uk - українська мова
+ - link: /zh/
+ name: zh - 汉语
extra_css:
-- https://fastapi.tiangolo.com/css/termynal.css
-- https://fastapi.tiangolo.com/css/custom.css
+ - https://fastapi.tiangolo.com/css/termynal.css
+ - https://fastapi.tiangolo.com/css/custom.css
extra_javascript:
-- https://unpkg.com/mermaid@8.4.6/dist/mermaid.min.js
-- https://fastapi.tiangolo.com/js/termynal.js
-- https://fastapi.tiangolo.com/js/custom.js
-
+ - https://unpkg.com/mermaid@8.4.6/dist/mermaid.min.js
+ - https://fastapi.tiangolo.com/js/termynal.js
+ - https://fastapi.tiangolo.com/js/custom.js
diff --git a/docs/pt/docs/contributing.md b/docs/pt/docs/contributing.md
new file mode 100644
index 00000000..327b8b60
--- /dev/null
+++ b/docs/pt/docs/contributing.md
@@ -0,0 +1,511 @@
+# Desenvolvimento - Contribuindo
+
+Primeiramente, você deveria ver os meios básicos para [ajudar FastAPI e pedir ajuda](help-fastapi.md){.internal-link target=_blank}.
+
+## Desenvolvendo
+
+Se você já clonou o repositório e precisa mergulhar no código, aqui estão algumas orientações para configurar seu ambiente.
+
+### Ambiente virtual com `venv`
+
+Você pode criar um ambiente virtual em um diretório utilizando o módulo `venv` do Python:
+
+
+
+```console
+$ python -m venv env
+```
+
+
+
+Isso criará o diretório `./env/` com os binários Python e então você será capaz de instalar pacotes nesse ambiente isolado.
+
+### Ativar o ambiente
+
+Ative o novo ambiente com:
+
+=== "Linux, macOS"
+
+
+
+Se ele exibir o binário `pip` em `env/bin/pip` então funcionou. 🎉
+
+
+
+!!! tip
+ Toda vez que você instalar um novo pacote com `pip` nesse ambiente, ative o ambiente novamente.
+
+ Isso garante que se você usar um programa instalado por aquele pacote (como `flit`), você utilizará aquele de seu ambiente local e não outro que possa estar instalado globalmente.
+
+### Flit
+
+**FastAPI** utiliza Flit para construir, empacotar e publicar o projeto.
+
+Após ativar o ambiente como descrito acima, instale o `flit`:
+
+
+
+Ative novamente o ambiente para ter certeza que você esteja utilizando o `flit` que você acabou de instalar (e não um global).
+
+E agora use `flit` para instalar as dependências de desenvolvimento:
+
+=== "Linux, macOS"
+
+
+
+Isso irá instalar todas as dependências e seu FastAPI local em seu ambiente local.
+
+#### Usando seu FastAPI local
+
+Se você cria um arquivo Python que importa e usa FastAPI, e roda com Python de seu ambiente local, ele irá utilizar o código fonte de seu FastAPI local.
+
+E se você atualizar o código fonte do FastAPI local, como ele é instalado com `--symlink` (ou `--pth-file` no Windows), quando você rodar aquele arquivo Python novamente, ele irá utilizar a nova versão do FastAPI que você acabou de editar.
+
+Desse modo, você não tem que "instalar" sua versão local para ser capaz de testar cada mudança.
+
+### Formato
+
+Tem um arquivo que você pode rodar que irá formatar e limpar todo o seu código:
+
+
+
+```console
+$ bash scripts/format.sh
+```
+
+
+
+Ele irá organizar também todos os seus imports.
+
+Para que ele organize os imports corretamente, você precisa ter o FastAPI instalado localmente em seu ambiente, com o comando na seção acima usando `--symlink` (ou `--pth-file` no Windows).
+
+### Formato dos imports
+
+Tem outro _script_ que formata todos os imports e garante que você não tenha imports não utilizados:
+
+
+
+Como ele roda um comando após o outro, modificando e revertendo muitos arquivos, ele demora um pouco para concluir, então pode ser um pouco mais fácil utilizar `scripts/format.sh` frequentemente e `scripts/format-imports.sh` somente após "commitar uma branch".
+
+## Documentação
+
+Primeiro, tenha certeza de configurar seu ambiente como descrito acima, isso irá instalar todas as requisições.
+
+A documentação usa MkDocs.
+
+E existem ferramentas/_scripts_ extras para controlar as traduções em `./scripts/docs.py`.
+
+!!! tip
+ Você não precisa ver o código em `./scripts/docs.py`, você apenas o utiliza na linha de comando.
+
+Toda a documentação está no formato Markdown no diretório `./docs/pt/`.
+
+Muitos dos tutoriais tem blocos de código.
+
+Na maioria dos casos, esse blocos de código são aplicações completas que podem ser rodadas do jeito que estão apresentados.
+
+De fato, esses blocos de código não estão escritos dentro do Markdown, eles são arquivos Python dentro do diretório `./docs_src/`.
+
+E esses arquivos Python são incluídos/injetados na documentação quando se gera o site.
+
+### Testes para Documentação
+
+A maioria dos testes na verdade rodam encima dos arquivos fonte na documentação.
+
+Isso ajuda a garantir:
+
+* Que a documentação esteja atualizada.
+* Que os exemplos da documentação possam ser rodadas do jeito que estão apresentadas.
+* A maior parte dos recursos é coberta pela documentação, garantida por cobertura de testes.
+
+Durante o desenvolvimento local, existe um _script_ que constrói o site e procura por quaisquer mudanças, carregando na hora:
+
+
+
+Isso irá servir a documentação em `http://127.0.0.1:8008`.
+
+Desse jeito, você poderá editar a documentação/arquivos fonte e ver as mudanças na hora.
+
+#### Typer CLI (opcional)
+
+As instruções aqui mostram como utilizar _scripts_ em `./scripts/docs.py` com o programa `python` diretamente.
+
+Mas você pode usar também Typer CLI, e você terá auto-completação para comandos no seu terminal após instalar o _completion_.
+
+Se você instalou Typer CLI, você pode instalar _completion_ com:
+
+
+
+```console
+$ typer --install-completion
+
+zsh completion installed in /home/user/.bashrc.
+Completion will take effect once you restart the terminal.
+```
+
+
+
+### Aplicações e documentação ao mesmo tempo
+
+Se você rodar os exemplos com, por exemplo:
+
+
+
+```console
+$ uvicorn tutorial001:app --reload
+
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+
+
+como Uvicorn utiliza por padrão a porta `8000`, a documentação na porta `8008` não dará conflito.
+
+### Traduções
+
+Ajuda com traduções É MUITO apreciada! E essa tarefa não pode ser concluída sem a ajuda da comunidade. 🌎 🚀
+
+Aqui estão os passos para ajudar com as traduções.
+
+#### Dicas e orientações
+
+* Verifique sempre os _pull requests_ existentes para a sua linguagem e faça revisões das alterações e aprove elas.
+
+!!! tip
+ Você pode adicionar comentários com sugestões de alterações para _pull requests_ existentes.
+
+ Verifique as documentações sobre adicionar revisão ao _pull request_ para aprovação ou solicitação de alterações.
+
+* Verifique em _issues_ para ver se existe alguém coordenando traduções para a sua linguagem.
+
+* Adicione um único _pull request_ por página traduzida. Isso tornará muito mais fácil a revisão para as outras pessoas.
+
+Para as linguagens que eu não falo, vou esperar por várias pessoas revisarem a tradução antes de _mergear_.
+
+* Você pode verificar também se há traduções para sua linguagem e adicionar revisão para elas, isso irá me ajudar a saber que a tradução está correta e eu possa _mergear_.
+
+* Utilize os mesmos exemplos Python e somente traduza o texto na documentação. Você não tem que alterar nada no código para que funcione.
+
+* Utilize as mesmas imagens, nomes de arquivo e links. Você não tem que alterar nada disso para que funcione.
+
+* Para verificar o código de duas letras para a linguagem que você quer traduzir, você pode usar a Lista de códigos ISO 639-1.
+
+#### Linguagem existente
+
+Vamos dizer que você queira traduzir uma página para uma linguagem que já tenha traduções para algumas páginas, como o Espanhol.
+
+No caso do Espanhol, o código de duas letras é `es`. Então, o diretório para traduções em Espanhol está localizada em `docs/es/`.
+
+!!! tip
+ A principal ("oficial") linguagem é o Inglês, localizado em `docs/en/`.
+
+Agora rode o _servidor ao vivo_ para as documentações em Espanhol:
+
+
+
+```console
+// Use o comando "live" e passe o código da linguagem como um argumento de linha de comando
+$ python ./scripts/docs.py live es
+
+[INFO] Serving on http://127.0.0.1:8008
+[INFO] Start watching changes
+[INFO] Start detecting changes
+```
+
+
+
+Agora você pode ir em http://127.0.0.1:8008 e ver suas mudanças ao vivo.
+
+Se você procurar no site da documentação do FastAPI, você verá que toda linguagem tem todas as páginas. Mas algumas páginas não estão traduzidas e tem notificação sobre a falta da tradução.
+
+Mas quando você rodar localmente como descrito acima, você somente verá as páginas que já estão traduzidas.
+
+Agora vamos dizer que você queira adicionar uma tradução para a seção [Recursos](features.md){.internal-link target=_blank}.
+
+* Copie o arquivo em:
+
+```
+docs/en/docs/features.md
+```
+
+* Cole ele exatamente no mesmo local mas para a linguagem que você quer traduzir, por exemplo:
+
+```
+docs/es/docs/features.md
+```
+
+!!! tip
+ Observe que a única mudança na rota é o código da linguagem, de `en` para `es`.
+
+* Agora abra o arquivo de configuração MkDocs para Inglês em:
+
+```
+docs/en/docs/mkdocs.yml
+```
+
+* Procure o lugar onde `docs/features.md` está localizado no arquivo de configuração. Algum lugar como:
+
+```YAML hl_lines="8"
+site_name: FastAPI
+# Mais coisas
+nav:
+- FastAPI: index.md
+- Languages:
+ - en: /
+ - es: /es/
+- features.md
+```
+
+* Abra o arquivo de configuração MkDocs para a linguagem que você está editando, por exemplo:
+
+```
+docs/es/docs/mkdocs.yml
+```
+
+* Adicione no mesmo local que está no arquivo em Inglês, por exemplo:
+
+```YAML hl_lines="8"
+site_name: FastAPI
+# Mais coisas
+nav:
+- FastAPI: index.md
+- Languages:
+ - en: /
+ - es: /es/
+- features.md
+```
+
+Tenha certeza que se existem outras entradas, a nova entrada com sua tradução esteja exatamente na mesma ordem como na versão em Inglês.
+
+Se você for no seu navegador verá que agora a documentação mostra sua nova seção. 🎉
+
+Agora você poderá traduzir tudo e ver como está toda vez que salva o arquivo.
+
+#### Nova linguagem
+
+Vamos dizer que você queira adicionar traduções para uma linguagem que ainda não foi traduzida, nem sequer uma página.
+
+Vamos dizer que você queira adicionar tradução para Haitiano, e ainda não tenha na documentação.
+
+Verificando o link acima, o código para "Haitiano" é `ht`.
+
+O próximo passo é rodar o _script_ para gerar um novo diretório de tradução:
+
+
+
+```console
+// Use o comando new-lang, passe o código da linguagem como um argumento de linha de comando
+$ python ./scripts/docs.py new-lang ht
+
+Successfully initialized: docs/ht
+Updating ht
+Updating en
+```
+
+
+
+Agora você pode verificar em seu editor de código o mais novo diretório criado `docs/ht/`.
+
+!!! tip
+ Crie um primeiro _pull request_ com apenas isso, para iniciar a configuração da nova linguagem, antes de adicionar traduções.
+
+ Desse modo outros poderão ajudar com outras páginas enquanto você trabalha na primeira. 🚀
+
+Inicie traduzindo a página principal, `docs/ht/index.md`.
+
+Então você pode continuar com as instruções anteriores, para uma "Linguagem Existente".
+
+##### Nova linguagem não suportada
+
+Se quando rodar o _script_ do _servidor ao vivo_ você pega um erro sobre linguagem não suportada, alguma coisa como:
+
+```
+ raise TemplateNotFound(template)
+jinja2.exceptions.TemplateNotFound: partials/language/xx.html
+```
+
+Isso significa que o tema não suporta essa linguagem (nesse caso, com um código falso de duas letras `xx`).
+
+Mas não se preocupe, você pode configurar o tema de linguagem para Inglês e então traduzir o conteúdo da documentação.
+
+Se você precisar fazer isso, edite o `mkdocs.yml` para sua nova linguagem, teremos algo como:
+
+```YAML hl_lines="5"
+site_name: FastAPI
+# Mais coisas
+theme:
+ # Mais coisas
+ language: xx
+```
+
+Altere essa linguagem de `xx` (do seu código de linguagem) para `en`.
+
+Então você poderá iniciar novamente o _servidor ao vivo_.
+
+#### Pré-visualize o resultado
+
+Quando você usa o _script_ em `./scripts/docs.py` com o comando `live` ele somente exibe os arquivos e traduções disponíveis para a linguagem atual.
+
+Mas uma vez que você tenha concluído, você poderá testar tudo como se parecesse _online_.
+
+Para fazer isso, primeiro construa toda a documentação:
+
+
+
+```console
+// Use o comando "build-all", isso leverá um tempinho
+$ python ./scripts/docs.py build-all
+
+Updating es
+Updating en
+Building docs for: en
+Building docs for: es
+Successfully built docs for: es
+Copying en index.md to README.md
+```
+
+
+
+Isso gera toda a documentação em `./docs_build/` para cada linguagem. Isso inclui a adição de quaisquer arquivos com tradução faltando, com uma nota dizendo que "esse arquivo ainda não tem tradução". Mas você não tem que fazer nada com esse diretório.
+
+Então ele constrói todos aqueles _sites_ independentes MkDocs para cada linguagem, combina eles, e gera a saída final em `./site/`.
+
+Então você poderá "servir" eles com o comando `serve`:
+
+
+
+```console
+// Use o comando "serve" após rodar "build-all"
+$ python ./scripts/docs.py serve
+
+Warning: this is a very simple server. For development, use mkdocs serve instead.
+This is here only to preview a site with translations already built.
+Make sure you run the build-all command first.
+Serving at: http://127.0.0.1:8008
+```
+
+
+
+## Testes
+
+Tem um _script_ que você pode rodar localmente para testar todo o código e gerar relatórios de cobertura em HTML:
+
+
+
+Esse comando gera um diretório `./htmlcov/`, se você abrir o arquivo `./htmlcov/index.html` no seu navegador, poderá explorar interativamente as regiões de código que estão cobertas pelos testes, e observar se existe alguma região faltando.
+
+### Testes no seu editor
+
+Se você quer usar os testes integrados em seu editor adicione `./docs_src` na sua variável `PYTHONPATH`.
+
+Por exemplo, no VS Code você pode criar um arquivo `.env` com:
+
+```env
+PYTHONPATH=./docs_src
+```
diff --git a/docs/pt/docs/tutorial/body-fields.md b/docs/pt/docs/tutorial/body-fields.md
new file mode 100644
index 00000000..8f3313ae
--- /dev/null
+++ b/docs/pt/docs/tutorial/body-fields.md
@@ -0,0 +1,48 @@
+# Corpo - Campos
+
+Da mesma forma que você pode declarar validações adicionais e metadados nos parâmetros de *funções de operações de rota* com `Query`, `Path` e `Body`, você pode declarar validações e metadados dentro de modelos do Pydantic usando `Field` do Pydantic.
+
+## Importe `Field`
+
+Primeiro, você tem que importá-lo:
+
+```Python hl_lines="4"
+{!../../../docs_src/body_fields/tutorial001.py!}
+```
+
+!!! warning "Aviso"
+ Note que `Field` é importado diretamente do `pydantic`, não do `fastapi` como todo o resto (`Query`, `Path`, `Body`, etc).
+
+## Declare atributos do modelo
+
+Você pode então utilizar `Field` com atributos do modelo:
+
+```Python hl_lines="11-14"
+{!../../../docs_src/body_fields/tutorial001.py!}
+```
+
+`Field` funciona da mesma forma que `Query`, `Path` e `Body`, ele possui todos os mesmos parâmetros, etc.
+
+!!! note "Detalhes técnicos"
+ Na realidade, `Query`, `Path` e outros que você verá em seguida, criam objetos de subclasses de uma classe `Param` comum, que é ela mesma uma subclasse da classe `FieldInfo` do Pydantic.
+
+ E `Field` do Pydantic retorna uma instância de `FieldInfo` também.
+
+ `Body` também retorna objetos de uma subclasse de `FieldInfo` diretamente. E tem outras que você verá mais tarde que são subclasses da classe `Body`.
+
+ Lembre-se que quando você importa `Query`, `Path`, e outros de `fastapi`, esse são na realidade funções que retornam classes especiais.
+
+!!! tip "Dica"
+ Note como cada atributo do modelo com um tipo, valor padrão e `Field` possuem a mesma estrutura que parâmetros de *funções de operações de rota*, com `Field` ao invés de `Path`, `Query` e `Body`.
+
+## Adicione informações extras
+
+Você pode declarar informação extra em `Field`, `Query`, `Body`, etc. E isso será incluído no JSON Schema gerado.
+
+Você irá aprender mais sobre adicionar informações extras posteriormente nessa documentação, quando estiver aprendendo a declarar exemplos.
+
+## Recapitulando
+
+Você pode usar `Field` do Pydantic para declarar validações extras e metadados para atributos do modelo.
+
+Você também pode usar os argumentos de palavras-chave extras para passar metadados do JSON Schema adicionais.
diff --git a/docs/pt/mkdocs.yml b/docs/pt/mkdocs.yml
index 230012d3..6102a859 100644
--- a/docs/pt/mkdocs.yml
+++ b/docs/pt/mkdocs.yml
@@ -55,6 +55,7 @@ nav:
- Tutorial - Guia de Usuário:
- tutorial/index.md
- tutorial/first-steps.md
+ - tutorial/body-fields.md
- alternatives.md
- history-design-future.md
- external-links.md
diff --git a/docs/zh/docs/fastapi-people.md b/docs/zh/docs/fastapi-people.md
new file mode 100644
index 00000000..080af2ee
--- /dev/null
+++ b/docs/zh/docs/fastapi-people.md
@@ -0,0 +1,165 @@
+# FastAPI 社区
+
+FastAPI 有一个非常棒的社区,它欢迎来自各个领域和背景的朋友。
+
+## 创建者 & 维护者
+
+嘿! 👋
+
+这就是我:
+
+{% if people %}
+