diff --git a/.github/DISCUSSION_TEMPLATE/translations.yml b/.github/DISCUSSION_TEMPLATE/translations.yml
new file mode 100644
index 000000000..16e304d99
--- /dev/null
+++ b/.github/DISCUSSION_TEMPLATE/translations.yml
@@ -0,0 +1,45 @@
+labels: [lang-all]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Thanks for your interest in helping translate the FastAPI docs! đ
+
+ Please follow these instructions carefully to propose a new language translation. đ
+
+ This structured process helps ensure translations can be properly maintained long-term.
+ - type: checkboxes
+ id: checks
+ attributes:
+ label: Initial Checks
+ description: Please confirm and check all the following options.
+ options:
+ - label: I checked that this language is not already being translated in FastAPI docs.
+ required: true
+ - label: I searched existing discussions to ensure no one else proposed this language.
+ required: true
+ - label: I am a native speaker of the language I want to help translate.
+ required: true
+ - type: input
+ id: language
+ attributes:
+ label: Target Language
+ description: What language do you want to translate the FastAPI docs into?
+ placeholder: e.g. Latin
+ validations:
+ required: true
+ - type: textarea
+ id: additional_info
+ attributes:
+ label: Additional Information
+ description: Any other relevant information about your translation proposal
+ - type: markdown
+ attributes:
+ value: |
+ Translations are automatized with AI and then reviewed by native speakers. đ¤ đ
+
+ This allows us to keep them consistent and up-to-date.
+
+ If there are several native speakers commenting on this discussion and
+ committing to help review new translations, the FastAPI team will review it
+ and potentially make it an official translation. đ
diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml
index 6ecdf487c..e84e4e4ab 100644
--- a/.github/workflows/build-docs.yml
+++ b/.github/workflows/build-docs.yml
@@ -53,7 +53,7 @@ jobs:
with:
python-version: "3.11"
- name: Setup uv
- uses: astral-sh/setup-uv@v5
+ uses: astral-sh/setup-uv@v6
with:
version: "0.4.15"
enable-cache: true
@@ -95,7 +95,7 @@ jobs:
with:
python-version: "3.11"
- name: Setup uv
- uses: astral-sh/setup-uv@v5
+ uses: astral-sh/setup-uv@v6
with:
version: "0.4.15"
enable-cache: true
diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml
index 87abfe3a1..34b54b452 100644
--- a/.github/workflows/contributors.yml
+++ b/.github/workflows/contributors.yml
@@ -30,7 +30,7 @@ jobs:
with:
python-version: "3.11"
- name: Setup uv
- uses: astral-sh/setup-uv@v5
+ uses: astral-sh/setup-uv@v6
with:
version: "0.4.15"
enable-cache: true
diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml
index aec327f48..9ca69b208 100644
--- a/.github/workflows/deploy-docs.yml
+++ b/.github/workflows/deploy-docs.yml
@@ -29,7 +29,7 @@ jobs:
with:
python-version: "3.11"
- name: Setup uv
- uses: astral-sh/setup-uv@v5
+ uses: astral-sh/setup-uv@v6
with:
version: "0.4.15"
enable-cache: true
diff --git a/.github/workflows/label-approved.yml b/.github/workflows/label-approved.yml
index 02070146c..908a9453d 100644
--- a/.github/workflows/label-approved.yml
+++ b/.github/workflows/label-approved.yml
@@ -26,7 +26,7 @@ jobs:
with:
python-version: "3.11"
- name: Setup uv
- uses: astral-sh/setup-uv@v5
+ uses: astral-sh/setup-uv@v6
with:
version: "0.4.15"
enable-cache: true
diff --git a/.github/workflows/notify-translations.yml b/.github/workflows/notify-translations.yml
index c96992689..621d1253a 100644
--- a/.github/workflows/notify-translations.yml
+++ b/.github/workflows/notify-translations.yml
@@ -34,7 +34,7 @@ jobs:
with:
python-version: "3.11"
- name: Setup uv
- uses: astral-sh/setup-uv@v5
+ uses: astral-sh/setup-uv@v6
with:
version: "0.4.15"
enable-cache: true
diff --git a/.github/workflows/people.yml b/.github/workflows/people.yml
index 6ec3c1ad2..c1df3455e 100644
--- a/.github/workflows/people.yml
+++ b/.github/workflows/people.yml
@@ -30,7 +30,7 @@ jobs:
with:
python-version: "3.11"
- name: Setup uv
- uses: astral-sh/setup-uv@v5
+ uses: astral-sh/setup-uv@v6
with:
version: "0.4.15"
enable-cache: true
@@ -51,3 +51,4 @@ jobs:
run: python ./scripts/people.py
env:
GITHUB_TOKEN: ${{ secrets.FASTAPI_PEOPLE }}
+ SLEEP_INTERVAL: ${{ vars.PEOPLE_SLEEP_INTERVAL }}
diff --git a/.github/workflows/smokeshow.yml b/.github/workflows/smokeshow.yml
index a0ffd55e6..d8a5dfb30 100644
--- a/.github/workflows/smokeshow.yml
+++ b/.github/workflows/smokeshow.yml
@@ -26,7 +26,7 @@ jobs:
with:
python-version: '3.9'
- name: Setup uv
- uses: astral-sh/setup-uv@v5
+ uses: astral-sh/setup-uv@v6
with:
version: "0.4.15"
enable-cache: true
diff --git a/.github/workflows/sponsors.yml b/.github/workflows/sponsors.yml
index a5230c834..6da4d90e1 100644
--- a/.github/workflows/sponsors.yml
+++ b/.github/workflows/sponsors.yml
@@ -30,7 +30,7 @@ jobs:
with:
python-version: "3.11"
- name: Setup uv
- uses: astral-sh/setup-uv@v5
+ uses: astral-sh/setup-uv@v6
with:
version: "0.4.15"
enable-cache: true
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 5e8092641..c3940be01 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -29,7 +29,7 @@ jobs:
with:
python-version: "3.11"
- name: Setup uv
- uses: astral-sh/setup-uv@v5
+ uses: astral-sh/setup-uv@v6
with:
version: "0.4.15"
enable-cache: true
@@ -67,7 +67,7 @@ jobs:
with:
python-version: ${{ matrix.python-version }}
- name: Setup uv
- uses: astral-sh/setup-uv@v5
+ uses: astral-sh/setup-uv@v6
with:
version: "0.4.15"
enable-cache: true
@@ -112,7 +112,7 @@ jobs:
with:
python-version: '3.8'
- name: Setup uv
- uses: astral-sh/setup-uv@v5
+ uses: astral-sh/setup-uv@v6
with:
version: "0.4.15"
enable-cache: true
diff --git a/.github/workflows/topic-repos.yml b/.github/workflows/topic-repos.yml
index 3c5c881f1..433aeb00b 100644
--- a/.github/workflows/topic-repos.yml
+++ b/.github/workflows/topic-repos.yml
@@ -25,7 +25,7 @@ jobs:
with:
python-version: "3.11"
- name: Setup uv
- uses: astral-sh/setup-uv@v5
+ uses: astral-sh/setup-uv@v6
with:
version: "0.4.15"
enable-cache: true
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 05c33a608..e461b0133 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -14,7 +14,7 @@ repos:
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.9.4
+ rev: v0.12.4
hooks:
- id: ruff
args:
diff --git a/README.md b/README.md
index 9a1260b90..b3eaa6b35 100644
--- a/README.md
+++ b/README.md
@@ -48,22 +48,21 @@ The key features are:
-
-
-
-
-
+
-
+
+
-
+
+
+
@@ -150,7 +149,7 @@ $ pip install "fastapi[standard]"
### Create it
-* Create a file `main.py` with:
+Create a file `main.py` with:
```Python
from typing import Union
@@ -472,15 +471,20 @@ Used by Starlette:
* jinja2
- Required if you want to use the default template configuration.
* python-multipart
- Required if you want to support form "parsing" , with `request.form()`.
-Used by FastAPI / Starlette:
+Used by FastAPI:
* uvicorn
- for the server that loads and serves your application. This includes `uvicorn[standard]`, which includes some dependencies (e.g. `uvloop`) needed for high performance serving.
-* `fastapi-cli` - to provide the `fastapi` command.
+* `fastapi-cli[standard]` - to provide the `fastapi` command.
+ * This includes `fastapi-cloud-cli`, which allows you to deploy your FastAPI application to FastAPI Cloud .
### Without `standard` Dependencies
If you don't want to include the `standard` optional dependencies, you can install with `pip install fastapi` instead of `pip install "fastapi[standard]"`.
+### Without `fastapi-cloud-cli`
+
+If you want to install FastAPI with the standard dependencies but without the `fastapi-cloud-cli`, you can install with `pip install "fastapi[standard-no-fastapi-cloud-cli]"`.
+
### Additional Optional Dependencies
There are some additional dependencies you might want to install.
diff --git a/docs/bn/docs/about/index.md b/docs/bn/docs/about/index.md
new file mode 100644
index 000000000..b6d611ae9
--- /dev/null
+++ b/docs/bn/docs/about/index.md
@@ -0,0 +1,3 @@
+# āϏāĻŽā§āĻĒāϰā§āĻā§
+
+**FastAPI** āϏāĻŽā§āĻĒāϰā§āĻā§ āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ â āĻāϰ āĻĄāĻŋāĻāĻžāĻāύ, āĻ
āύā§āĻĒā§āϰā§āϰāĻŖāĻž āĻ āĻāϰāĻ āĻ
āύā§āĻ āĻāĻŋāĻā§āĨ¤ đ¤
diff --git a/docs/bn/docs/environment-variables.md b/docs/bn/docs/environment-variables.md
new file mode 100644
index 000000000..9122ca5bf
--- /dev/null
+++ b/docs/bn/docs/environment-variables.md
@@ -0,0 +1,298 @@
+# āĻāύāĻāĻžāϝāĻŧāϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāϏ
+
+/// tip
+
+āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ "āĻāύāĻāĻžāϝāĻŧāϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāϏ" āĻā§ āĻāĻŦāĻ āϏā§āĻā§āϞ⧠āĻā§āĻāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāϝāĻŧ āϏā§āĻāĻž āĻāĻžāύā§āύ, āϤāĻžāĻšāϞ⧠āĻāĻ āĻ
āĻāĻļāĻāĻŋ āϏā§āĻāĻŋāĻĒ āĻāϰ⧠āϝā§āϤ⧠āĻĒāĻžāϰā§āύāĨ¤
+
+///
+
+āĻāύāĻāĻžāϝāĻŧāϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ (āϏāĻāĻā§āώā§āĻĒā§ "**env var**" āύāĻžāĻŽā§āĻ āĻĒāϰāĻŋāĻāĻŋāϤ) āĻšāϞ⧠āĻāĻŽāύ āĻāĻāĻāĻŋ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āϝāĻž āĻĒāĻžāĻāĻĨāύ āĻā§āĻĄā§āϰ **āĻŦāĻžāĻāϰā§**, **āĻ
āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽā§** āĻĨāĻžāĻā§ āĻāĻŦāĻ āĻāĻĒāύāĻžāϰ āĻĒāĻžāĻāĻĨāύ āĻā§āĻĄ (āĻŦāĻž āĻ
āύā§āϝāĻžāύā§āϝ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ) āĻĻā§āĻŦāĻžāϰāĻž āϝāĻžāĻā§ āϰāĻŋāĻĄ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤
+
+āĻāύāĻāĻžāϝāĻŧāϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāϏ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύā§āϰ **āϏā§āĻāĻŋāĻāϏ** āĻĒāϰāĻŋāĻāĻžāϞāύāĻž āĻāϰāϤā§, āĻĒāĻžāĻāĻĨāύā§āϰ **āĻāύāϏā§āĻāϞā§āĻļāύ** āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāϰ āĻ
āĻāĻļ āĻšāĻŋāϏā§āĻŦā§, āĻāϤā§āϝāĻžāĻĻāĻŋ āĻāĻžāĻā§ āĻāĻĒāϝā§āĻā§ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
+
+## Env Vars āϤā§āϰ⧠āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ
+
+āĻāĻĒāύāĻŋ **āĻļā§āϞ (āĻāĻžāϰā§āĻŽāĻŋāύāĻžāϞ)**-āĻ, āĻĒāĻžāĻāĻĨāύā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āĻāĻžāĻĄāĻŧāĻžāĻ, āĻāύāĻāĻžāϝāĻŧāϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāϏ **āϤā§āϰāĻŋ** āĻāĻŦāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύāĻ
+
+//// tab | āϞāĻŋāύāĻžāĻā§āϏ, āĻŽā§āϝāĻžāĻāĻāĻāϏ, āĻāĻāύā§āĻĄā§āĻ Bash
+
+
+
+```console
+// āĻāĻĒāύāĻŋ āĻāĻžāĻāϞ⧠MY_NAME āύāĻžāĻŽā§ āĻāĻāĻāĻŋ env var āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ
+$ export MY_NAME="Wade Wilson"
+
+// āϤāĻžāϰāĻĒāϰ⧠āĻāĻāĻŋāĻā§ āĻāĻžāĻāϞ⧠āĻ
āύā§āϝāĻžāύā§āϝ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ
+$ echo "Hello $MY_NAME"
+
+Hello Wade Wilson
+```
+
+
+
+////
+
+//// tab | āĻāĻāύā§āĻĄā§āĻ āĻĒāĻžāĻā§āĻžāϰāĻļā§āϞ
+
+
+
+```console
+// MY_NAME āύāĻžāĻŽā§ env var āϤā§āϰāĻŋ
+$ $Env:MY_NAME = "Wade Wilson"
+
+// āĻ
āύā§āϝāĻžāύā§āϝ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§ āĻāĻāĻŋāĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ
+$ echo "Hello $Env:MY_NAME"
+
+Hello Wade Wilson
+```
+
+
+
+////
+
+## āĻĒāĻžāĻāĻĨāύ⧠env vars āϰāĻŋāĻĄ āĻāϰāĻž
+
+āĻāĻĒāύāĻŋ āĻāĻžāĻāϞ⧠āĻĒāĻžāĻāĻĨāύā§āϰ **āĻŦāĻžāĻāϰā§**, āĻāĻžāϰā§āĻŽāĻŋāύāĻžāϞ⧠(āĻŦāĻž āĻ
āύā§āϝ āĻā§āύ⧠āĻāĻĒāĻžāϝāĻŧā§) āĻāύāĻāĻžāϝāĻŧāϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāϏ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āĻāĻŦāĻ āĻĒāϰ⧠āϏā§āĻā§āϞ⧠**āĻĒāĻžāĻāĻĨāύ⧠āϰāĻŋāĻĄ** (āĻ
ā§āϝāĻžāĻā§āϏā§āϏ āĻāϰāϤā§) āĻĒāĻžāϰā§āύāĨ¤
+
+āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻāĻĒāύāĻžāϰ `main.py` āύāĻžāĻŽā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞ āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĻ
+
+```Python hl_lines="3"
+import os
+
+name = os.getenv("MY_NAME", "World")
+print(f"Hello {name} from Python")
+```
+
+/// tip
+
+`os.getenv()` āĻāϰ āĻĻā§āĻŦāĻŋāϤā§ā§ āĻāϰā§āĻā§āĻŽā§āύā§āĻāĻāĻŋ āĻšāϞ⧠āĻāϰ āĻĄāĻŋāĻĢāϞā§āĻ āĻā§āϝāĻžāϞ⧠āϝāĻž āϰāĻŋāĻāĻžāϰā§āύ āĻāϰāĻž āĻšāĻŦā§āĨ¤
+
+āϝāĻĻāĻŋ āĻāĻāĻŋ āĻĻā§āĻā§āĻž āύāĻž āĻšā§, āĻĄāĻŋāĻĢāϞā§āĻāĻāĻžāĻŦā§ `None` āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāĻŦā§, āĻāĻāĻžāύ⧠āĻāĻŽāϰāĻž āĻĄāĻŋāĻĢāϞā§āĻ āĻā§āϝāĻžāϞ⧠āĻšāĻŋāϏā§āĻŦā§ `"World"` āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĻāĻŋāĨ¤
+
+///
+
+āϤāĻžāϰāĻĒāϰ⧠āĻĒāĻžāĻāĻĨāύ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋāĻā§ āύāĻŋāĻŽā§āύā§āĻā§āϤāĻāĻžāĻŦā§ āĻāϞ āĻāϰāĻž āϝāĻžāĻŦā§āĻ
+
+//// tab | āϞāĻŋāύāĻžāĻā§āϏ, āĻŽā§āϝāĻžāĻāĻāĻāϏ, āĻāĻāύā§āĻĄā§āĻ Bash
+
+
+
+```console
+// āĻāĻāύ⧠āĻāĻŽāϰāĻž āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āϏā§āĻ āĻāϰāĻŋāύāĻŋ
+$ python main.py
+
+// āϝā§āĻšā§āϤ⧠env var āϏā§āĻ āĻāϰāĻž āĻšā§āύāĻŋ, āϤāĻžāĻ āĻāĻŽāϰāĻž āĻĄāĻŋāĻĢāϞā§āĻ āĻā§āϝāĻžāϞ⧠āĻĒāĻžāĻā§āĻāĻŋ
+
+Hello World from Python
+
+// āĻāĻŋāύā§āϤ⧠āĻāĻŽāϰāĻž āĻĒā§āϰāĻĨāĻŽā§ āϝāĻĻāĻŋ āĻāĻāĻāĻž āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻāĻžāϰāĻŋā§ā§āĻŦāϞ āϤā§āϰāĻŋ āĻāϰ⧠āύā§āĻ
+$ export MY_NAME="Wade Wilson"
+
+// āĻāĻŦāĻ āϤāĻžāϰāĻĒāϰ āĻāĻŦāĻžāϰ āĻĒā§āϰā§āĻā§āϰāĻžāĻāĻŋāĻā§ āĻāϞ āĻāϰāĻŋ
+$ python main.py
+
+// āĻāĻāύ āĻāĻāĻŋ āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āϰāĻŋāĻĄ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§
+
+Hello Wade Wilson from Python
+```
+
+
+
+////
+
+//// tab | āĻāĻāύā§āĻĄā§āĻ āĻĒāĻžāĻā§āĻžāϰāĻļā§āϞ
+
+
+
+```console
+// āĻāĻāύ⧠āĻāĻŽāϰāĻž āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āϏā§āĻ āĻāϰāĻŋāύāĻŋ
+$ python main.py
+
+// āϝā§āĻšā§āϤ⧠env var āϏā§āĻ āĻāϰāĻž āĻšā§āύāĻŋ, āϤāĻžāĻ āĻāĻŽāϰāĻž āĻĄāĻŋāĻĢāϞā§āĻ āĻā§āϝāĻžāϞ⧠āĻĒāĻžāĻā§āĻāĻŋ
+
+Hello World from Python
+
+// āĻāĻŋāύā§āϤ⧠āĻāĻŽāϰāĻž āĻĒā§āϰāĻĨāĻŽā§ āϝāĻĻāĻŋ āĻāĻāĻāĻž āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻāĻžāϰāĻŋā§ā§āĻŦāϞ āϤā§āϰāĻŋ āĻāϰ⧠āύā§āĻ
+$ $Env:MY_NAME = "Wade Wilson"
+
+// āĻāĻŦāĻ āϤāĻžāϰāĻĒāϰ āĻāĻŦāĻžāϰ āĻĒā§āϰā§āĻā§āϰāĻžāĻāĻŋāĻā§ āĻāϞ āĻāϰāĻŋ
+$ python main.py
+
+// āĻāĻāύ āĻāĻāĻŋ āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āϰāĻŋāĻĄ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§
+
+Hello Wade Wilson from Python
+```
+
+
+
+////
+
+āϝā§āĻšā§āϤ⧠āĻāύāĻāĻžāϝāĻŧāϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāϏ āĻā§āĻĄā§āϰ āĻŦāĻžāĻāϰ⧠āϏā§āĻ āĻāϰāĻž āϝāĻžāϝāĻŧ, āĻāĻŋāύā§āϤ⧠āĻĒāϰāĻŦāϰā§āϤā§āϤ⧠āĻā§āĻĄ āĻĻā§āĻŦāĻžāϰāĻž āϰāĻŋāĻĄ āĻāϰāĻž āϝāĻžāϝāĻŧ, āĻāĻŦāĻ āĻŦāĻžāĻāĻŋ āĻĢāĻžāĻāϞāĻā§āϞā§āϰ āϏāĻžāĻĨā§ āϰāĻžāĻāϤ⧠(`git` āĻ āĻāĻŽāĻŋāĻ) āĻšā§ āύāĻž, āϤāĻžāĻ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύāϏ āĻŦāĻž **āϏā§āĻāĻŋāĻāϏ** āĻāϰ āĻāύā§āϝ āĻāĻā§āϞ⧠āϏāĻžāϧāĻžāϰāĻŖāϤ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§ā§ āĻĨāĻžāĻā§āĨ¤
+
+āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻāύāĻāĻžāϝāĻŧāϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻāĻāĻŋ **āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻāύāĻā§āĻā§āĻļāύā§āϰ** āĻāύā§āϝāĻ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ, āϝāĻž āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āϏā§āĻ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§āϰ āĻāύā§āϝāĻ āĻāĻā§āĻāϞā§āĻŦāϞ āĻĨāĻžāĻāĻŦā§ āĻāĻŦāĻ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āϤāĻžāϰ āĻāϞāĻžāĻāĻžāϞā§āύ āϏāĻŽāϝāĻŧ āĻĒāϰā§āϝāύā§āϤāĻ āϏāĻā§āϰāĻŋāϝāĻŧ āĻĨāĻžāĻāĻŦā§āĨ¤
+
+āĻāĻāĻŋ āĻāϰāϤā§, āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋ āϰāĻžāύ āĻāϰāĻžāϰ āĻ āĻŋāĻ āĻāĻā§āĻ, āĻāĻāĻ āϞāĻžāĻāύ⧠āĻāύāĻāĻžāϝāĻŧāϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āϤā§āϰāĻŋ āĻāϰā§āύ:
+
+
+
+```console
+// āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋ āĻāϞ āĻāϰāĻžāϰ āϏāĻŽā§ āĻāĻāĻ āϞāĻžāĻāύ⧠MY_NAME āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋā§ā§āĻŦāϞ āϤā§āϰāĻŋ āĻāϰā§āύ
+$ MY_NAME="Wade Wilson" python main.py
+
+// āĻāĻāύ āĻāĻāĻŋ āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϝāϰāĻŋā§ā§āĻŦāϞāĻāĻŋāĻā§ āϰāĻŋāĻĄ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§
+
+Hello Wade Wilson from Python
+
+// āĻĒāϰāĻŦāϰā§āϤā§āϤ⧠āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāĻāĻŋāĻā§ āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžāĻā§āĻā§ āύāĻž
+$ python main.py
+
+Hello World from Python
+```
+
+
+
+/// tip
+
+āĻāĻāĻŋ āύāĻŋā§ā§ āĻāϰ⧠āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āύ āĻāĻāĻžāύ⧠The Twelve-Factor App: Config āĨ¤
+
+///
+
+## āĻāĻžāĻāĻĒāϏ āĻāĻŦāĻ āĻā§āϝāĻžāϞāĻŋāĻĄā§āĻļāύ
+
+āĻāĻ āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞāĻā§āϞ⧠āĻļā§āϧā§āĻŽāĻžāϤā§āϰ **āĻā§āĻā§āϏāĻ āϏā§āĻā§āϰāĻŋāĻāϏ** āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāϰāϤ⧠āĻĒāĻžāϰā§, āϝā§āĻšā§āϤ⧠āĻāĻā§āϞ⧠āĻĒāĻžāĻāĻĨāύā§āϰ āĻŦāĻžāĻāϰ⧠āĻ
āĻŦāϏā§āĻĨāĻŋāϤ āĻāĻŦāĻ āĻ
āύā§āϝāĻžāύā§āϝ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻāĻŦāĻ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻŦāĻžāĻāĻŋ āĻ
āĻāĻļā§āϰ (āĻāĻŽāύāĻāĻŋ āĻŦāĻŋāĻāĻŋāύā§āύ āĻ
āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ āϝā§āĻŽāύ āϞāĻŋāύāĻžāĻā§āϏ, āĻāĻāύā§āĻĄā§āĻ, āĻŽā§āϝāĻžāĻāĻāĻāϏ) āϏāĻžāĻĨā§ āϏāĻžāĻŽāĻā§āĻāϏā§āϝāĻĒā§āϰā§āĻŖ āĻšāϤ⧠āĻšāϝāĻŧāĨ¤
+
+āĻāϰ āĻ
āϰā§āĻĨ āĻšāĻā§āĻā§ āĻĒāĻžāĻāĻĨāύ⧠āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻĨā§āĻā§ āϰāĻŋāĻĄ āĻāϰāĻž **āϝā§āĻā§āύ⧠āĻā§āϝāĻžāϞā§** āĻāĻāĻāĻŋ `str` āĻšāĻŦā§, āĻāĻŦāĻ āĻ
āύā§āϝ āĻā§āύ⧠āĻāĻžāĻāĻĒā§ āĻāύāĻāĻžāϰā§āϏāύ āĻŦāĻž āϝā§āĻā§āύ⧠āĻā§āϞāĻŋāĻĄā§āĻļāύ āĻā§āĻĄā§ āĻāϞāĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
+
+āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠**āĻāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏā§āĻāĻŋāĻāϏ** āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāϰāĻž āύāĻŋā§ā§ āĻāϰ⧠āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ āĻāĻžāύāĻž āϝāĻžāĻŦā§ [Advanced User Guide - Settings and Environment Variables](./advanced/settings.md){.internal-link target=_blank}.
+
+## `PATH` āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋā§ā§āĻŦāϞ
+
+**`PATH`** āύāĻžāĻŽā§ āĻāĻāĻāĻŋ **āĻŦāĻŋāĻļā§āώ** āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋā§ā§āĻŦāϞ āϰā§ā§āĻā§, āϝā§āĻāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āϰāĻžāύ āĻāϰāĻžāϰ āĻāύā§āϝ āĻ
āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽāϏ (āϞāĻŋāύāĻžāĻā§āϏ, āĻŽā§āϝāĻžāĻāĻāĻāϏ, āĻāĻāύā§āĻĄā§āĻ) āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āϝāĻŦāĻšā§āϤ āĻšā§āĨ¤
+
+`PATH` āĻā§āϰāĻŋā§ā§āĻŦāϞ āĻāϰ āĻā§āϝāĻžāϞ⧠āĻšāĻā§āĻā§ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļāĻžāϞ āϏā§āĻā§āϰāĻŋāĻ āϝāĻž āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāĻā§ āĻā§āϞāύ `:` āĻĻāĻŋā§ā§ āĻāϞāĻžāĻĻāĻž āĻāϰāĻžāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϞāĻŋāύāĻžāĻā§āϏ⧠āĻ āĻŽā§āϝāĻžāĻāĻāĻāϏ āĻ, āĻāĻŦāĻ āϏā§āĻŽāĻŋāĻā§āϞāύ `;` āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻāύā§āĻĄā§āĻ āĻ āϤā§āϰāĻŋ āĻāϰāĻž āĻĨāĻžāĻā§āĨ¤
+
+āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, `PATH` āĻā§āϰāĻŋā§ā§āĻŦāϞ āύāĻŋāĻā§āϰ āĻŽāϤ⧠āĻĻā§āĻāϤ⧠āĻšāϤ⧠āĻĒāĻžāϰā§āĻ
+
+//// tab | āϞāĻŋāύāĻžāĻā§āϏ, āĻŽā§āϝāĻžāĻāĻāĻāϏ
+
+```plaintext
+/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
+```
+
+āϤāĻžāϰāĻŽāĻžāύ⧠āĻšāϞ⧠āϏāĻŋāϏā§āĻā§āĻŽ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻā§āϞā§āĻā§ āύāĻŋāĻā§āϰ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāĻā§āϞā§āϤ⧠āĻā§āĻāĻāĻŦā§āĻ
+
+* `/usr/local/bin`
+* `/usr/bin`
+* `/bin`
+* `/usr/sbin`
+* `/sbin`
+
+////
+
+//// tab | āĻāĻāύā§āĻĄā§āĻ
+
+```plaintext
+C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32
+```
+
+āϤāĻžāϰāĻŽāĻžāύ⧠āĻšāϞ⧠āϏāĻŋāϏā§āĻā§āĻŽ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻā§āϞā§āĻā§ āύāĻŋāĻā§āϰ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāĻā§āϞā§āϤ⧠āĻā§āĻāĻāĻŦā§āĻ
+
+* `C:\Program Files\Python312\Scripts`
+* `C:\Program Files\Python312`
+* `C:\Windows\System32`
+
+////
+
+āϝāĻāύ āĻāĻĒāύāĻŋ āĻāĻžāϰā§āĻŽāĻŋāύāĻžāϞ⧠āĻā§āύ⧠**āĻāĻŽāĻžāύā§āĻĄ** āϞāĻŋāĻāĻŦā§āύ, āĻ
āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ **āĻĒā§āϰāϤā§āϝā§āĻāĻāĻŋ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϤā§** āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋ **āĻā§āĻāĻāĻŦā§** āϝā§āĻā§āϞ⧠`PATH` āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋā§ā§āĻŦāϞ āĻ āϞāĻŋāϏā§āĻ āĻāϰāĻž āĻāĻā§āĨ¤
+
+āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āϝāĻāύ āĻāĻĒāύāĻŋ āĻāĻžāϰā§āĻŽāĻŋāύāĻžāϞ⧠`python` āĻāĻžāĻāĻĒ āĻāϰāĻŦā§āύ, āĻ
āĻĒāĻžāϰā§āĻāĻŋāĻ āϏāĻŋāϏā§āĻā§āĻŽ āĻāĻ āϞāĻŋāϏā§āĻ āĻāϰ **āĻĒā§āϰāĻĨāĻŽ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϤā§** `python` āύāĻžāĻŽā§āϰ āĻāĻāĻāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽ āĻā§āĻāĻāĻŦā§āĨ¤
+
+āϝāĻĻāĻŋ āĻāĻāĻŋ āĻā§āĻāĻā§ āĻĒāĻžā§, āϤāĻžāĻšāϞ⧠āĻāĻāĻŋ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋāĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āĨ¤ āĻ
āύā§āϝāĻĨāĻžā§ āĻāĻāĻŋ **āĻ
āύā§āϝāĻžāύā§āϝ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāĻā§āϞā§āϤā§** āĻāĻāĻŋāĻā§ āĻā§āĻāĻāϤ⧠āĻĨāĻžāĻāĻŦā§āĨ¤
+
+### āĻĒāĻžāĻāĻĨāύ āĻāύāϏā§āĻāϞ āĻāĻŦāĻ `PATH` āĻāĻĒāĻĄā§āĻ
+
+āϝāĻāύ āĻāĻĒāύāĻŋ āĻĒāĻžāĻāĻĨāύ āĻāύāϏā§āĻāϞ āĻāϰā§āύ, āĻāĻĒāύāĻŋ `PATH` āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋā§ā§āĻŦāϞ āĻāĻĒāĻĄā§āĻ āĻāϰāϤ⧠āĻāĻžāύ āĻāĻŋāύāĻž āϏā§āĻāĻž āĻāĻŋāĻā§āĻā§āϏ āĻāϰāĻž āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤
+
+//// tab | āϞāĻŋāύāĻžāĻā§āϏ, āĻŽā§āϝāĻžāĻāĻāĻāϏ
+
+āϧāϰāĻž āϝāĻžāĻ āĻāĻĒāύāĻŋ āĻĒāĻžāĻāĻĨāύ āĻāύāϏā§āĻāϞ āĻāϰāϞā§āύ āĻāĻŦāĻ āĻāĻāĻŋ `/opt/custompython/bin` āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϤ⧠āĻāύāϏā§āĻāϞ āĻšāĻā§āĻā§āĨ¤
+
+āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ "Yes" āϏāĻŋāϞā§āĻā§āĻ āĻāϰ⧠`PATH` āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋā§ā§āĻŦāϞ āĻāĻĒāĻĄā§āĻ āĻāϰāϤ⧠āĻāĻžāύ, āϤāĻžāĻšāϞ⧠āĻāύāϏā§āĻāϞāĻžāϰ `/opt/custompython/bin` āĻā§ `PATH` āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋā§ā§āĻŦāϞ āĻ āĻāĻĄ āĻāϰ⧠āĻĻāĻŋāĻŦā§āĨ¤
+
+āĻāĻāĻž āĻĻā§āĻāϤ⧠āĻāĻŽāύāĻāĻž āĻšāϤ⧠āĻĒāĻžāϰā§āĻ
+
+```plaintext
+/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/custompython/bin
+```
+
+āĻāĻāĻāĻžāĻŦā§, āĻāĻĒāύāĻŋ āϝāĻāύ āĻāĻžāϰā§āĻŽāĻŋāύāĻžāϞ⧠`python` āĻāĻžāĻāĻĒ āĻāϰā§āύ, āϏāĻŋāϏā§āĻā§āĻŽ āĻĒāĻžāĻāĻĨāύ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋāĻā§ `/opt/custompython/bin` (āϏāϰā§āĻŦāĻļā§āώ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ) āϤ⧠āĻā§āĻāĻā§ āĻĒāĻžāĻŦā§ āĻāĻŦāĻ āĻāĻāĻžāĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āĨ¤
+
+////
+
+//// tab | āĻāĻāύā§āĻĄā§āĻ
+
+āϧāϰāĻž āϝāĻžāĻ āĻāĻĒāύāĻŋ āĻĒāĻžāĻāĻĨāύ āĻāύāϏā§āĻāϞ āĻāϰāϞā§āύ āĻāĻŦāĻ āĻāĻāĻŋ `C:\opt\custompython\bin` āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϤ⧠āĻāύāϏā§āĻāϞ āĻšāĻā§āĻā§āĨ¤
+
+āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ "Yes" āϏāĻŋāϞā§āĻā§āĻ āĻāϰ⧠`PATH` āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋā§ā§āĻŦāϞ āĻāĻĒāĻĄā§āĻ āĻāϰāϤ⧠āĻāĻžāύ, āϤāĻžāĻšāϞ⧠āĻāύāϏā§āĻāϞāĻžāϰ `C:\opt\custompython\bin` āĻā§ `PATH` āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋā§ā§āĻŦāϞ āĻ āĻāĻĄ āĻāϰ⧠āĻĻāĻŋāĻŦā§āĨ¤
+
+```plaintext
+C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin
+```
+
+āĻāĻāĻāĻžāĻŦā§, āĻāĻĒāύāĻŋ āϝāĻāύ āĻāĻžāϰā§āĻŽāĻŋāύāĻžāϞ⧠`python` āĻāĻžāĻāĻĒ āĻāϰā§āύ, āϏāĻŋāϏā§āĻā§āĻŽ āĻĒāĻžāĻāĻĨāύ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻāĻŋāĻā§ `C:\opt\custompython\bin` (āϏāϰā§āĻŦāĻļā§āώ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ) āϤ⧠āĻā§āĻāĻā§ āĻĒāĻžāĻŦā§ āĻāĻŦāĻ āĻāĻāĻžāĻā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āĨ¤
+
+////
+
+āϤāĻžāĻ, āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻžāĻāĻĒ āĻāϰā§āύāĻ
+
+
+
+```console
+$ python
+```
+
+
+
+//// tab | āϞāĻŋāύāĻžāĻā§āϏ, āĻŽā§āϝāĻžāĻāĻāĻāϏ
+
+āϏāĻŋāϏā§āĻā§āĻŽ `python` āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻā§ `/opt/custompython/bin` āĻ **āĻā§āĻāĻā§ āĻĒāĻžāĻŦā§** āĻāĻŦāĻ āĻāĻāĻžāĻā§ āϰāĻžāύ āĻāϰāĻŦā§āĨ¤
+
+āĻāĻāĻž āĻŽā§āĻāĻžāĻŽā§āĻāĻŋāĻāĻžāĻŦā§ āύāĻŋāĻā§āϰ āĻŽāϤ⧠āĻāϰ⧠āϞā§āĻāĻžāϰ āϏāĻŽāĻžāύ āĻšāĻŦā§āĻ
+
+
+
+```console
+$ /opt/custompython/bin/python
+```
+
+
+
+////
+
+//// tab | āĻāĻāύā§āĻĄā§āĻ
+
+āϏāĻŋāϏā§āĻā§āĻŽ `python` āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻā§ `C:\opt\custompython\bin\python` āĻ **āĻā§āĻāĻā§ āĻĒāĻžāĻŦā§** āĻāĻŦāĻ āĻāĻāĻžāĻā§ āϰāĻžāύ āĻāϰāĻŦā§āĨ¤
+
+āĻāĻāĻž āĻŽā§āĻāĻžāĻŽā§āĻāĻŋāĻāĻžāĻŦā§ āύāĻŋāĻā§āϰ āĻŽāϤ⧠āĻāϰ⧠āϞā§āĻāĻžāϰ āϏāĻŽāĻžāύ āĻšāĻŦā§āĻ
+
+
+
+```console
+$ C:\opt\custompython\bin\python
+```
+
+
+
+////
+
+āĻāĻ āϤāĻĨā§āϝāĻā§āϞ⧠[āĻāĻžāϰā§āĻā§ā§āĻžāϞ āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻāϏ](virtual-environments.md){.internal-link target=_blank} āĻļā§āĻāĻžāϰ āĻā§āώā§āϤā§āϰ⧠āϏāĻšāĻžā§āĻ āĻšāĻŦā§āĨ¤
+
+## āĻāĻĒāϏāĻāĻšāĻžāϰ
+
+āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻĒāύāĻŋ **āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋā§ā§āĻŦāϞāϏ** āĻāĻŋ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻĒāĻžāĻāĻĨāύ⧠āĻāĻŋāĻāĻžāĻŦā§ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšā§ āϤāĻžāϰ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻŦā§āϏāĻŋāĻ āϧāĻžāϰāύāĻž āĻĒā§āϞā§āύāĨ¤
+
+āĻāĻžāĻāϞ⧠āĻāĻ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻāϰ⧠āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ āĻĒā§āϤ⧠āĻĒāĻžāϰā§āύ Wikipedia for Environment Variable āĻāĨ¤
+
+āĻ
āύā§āĻ āĻā§āώā§āϤā§āϰā§, āĻĻā§āĻāĻž āĻŽāĻžāϤā§āϰāĻ āĻāύāĻāĻžāϝāĻŧāϰāύāĻŽā§āύā§āĻ āĻā§āϰāĻŋāϝāĻŧā§āĻŦāϞ āĻā§āĻāĻžāĻŦā§ āĻĒā§āϰā§ā§āĻāύ āĻšāĻŦā§ āϤāĻž āϏā§āĻĒāώā§āĻ āĻšā§ āύāĻžāĨ¤ āĻāĻŋāύā§āϤ⧠āĻĄā§āĻā§āϞāĻĒāĻŽā§āύā§āĻā§āϰ āϏāĻŽāϝāĻŧ āĻāĻĒāύāĻŋ āύāĻžāύāĻž āϰāĻāĻŽ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋāϤ⧠āĻāĻā§āϞā§āϰ āϏāĻŽā§āĻŽā§āĻā§āύ āĻšāĻŦā§āύ, āϤāĻžāĻ āĻāĻā§āϞ⧠āϏāĻŽā§āĻĒāϰā§āĻā§ āĻā§āύ⧠āϰāĻžāĻāĻž āĻāĻžāϞā§āĨ¤
+
+āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻāĻĒāύāĻžāϰ āĻāĻ āĻāύāĻĢāϰāĻŽā§āĻļāύāĻāĻŋ āĻĒāϰāĻŦāϰā§āϤā§, [āĻāĻžāϰā§āĻā§ā§āĻžāϞ āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻāϏ](virtual-environments.md) āĻ
āĻāĻļā§ āĻĻāϰāĻāĻžāϰ āĻšāĻŦā§āĨ¤
diff --git a/docs/de/docs/advanced/generate-clients.md b/docs/de/docs/advanced/generate-clients.md
index 38a69031c..f491d29af 100644
--- a/docs/de/docs/advanced/generate-clients.md
+++ b/docs/de/docs/advanced/generate-clients.md
@@ -20,7 +20,7 @@ Einige von diesen ⨠[**sponsern FastAPI**](../help-fastapi.md#den-autor-sponse
Und es zeigt deren wahres Engagement fÃŧr FastAPI und seine **Community** (Sie), da diese Ihnen nicht nur einen **guten Service** bieten mÃļchten, sondern auch sicherstellen mÃļchten, dass Sie Ãŧber ein **gutes und gesundes Framework** verfÃŧgen, FastAPI. đ
-Beispielsweise kÃļnnten Sie Speakeasy ausprobieren.
+Beispielsweise kÃļnnten Sie Speakeasy ausprobieren.
Es gibt auch mehrere andere Unternehmen, welche ähnliche Dienste anbieten und die Sie online suchen und finden kÃļnnen. đ¤
diff --git a/docs/de/docs/deployment/concepts.md b/docs/de/docs/deployment/concepts.md
index 97ad854e2..907598e54 100644
--- a/docs/de/docs/deployment/concepts.md
+++ b/docs/de/docs/deployment/concepts.md
@@ -216,7 +216,7 @@ Dieser Manager-Prozess wäre wahrscheinlich derjenige, welcher der IP am **Port*
Diese Workerprozesse wÃŧrden Ihre Anwendung ausfÃŧhren, sie wÃŧrden die Hauptberechnungen durchfÃŧhren, um einen **Request** entgegenzunehmen und eine **Response** zurÃŧckzugeben, und sie wÃŧrden alles, was Sie in Variablen einfÃŧgen, in den RAM laden.
-
+
Und natÃŧrlich wÃŧrden auf derselben Maschine neben Ihrer Anwendung wahrscheinlich auch **andere Prozesse** laufen.
diff --git a/docs/de/docs/deployment/https.md b/docs/de/docs/deployment/https.md
index 630582995..a216f44af 100644
--- a/docs/de/docs/deployment/https.md
+++ b/docs/de/docs/deployment/https.md
@@ -85,7 +85,7 @@ Zuerst wÃŧrde der Browser mithilfe der **DNS-Server** herausfinden, welches die
Die DNS-Server geben dem Browser eine bestimmte **IP-Adresse** zurÃŧck. Das wäre die von Ihrem Server verwendete Ãļffentliche IP-Adresse, die Sie in den DNS-Servern konfiguriert haben.
-
+
### TLS-Handshake-Start
@@ -93,7 +93,7 @@ Der Browser kommuniziert dann mit dieser IP-Adresse Ãŧber **Port 443** (den HTTP
Der erste Teil der Kommunikation besteht lediglich darin, die Verbindung zwischen dem Client und dem Server herzustellen und die zu verwendenden kryptografischen SchlÃŧssel usw. zu vereinbaren.
-
+
Diese Interaktion zwischen dem Client und dem Server zum Aufbau der TLS-Verbindung wird als **TLS-Handshake ** bezeichnet.
@@ -111,7 +111,7 @@ Mithilfe der oben beschriebenen **SNI-Erweiterung** wÃŧrde der TLS-Terminierungs
In diesem Fall wÃŧrde er das Zertifikat fÃŧr `someapp.example.com` verwenden.
-
+
Der Client **vertraut** bereits der Entität, die das TLS-Zertifikat generiert hat (in diesem Fall Let's Encrypt, aber wir werden später mehr darÃŧber erfahren), sodass er **verifizieren** kann, dass das Zertifikat gÃŧltig ist.
@@ -133,19 +133,19 @@ Da Client und Server (sprich, der Browser und der TLS-Terminierungsproxy) nun Ãŧ
Der Client sendet also einen **HTTPS-Request**. Das ist einfach ein HTTP-Request Ãŧber eine verschlÃŧsselte TLS-Verbindung.
-
+
### Den Request entschlÃŧsseln
Der TLS-Terminierungsproxy wÃŧrde die vereinbarte VerschlÃŧsselung zum **EntschlÃŧsseln des Requests** verwenden und den **einfachen (entschlÃŧsselten) HTTP-Request** an den Prozess weiterleiten, der die Anwendung ausfÃŧhrt (z. B. einen Prozess, bei dem Uvicorn die FastAPI-Anwendung ausfÃŧhrt).
-
+
### HTTP-Response
Die Anwendung wÃŧrde den Request verarbeiten und eine **einfache (unverschlÃŧsselte) HTTP-Response** an den TLS-Terminierungsproxy senden.
-
+
### HTTPS-Response
@@ -153,7 +153,7 @@ Der TLS-Terminierungsproxy wÃŧrde dann die Response mithilfe der zuvor vereinbar
Als Nächstes ÃŧberprÃŧft der Browser, ob die Response gÃŧltig und mit dem richtigen kryptografischen SchlÃŧssel usw. verschlÃŧsselt ist. AnschlieÃend **entschlÃŧsselt er die Response** und verarbeitet sie.
-
+
Der Client (Browser) weiÃ, dass die Response vom richtigen Server kommt, da dieser die Kryptografie verwendet, die zuvor mit dem **HTTPS-Zertifikat** vereinbart wurde.
@@ -163,7 +163,7 @@ Auf demselben Server (oder denselben Servern) kÃļnnten sich **mehrere Anwendunge
Nur ein Prozess kann diese spezifische IP und den Port verarbeiten (in unserem Beispiel der TLS-Terminierungsproxy), aber die anderen Anwendungen/Prozesse kÃļnnen auch auf dem/den Server(n) ausgefÃŧhrt werden, solange sie nicht versuchen, dieselbe **Kombination aus Ãļffentlicher IP und Port** zu verwenden.
-
+
Auf diese Weise kÃļnnte der TLS-Terminierungsproxy HTTPS und Zertifikate fÃŧr **mehrere Domains**, fÃŧr mehrere Anwendungen, verarbeiten und die Requests dann jeweils an die richtige Anwendung weiterleiten.
@@ -173,7 +173,7 @@ Irgendwann in der Zukunft wÃŧrde jedes Zertifikat **ablaufen** (etwa 3 Monate na
Und dann gäbe es ein anderes Programm (in manchen Fällen ist es ein anderes Programm, in manchen Fällen ist es derselbe TLS-Terminierungsproxy), das mit Let's Encrypt kommuniziert und das/die Zertifikat(e) erneuert.
-
+
Die **TLS-Zertifikate** sind **einem Domainnamen zugeordnet**, nicht einer IP-Adresse.
diff --git a/docs/de/docs/how-to/custom-docs-ui-assets.md b/docs/de/docs/how-to/custom-docs-ui-assets.md
index ab8cd9f6b..f68902b99 100644
--- a/docs/de/docs/how-to/custom-docs-ui-assets.md
+++ b/docs/de/docs/how-to/custom-docs-ui-assets.md
@@ -98,7 +98,7 @@ Sie kÃļnnen wahrscheinlich mit der rechten Maustaste auf jeden Link klicken und
Und **ReDoc** verwendet diese Datei:
-* `redoc.standalone.js`
+* `redoc.standalone.js`
Danach kÃļnnte Ihre Dateistruktur wie folgt aussehen:
@@ -129,14 +129,8 @@ Sie sollten eine sehr lange JavaScript-Datei fÃŧr **ReDoc** sehen.
Sie kÃļnnte beginnen mit etwas wie:
```JavaScript
-/*!
- * ReDoc - OpenAPI/Swagger-generated API Reference Documentation
- * -------------------------------------------------------------
- * Version: "2.0.0-rc.18"
- * Repo: https://github.com/Redocly/redoc
- */
-!function(e,t){"object"==typeof exports&&"object"==typeof m
-
+/*! For license information please see redoc.standalone.js.LICENSE.txt */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("null")):
...
```
diff --git a/docs/de/docs/tutorial/bigger-applications.md b/docs/de/docs/tutorial/bigger-applications.md
index 59e91bdcc..514e3fd3a 100644
--- a/docs/de/docs/tutorial/bigger-applications.md
+++ b/docs/de/docs/tutorial/bigger-applications.md
@@ -52,7 +52,7 @@ from app.routers import items
* Es gibt auch ein Unterverzeichnis `app/internal/` mit einer weiteren Datei `__init__.py`, es handelt sich also um ein weiteres âPython-Subpackageâ: `app.internal`.
* Und die Datei `app/internal/admin.py` ist ein weiteres Submodul: `app.internal.admin`.
-
+
Die gleiche Dateistruktur mit Kommentaren:
@@ -270,7 +270,7 @@ Aber diese Datei existiert nicht, unsere Abhängigkeiten befinden sich in einer
Erinnern Sie sich, wie unsere Anwendungs-/Dateistruktur aussieht:
-
+
---
diff --git a/docs/em/docs/deployment/concepts.md b/docs/em/docs/deployment/concepts.md
index 019703296..bbb017277 100644
--- a/docs/em/docs/deployment/concepts.md
+++ b/docs/em/docs/deployment/concepts.md
@@ -216,7 +216,7 @@
đ đ¨âđ đ ī¸ đ đ đââ đ đ¸, đĢ đ đ đ đ đ¨ **đ¨** & đ¨ **đ¨**, & đĢ đ đ đŗ đ đŽ đĸ đž.
-
+
& âī¸, đ đ° đ đ˛ âī¸ **đ đ ī¸** đ đ, âī¸ âĒī¸âĄī¸ đ đ¸.
diff --git a/docs/em/docs/deployment/https.md b/docs/em/docs/deployment/https.md
index 31cf99001..6d2641a92 100644
--- a/docs/em/docs/deployment/https.md
+++ b/docs/em/docs/deployment/https.md
@@ -85,7 +85,7 @@
đ đŊ đ đŦ đĨ âī¸ đ¯ **đĸ đĸ**. đ đ đĸ đĸ đĸ âī¸ đ đŊ, đ đ đ đ đŊ.
-
+
### đ¤ đ¤ âļī¸
@@ -93,7 +93,7 @@
đĨ đ đģ đ ī¸ đ đ đŠâđģ & đŊ & đ đ đ đĢ đ âī¸, âī¸.
-
+
đ đ đ đŠâđģ & đŊ đ ī¸ đ¤ đ đ¤ **đ¤ đ¤**.
@@ -111,7 +111,7 @@
đ đŧ, âĢī¸ đ âī¸ đ `someapp.example.com`.
-
+
đŠâđģ âĒ **đ** đ¨âđŧ đ đ đ đ¤ đ (đ đŧ âĄī¸ đ, âī¸ đĨ đ đ đ đ âĒ), âĢī¸ đĒ **â** đ đ â.
@@ -133,19 +133,19 @@
, đŠâđģ đ¨ **đēđ¸đ đ¨**. đ đēđ¸đ đ¨ đ đ đ¤ đ.
-
+
### đ đ¨
đ¤ â đŗ đ âī¸ đ â **đ đ¨**, & đ đļ **â
(đ) đēđ¸đ đ¨** đ ī¸ đ đ¸ (đŧ đ ī¸ âŽī¸ Uvicorn đââ FastAPI đ¸).
-
+
### đēđ¸đ đ¨
đ¸ đ đ ī¸ đ¨ & đ¨ **â
(đŊ) đēđ¸đ đ¨** đ¤ â đŗ.
-
+
### đēđ¸đ đ¨
@@ -153,7 +153,7 @@
â, đĨ đ â đ đ¨ â & đ âŽī¸ âļī¸ī¸ đ đ, âī¸. âĢī¸ đ â¤´ī¸ **đ đ¨** & đ ī¸ âĢī¸.
-
+
đŠâđģ (đĨ) đ đ đ đ¨ đ âĒī¸âĄī¸ â đŊ âŠī¸ âĢī¸ âī¸ â đĢ â âī¸ **đēđ¸đ đ** â.
@@ -163,7 +163,7 @@
đ´ 1ī¸âŖ đ ī¸ đĒ đ đ¯ đĸ & â´ (đ¤ â đŗ đ đŧ) âī¸ đ đ¸/đ ī¸ đĒ đ đ đŊ(â) đââī¸, đ đĢ đĢ đ âī¸ đ **đ đĸ đĸ & â´**.
-
+
đ đ, đ¤ â đŗ đĒ đĩ đēđ¸đ & đ **đ đ**, đ đ¸, & â¤´ī¸ đļ đ¨ âļī¸ī¸ đ¸ đ đŧ.
@@ -173,7 +173,7 @@
& ⤴ī¸, đ¤ đ â1ī¸âŖ đ (đŧ âĢī¸ â1ī¸âŖ đ, đŧ âĢī¸ đĒ đ đ¤ â đŗ) đ đ đŦ âĄī¸ đ, & âģ đ(â).
-
+
**đ¤ đ** **đ âŽī¸ đ đ**, đĢ âŽī¸ đĸ đĸ.
diff --git a/docs/em/docs/tutorial/bigger-applications.md b/docs/em/docs/tutorial/bigger-applications.md
index 68f506f27..78a321ae6 100644
--- a/docs/em/docs/tutorial/bigger-applications.md
+++ b/docs/em/docs/tutorial/bigger-applications.md
@@ -52,7 +52,7 @@ from app.routers import items
* đ¤ đ `app/internal/` âŽī¸ â1ī¸âŖ đ `__init__.py`, âĢī¸ â1ī¸âŖ "đ đĻ": `app.internal`.
* & đ `app/internal/admin.py` â1ī¸âŖ đ: `app.internal.admin`.
-
+
đ đ đ âŽī¸ đ¤:
@@ -244,7 +244,7 @@ from .dependencies import get_token_header
đ â đ đą/đ đ đ đ:
-
+
---
diff --git a/docs/en/data/contributors.yml b/docs/en/data/contributors.yml
index c4364e923..e06510ac4 100644
--- a/docs/en/data/contributors.yml
+++ b/docs/en/data/contributors.yml
@@ -1,18 +1,23 @@
tiangolo:
login: tiangolo
- count: 723
+ count: 753
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
dependabot:
login: dependabot
- count: 94
+ count: 104
avatarUrl: https://avatars.githubusercontent.com/in/29110?v=4
url: https://github.com/apps/dependabot
alejsdev:
login: alejsdev
count: 47
- avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=356f39ff3f0211c720b06d3dbb060e98884085e3&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=638c65283ac9e9e2c3a0f9d1e3370db4b8a2c58d&v=4
url: https://github.com/alejsdev
+pre-commit-ci:
+ login: pre-commit-ci
+ count: 33
+ avatarUrl: https://avatars.githubusercontent.com/in/68672?v=4
+ url: https://github.com/apps/pre-commit-ci
github-actions:
login: github-actions
count: 26
@@ -23,11 +28,6 @@ Kludex:
count: 23
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex
-pre-commit-ci:
- login: pre-commit-ci
- count: 22
- avatarUrl: https://avatars.githubusercontent.com/in/68672?v=4
- url: https://github.com/apps/pre-commit-ci
dmontagu:
login: dmontagu
count: 17
@@ -70,7 +70,7 @@ vishnuvskvkl:
url: https://github.com/vishnuvskvkl
svlandeg:
login: svlandeg
- count: 6
+ count: 7
avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
url: https://github.com/svlandeg
alissadb:
@@ -116,7 +116,7 @@ hitrust:
ShahriyarR:
login: ShahriyarR
count: 4
- avatarUrl: https://avatars.githubusercontent.com/u/3852029?u=c9a1691e5ebdc94cbf543086099a6ed705cdb873&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/3852029?u=631b2ae59360ab380c524b32bc3d245aff1165af&v=4
url: https://github.com/ShahriyarR
adriangb:
login: adriangb
@@ -171,7 +171,7 @@ hukkin:
marcosmmb:
login: marcosmmb
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/6181089?u=b8567a842b38c5570c315b2b7ca766fa7be6721e&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/6181089?u=03c50eec631857d84df5232890780d00a3f76903&v=4
url: https://github.com/marcosmmb
Serrones:
login: Serrones
@@ -183,11 +183,11 @@ uriyyo:
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/32038156?u=a27b65a9ec3420586a827a0facccbb8b6df1ffb3&v=4
url: https://github.com/uriyyo
-amacfie:
- login: amacfie
+andrew222651:
+ login: andrew222651
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/889657?u=d70187989940b085bcbfa3bedad8dbc5f3ab1fe7&v=4
- url: https://github.com/amacfie
+ url: https://github.com/andrew222651
rkbeatss:
login: rkbeatss
count: 3
@@ -311,7 +311,7 @@ dconathan:
Jamim:
login: Jamim
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/5607572?u=0cf3027bec78ba4f0b89802430c136bc69847d7a&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/5607572?u=9ce0b6a6d1a5124e28b3c04d8d26827ca328713a&v=4
url: https://github.com/Jamim
svalouch:
login: svalouch
@@ -366,7 +366,7 @@ sattosan:
michaeloliverx:
login: michaeloliverx
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/55017335?u=e606eb5cc397c07523be47637b1ee796904fbb59&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/55017335?u=efb0cb6e261ff64d862fafb91ee80fc2e1f8a2ed&v=4
url: https://github.com/michaeloliverx
voegtlel:
login: voegtlel
@@ -488,6 +488,11 @@ Lancetnik:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/44573917?u=f9a18be7324333daf9cc314c35c3051f0a20a7a6&v=4
url: https://github.com/Lancetnik
+joakimnordling:
+ login: joakimnordling
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/6637576?u=df5d99db9b899b399effd429f4358baaa6f7199c&v=4
+ url: https://github.com/joakimnordling
yogabonito:
login: yogabonito
count: 2
@@ -508,6 +513,11 @@ tamird:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/1535036?v=4
url: https://github.com/tamird
+ndimares:
+ login: ndimares
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/6267663?u=cfb27efde7a7212be8142abb6c058a1aeadb41b1&v=4
+ url: https://github.com/ndimares
rabinlamadong:
login: rabinlamadong
count: 2
@@ -518,6 +528,11 @@ AyushSinghal1794:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/89984761?v=4
url: https://github.com/AyushSinghal1794
+gsheni:
+ login: gsheni
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/8726321?u=ee3bd9ff6320f4715d1dd9671a3d55cccb65b984&v=4
+ url: https://github.com/gsheni
DanielKusyDev:
login: DanielKusyDev
count: 2
@@ -528,3 +543,18 @@ DanielYang59:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/80093591?u=63873f701c7c74aac83c906800a1dddc0bc8c92f&v=4
url: https://github.com/DanielYang59
+valentinDruzhinin:
+ login: valentinDruzhinin
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
+ url: https://github.com/valentinDruzhinin
+blueswen:
+ login: blueswen
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/1564148?u=6d6b8cc8f2b5cef715e68d6175154a8a94d518ee&v=4
+ url: https://github.com/blueswen
+YuriiMotov:
+ login: YuriiMotov
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4
+ url: https://github.com/YuriiMotov
diff --git a/docs/en/data/external_links.yml b/docs/en/data/external_links.yml
index 9e411a631..50f84ecbf 100644
--- a/docs/en/data/external_links.yml
+++ b/docs/en/data/external_links.yml
@@ -411,3 +411,8 @@ Talks:
author_link: https://twitter.com/chriswithers13
link: https://www.youtube.com/watch?v=3DLwPcrE5mA
title: 'PyCon UK 2019: FastAPI from the ground up'
+ Taiwanese:
+ - author: Blueswen
+ author_link: https://github.com/blueswen
+ link: https://www.youtube.com/watch?v=y3sumuoDq4w
+ title: 'PyCon TW 2024: å
¨æšäŊåŧˇå Python æåå¯č§æ¸Ŧæ§īŧäģĨ FastAPI å Grafana Stack įēäž'
diff --git a/docs/en/data/github_sponsors.yml b/docs/en/data/github_sponsors.yml
index 805d72b73..0cb200185 100644
--- a/docs/en/data/github_sponsors.yml
+++ b/docs/en/data/github_sponsors.yml
@@ -1,22 +1,13 @@
sponsors:
+- - login: classmethod
+ avatarUrl: https://avatars.githubusercontent.com/u/1532151?v=4
+ url: https://github.com/classmethod
- - login: renderinc
avatarUrl: https://avatars.githubusercontent.com/u/36424661?v=4
url: https://github.com/renderinc
- - login: bump-sh
- avatarUrl: https://avatars.githubusercontent.com/u/33217836?v=4
- url: https://github.com/bump-sh
- - login: Nixtla
- avatarUrl: https://avatars.githubusercontent.com/u/79945230?v=4
- url: https://github.com/Nixtla
- login: andrew-propelauth
- avatarUrl: https://avatars.githubusercontent.com/u/89474256?u=1188c27cb744bbec36447a2cfd4453126b2ddb5c&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/89474256?u=c98993dec8553c09d424ede67bbe86e5c35f48c9&v=4
url: https://github.com/andrew-propelauth
- - login: liblaber
- avatarUrl: https://avatars.githubusercontent.com/u/100821118?v=4
- url: https://github.com/liblaber
- - login: zanfaruqui
- avatarUrl: https://avatars.githubusercontent.com/u/104461687?v=4
- url: https://github.com/zanfaruqui
- login: blockbee-io
avatarUrl: https://avatars.githubusercontent.com/u/115143449?u=1b8620c2d6567c4df2111a371b85a51f448f9b85&v=4
url: https://github.com/blockbee-io
@@ -26,16 +17,25 @@ sponsors:
- login: coderabbitai
avatarUrl: https://avatars.githubusercontent.com/u/132028505?v=4
url: https://github.com/coderabbitai
- - login: porter-dev
- avatarUrl: https://avatars.githubusercontent.com/u/62078005?v=4
- url: https://github.com/porter-dev
+ - login: madisonredtfeldt
+ avatarUrl: https://avatars.githubusercontent.com/u/152656511?v=4
+ url: https://github.com/madisonredtfeldt
+ - login: subtotal
+ avatarUrl: https://avatars.githubusercontent.com/u/176449348?v=4
+ url: https://github.com/subtotal
+ - login: Nixtla
+ avatarUrl: https://avatars.githubusercontent.com/u/79945230?v=4
+ url: https://github.com/Nixtla
- login: scalar
avatarUrl: https://avatars.githubusercontent.com/u/301879?v=4
url: https://github.com/scalar
- - login: ObliviousAI
avatarUrl: https://avatars.githubusercontent.com/u/65656077?v=4
url: https://github.com/ObliviousAI
-- - login: svix
+- - login: dribia
+ avatarUrl: https://avatars.githubusercontent.com/u/41189616?v=4
+ url: https://github.com/dribia
+ - login: svix
avatarUrl: https://avatars.githubusercontent.com/u/80175132?v=4
url: https://github.com/svix
- login: stainless-api
@@ -50,18 +50,21 @@ sponsors:
- login: permitio
avatarUrl: https://avatars.githubusercontent.com/u/71775833?v=4
url: https://github.com/permitio
-- - login: mercedes-benz
- avatarUrl: https://avatars.githubusercontent.com/u/34240465?v=4
- url: https://github.com/mercedes-benz
- - login: xoflare
+- - login: xoflare
avatarUrl: https://avatars.githubusercontent.com/u/74335107?v=4
url: https://github.com/xoflare
- login: marvin-robot
avatarUrl: https://avatars.githubusercontent.com/u/41086007?u=b9fcab402d0cd0aec738b6574fe60855cb0cd36d&v=4
url: https://github.com/marvin-robot
+ - login: mercedes-benz
+ avatarUrl: https://avatars.githubusercontent.com/u/34240465?v=4
+ url: https://github.com/mercedes-benz
- login: Ponte-Energy-Partners
avatarUrl: https://avatars.githubusercontent.com/u/114745848?v=4
url: https://github.com/Ponte-Energy-Partners
+ - login: snapit-cypher
+ avatarUrl: https://avatars.githubusercontent.com/u/115662654?v=4
+ url: https://github.com/snapit-cypher
- login: LambdaTest-Inc
avatarUrl: https://avatars.githubusercontent.com/u/171592363?u=96606606a45fa170427206199014f2a5a2a4920b&v=4
url: https://github.com/LambdaTest-Inc
@@ -77,59 +80,50 @@ sponsors:
- - login: takashi-yoneya
avatarUrl: https://avatars.githubusercontent.com/u/33813153?u=2d0522bceba0b8b69adf1f2db866503bd96f944e&v=4
url: https://github.com/takashi-yoneya
+ - login: Doist
+ avatarUrl: https://avatars.githubusercontent.com/u/2565372?v=4
+ url: https://github.com/Doist
- - login: mainframeindustries
avatarUrl: https://avatars.githubusercontent.com/u/55092103?v=4
url: https://github.com/mainframeindustries
- - login: CanoaPBC
- avatarUrl: https://avatars.githubusercontent.com/u/64223768?v=4
- url: https://github.com/CanoaPBC
- login: yasyf
avatarUrl: https://avatars.githubusercontent.com/u/709645?u=f36736b3c6a85f578886ecc42a740e7b436e7a01&v=4
url: https://github.com/yasyf
+- - login: alixlahuec
+ avatarUrl: https://avatars.githubusercontent.com/u/29543316?u=44357eb2a93bccf30fb9d389b8befe94a3d00985&v=4
+ url: https://github.com/alixlahuec
- - login: primer-io
avatarUrl: https://avatars.githubusercontent.com/u/62146168?v=4
url: https://github.com/primer-io
- - login: povilasb
- avatarUrl: https://avatars.githubusercontent.com/u/1213442?u=b11f58ed6ceea6e8297c9b310030478ebdac894d&v=4
- url: https://github.com/povilasb
- - login: upciti
avatarUrl: https://avatars.githubusercontent.com/u/43346262?v=4
url: https://github.com/upciti
- - login: freddiev4
- avatarUrl: https://avatars.githubusercontent.com/u/8339018?u=1aad5b4f5a04cb750852b843d5e1d8f4ce339c2e&v=4
- url: https://github.com/freddiev4
- - login: samuelcolvin
avatarUrl: https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f&v=4
url: https://github.com/samuelcolvin
- - login: vincentkoc
- avatarUrl: https://avatars.githubusercontent.com/u/25068?u=fbd5b2d51142daa4bdbc21e21953a3b8b8188a4a&v=4
- url: https://github.com/vincentkoc
- - login: ddilidili
- avatarUrl: https://avatars.githubusercontent.com/u/42176885?u=c0a849dde06987434653197b5f638d3deb55fc6c&v=4
- url: https://github.com/ddilidili
+ - login: CoodingPenguin
+ avatarUrl: https://avatars.githubusercontent.com/u/37505775?u=6a9e1f6647fbf95f99afeee82a3682e15fc6e959&v=4
+ url: https://github.com/CoodingPenguin
+ - login: deight93
+ avatarUrl: https://avatars.githubusercontent.com/u/37678115?u=a608798b5bd0034183a9c430ebb42fb266db86ce&v=4
+ url: https://github.com/deight93
- login: otosky
avatarUrl: https://avatars.githubusercontent.com/u/42260747?u=69d089387c743d89427aa4ad8740cfb34045a9e0&v=4
url: https://github.com/otosky
- login: ramonalmeidam
avatarUrl: https://avatars.githubusercontent.com/u/45269580?u=3358750b3a5854d7c3ed77aaca7dd20a0f529d32&v=4
url: https://github.com/ramonalmeidam
- - login: sepsi77
- avatarUrl: https://avatars.githubusercontent.com/u/18682303?v=4
- url: https://github.com/sepsi77
+ - login: kaoru0310
+ avatarUrl: https://avatars.githubusercontent.com/u/80977929?u=1b61d10142b490e56af932ddf08a390fae8ee94f&v=4
+ url: https://github.com/kaoru0310
- login: RaamEEIL
avatarUrl: https://avatars.githubusercontent.com/u/20320552?v=4
url: https://github.com/RaamEEIL
- - login: jhundman
- avatarUrl: https://avatars.githubusercontent.com/u/24263908?v=4
- url: https://github.com/jhundman
- - login: b-rad-c
- avatarUrl: https://avatars.githubusercontent.com/u/25362581?u=5bb10629f4015b62bec1f9a366675d5085551af9&v=4
- url: https://github.com/b-rad-c
- login: ehaca
avatarUrl: https://avatars.githubusercontent.com/u/25950317?u=cec1a3e0643b785288ae8260cc295a85ab344995&v=4
url: https://github.com/ehaca
- login: raphaellaude
- avatarUrl: https://avatars.githubusercontent.com/u/28026311?u=28faad3e62250ef91a0c3c5d0faba39592d9ab39&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/28026311?u=91e1c00d9ac4f8045527e13de8050d504531cbc0&v=4
url: https://github.com/raphaellaude
- login: timlrx
avatarUrl: https://avatars.githubusercontent.com/u/28362229?u=9a745ca31372ee324af682715ae88ce8522f9094&v=4
@@ -137,21 +131,9 @@ sponsors:
- login: Leay15
avatarUrl: https://avatars.githubusercontent.com/u/32212558?u=c4aa9c1737e515959382a5515381757b1fd86c53&v=4
url: https://github.com/Leay15
- - login: BoYanZh
- avatarUrl: https://avatars.githubusercontent.com/u/32470225?u=55b174d080382822759d74307f8a0355fa86e808&v=4
- url: https://github.com/BoYanZh
- - login: ygorpontelo
- avatarUrl: https://avatars.githubusercontent.com/u/32963605?u=35f7103f9c4c4c2589ae5737ee882e9375ef072e&v=4
- url: https://github.com/ygorpontelo
- login: ProteinQure
avatarUrl: https://avatars.githubusercontent.com/u/33707203?v=4
url: https://github.com/ProteinQure
- - login: chickenandstats
- avatarUrl: https://avatars.githubusercontent.com/u/79477966?u=ae2b894aa954070db1d7830dab99b49eba4e4567&v=4
- url: https://github.com/chickenandstats
- - login: kaoru0310
- avatarUrl: https://avatars.githubusercontent.com/u/80977929?u=1b61d10142b490e56af932ddf08a390fae8ee94f&v=4
- url: https://github.com/kaoru0310
- login: DelfinaCare
avatarUrl: https://avatars.githubusercontent.com/u/83734439?v=4
url: https://github.com/DelfinaCare
@@ -182,6 +164,9 @@ sponsors:
- login: patricioperezv
avatarUrl: https://avatars.githubusercontent.com/u/73832292?u=5f471f156e19ee7920e62ae0f4a47b95580e61cf&v=4
url: https://github.com/patricioperezv
+ - login: chickenandstats
+ avatarUrl: https://avatars.githubusercontent.com/u/79477966?u=ae2b894aa954070db1d7830dab99b49eba4e4567&v=4
+ url: https://github.com/chickenandstats
- login: dodo5522
avatarUrl: https://avatars.githubusercontent.com/u/1362607?u=9bf1e0e520cccc547c046610c468ce6115bbcf9f&v=4
url: https://github.com/dodo5522
@@ -191,9 +176,6 @@ sponsors:
- login: knallgelb
avatarUrl: https://avatars.githubusercontent.com/u/2358812?u=c48cb6362b309d74cbf144bd6ad3aed3eb443e82&v=4
url: https://github.com/knallgelb
- - login: Shark009
- avatarUrl: https://avatars.githubusercontent.com/u/3163309?u=0c6f4091b0eda05c44c390466199826e6dc6e431&v=4
- url: https://github.com/Shark009
- login: dblackrun
avatarUrl: https://avatars.githubusercontent.com/u/3528486?v=4
url: https://github.com/dblackrun
@@ -209,15 +191,15 @@ sponsors:
- login: anomaly
avatarUrl: https://avatars.githubusercontent.com/u/3654837?v=4
url: https://github.com/anomaly
+ - login: mj0331
+ avatarUrl: https://avatars.githubusercontent.com/u/3890353?u=1c627ac1a024515b4871de5c3ebbfaa1a57f65d4&v=4
+ url: https://github.com/mj0331
- login: gorhack
avatarUrl: https://avatars.githubusercontent.com/u/4141690?u=ec119ebc4bdf00a7bc84657a71aa17834f4f27f3&v=4
url: https://github.com/gorhack
- - login: Ryandaydev
- avatarUrl: https://avatars.githubusercontent.com/u/4292423?u=48f68868db8886fce31a1d802c1003914c6cd7c6&v=4
- url: https://github.com/Ryandaydev
- - login: jaredtrog
- avatarUrl: https://avatars.githubusercontent.com/u/4381365?v=4
- url: https://github.com/jaredtrog
+ - login: vincentkoc
+ avatarUrl: https://avatars.githubusercontent.com/u/25068?u=fbd5b2d51142daa4bdbc21e21953a3b8b8188a4a&v=4
+ url: https://github.com/vincentkoc
- login: jstanden
avatarUrl: https://avatars.githubusercontent.com/u/63288?u=c3658d57d2862c607a0e19c2101c3c51876e36ad&v=4
url: https://github.com/jstanden
@@ -239,9 +221,6 @@ sponsors:
- login: wshayes
avatarUrl: https://avatars.githubusercontent.com/u/365303?u=07ca03c5ee811eb0920e633cc3c3db73dbec1aa5&v=4
url: https://github.com/wshayes
- - login: gaetanBloch
- avatarUrl: https://avatars.githubusercontent.com/u/583199?u=50c49e83d6b4feb78a091901ea02ead1462f442b&v=4
- url: https://github.com/gaetanBloch
- login: koxudaxi
avatarUrl: https://avatars.githubusercontent.com/u/630670?u=507d8577b4b3670546b449c4c2ccbc5af40d72f7&v=4
url: https://github.com/koxudaxi
@@ -251,15 +230,9 @@ sponsors:
- login: mintuhouse
avatarUrl: https://avatars.githubusercontent.com/u/769950?u=ecfbd79a97d33177e0d093ddb088283cf7fe8444&v=4
url: https://github.com/mintuhouse
- - login: TrevorBenson
- avatarUrl: https://avatars.githubusercontent.com/u/9167887?u=dccbea3327a57750923333d8ebf1a0b3f1948949&v=4
- url: https://github.com/TrevorBenson
- login: wdwinslow
- avatarUrl: https://avatars.githubusercontent.com/u/11562137?u=dc01daafb354135603a263729e3d26d939c0c452&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/11562137?u=371272f2c69e680e0559a7b0a57385e83a5dc728&v=4
url: https://github.com/wdwinslow
- - login: catherinenelson1
- avatarUrl: https://avatars.githubusercontent.com/u/11951946?u=fe11bc35d36b6038cd46a946e4e46ef8aa5688ab&v=4
- url: https://github.com/catherinenelson1
- login: jsoques
avatarUrl: https://avatars.githubusercontent.com/u/12414216?u=620921d94196546cc8b9eae2cc4cbc3f95bab42f&v=4
url: https://github.com/jsoques
@@ -278,6 +251,12 @@ sponsors:
- login: ashi-agrawal
avatarUrl: https://avatars.githubusercontent.com/u/17105294?u=99c7a854035e5398d8e7b674f2d42baae6c957f8&v=4
url: https://github.com/ashi-agrawal
+ - login: Ryandaydev
+ avatarUrl: https://avatars.githubusercontent.com/u/4292423?u=679ff84cb7b988c5795a5fa583857f574a055763&v=4
+ url: https://github.com/Ryandaydev
+ - login: jaredtrog
+ avatarUrl: https://avatars.githubusercontent.com/u/4381365?v=4
+ url: https://github.com/jaredtrog
- login: oliverxchen
avatarUrl: https://avatars.githubusercontent.com/u/4471774?u=534191f25e32eeaadda22dfab4b0a428733d5489&v=4
url: https://github.com/oliverxchen
@@ -288,23 +267,20 @@ sponsors:
avatarUrl: https://avatars.githubusercontent.com/u/5920492?u=208d419cf667b8ac594c82a8db01932c7e50d057&v=4
url: https://github.com/eseglem
- login: FernandoCelmer
- avatarUrl: https://avatars.githubusercontent.com/u/6262214?u=d29fff3fd862fda4ca752079f13f32e84c762ea4&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/6262214?u=58ba6d5888fa7f355934e52db19f950e20b38162&v=4
url: https://github.com/FernandoCelmer
- - login: simw
- avatarUrl: https://avatars.githubusercontent.com/u/6322526?v=4
- url: https://github.com/simw
- login: Rehket
avatarUrl: https://avatars.githubusercontent.com/u/7015688?u=3afb0ba200feebbc7f958950e92db34df2a3c172&v=4
url: https://github.com/Rehket
- login: hiancdtrsnm
avatarUrl: https://avatars.githubusercontent.com/u/7343177?v=4
url: https://github.com/hiancdtrsnm
+- - login: jpizquierdo
+ avatarUrl: https://avatars.githubusercontent.com/u/6716239?v=4
+ url: https://github.com/jpizquierdo
- - login: pawamoy
avatarUrl: https://avatars.githubusercontent.com/u/3999221?u=b030e4c89df2f3a36bc4710b925bdeb6745c9856&v=4
url: https://github.com/pawamoy
- - login: bnkc
- avatarUrl: https://avatars.githubusercontent.com/u/34930566?u=db5e6f4f87836cad26c2aa90ce390ce49041c5a9&v=4
- url: https://github.com/bnkc
- login: petercool
avatarUrl: https://avatars.githubusercontent.com/u/37613029?u=81c525232bb35780945a68e88afd96bb2cdad9c4&v=4
url: https://github.com/petercool
@@ -320,6 +296,9 @@ sponsors:
- login: caviri
avatarUrl: https://avatars.githubusercontent.com/u/45425937?u=4e14bd64282bad8f385eafbdb004b5a279366d6e&v=4
url: https://github.com/caviri
+ - login: joshuatz
+ avatarUrl: https://avatars.githubusercontent.com/u/17817563?u=f1bf05b690d1fc164218f0b420cdd3acb7913e21&v=4
+ url: https://github.com/joshuatz
- login: SebTota
avatarUrl: https://avatars.githubusercontent.com/u/25122511?v=4
url: https://github.com/SebTota
@@ -335,21 +314,18 @@ sponsors:
- login: rlnchow
avatarUrl: https://avatars.githubusercontent.com/u/28018479?u=a93ca9cf1422b9ece155784a72d5f2fdbce7adff&v=4
url: https://github.com/rlnchow
- - login: dvlpjrs
- avatarUrl: https://avatars.githubusercontent.com/u/32254642?u=fbd6ad0324d4f1eb6231cf775be1c7bd4404e961&v=4
- url: https://github.com/dvlpjrs
- login: engineerjoe440
avatarUrl: https://avatars.githubusercontent.com/u/33275230?u=eb223cad27017bb1e936ee9b429b450d092d0236&v=4
url: https://github.com/engineerjoe440
+ - login: bnkc
+ avatarUrl: https://avatars.githubusercontent.com/u/34930566?u=db5e6f4f87836cad26c2aa90ce390ce49041c5a9&v=4
+ url: https://github.com/bnkc
+ - login: lukzmu
+ avatarUrl: https://avatars.githubusercontent.com/u/175964415?u=75348f25bb99a5f92ddb40c0b9b1ff7acb39c150&v=4
+ url: https://github.com/lukzmu
- login: hgalytoby
avatarUrl: https://avatars.githubusercontent.com/u/50397689?u=62c7ff3519858423579676cd0efbd7e3f1ffe63a&v=4
url: https://github.com/hgalytoby
- - login: conservative-dude
- avatarUrl: https://avatars.githubusercontent.com/u/55538308?u=f250c44942ea6e73a6bd90739b381c470c192c11&v=4
- url: https://github.com/conservative-dude
- - login: CR1337
- avatarUrl: https://avatars.githubusercontent.com/u/62649536?u=57a6aab10d2421a497306da8bcded01b826c54ae&v=4
- url: https://github.com/CR1337
- login: PunRabbit
avatarUrl: https://avatars.githubusercontent.com/u/70463212?u=1a835cfbc99295a60c8282f6aa6199d1b42241a5&v=4
url: https://github.com/PunRabbit
@@ -363,14 +339,11 @@ sponsors:
avatarUrl: https://avatars.githubusercontent.com/u/1484589?u=54556072b8136efa12ae3b6902032ea2a39ace4b&v=4
url: https://github.com/miguelgr
- login: WillHogan
- avatarUrl: https://avatars.githubusercontent.com/u/1661551?u=7036c064cf29781470573865264ec8e60b6b809f&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/1661551?u=8a80356e3e7d5a417157aba7ea565dabc8678327&v=4
url: https://github.com/WillHogan
- login: my3
avatarUrl: https://avatars.githubusercontent.com/u/1825270?v=4
url: https://github.com/my3
- - login: leobiscassi
- avatarUrl: https://avatars.githubusercontent.com/u/1977418?u=f9f82445a847ab479bd7223debd677fcac6c49a0&v=4
- url: https://github.com/leobiscassi
- login: Alisa-lisa
avatarUrl: https://avatars.githubusercontent.com/u/4137964?u=e7e393504f554f4ff15863a1e01a5746863ef9ce&v=4
url: https://github.com/Alisa-lisa
@@ -389,6 +362,9 @@ sponsors:
- login: tochikuji
avatarUrl: https://avatars.githubusercontent.com/u/851759?v=4
url: https://github.com/tochikuji
+ - login: moonape1226
+ avatarUrl: https://avatars.githubusercontent.com/u/8532038?u=d9f8b855a429fff9397c3833c2ff83849ebf989d&v=4
+ url: https://github.com/moonape1226
- login: msehnout
avatarUrl: https://avatars.githubusercontent.com/u/9369632?u=8c988f1b008a3f601385a3616f9327820f66e3a5&v=4
url: https://github.com/msehnout
@@ -419,9 +395,6 @@ sponsors:
- login: TheR1D
avatarUrl: https://avatars.githubusercontent.com/u/16740832?u=b0dfdbdb27b79729430c71c6128962f77b7b53f7&v=4
url: https://github.com/TheR1D
- - login: joshuatz
- avatarUrl: https://avatars.githubusercontent.com/u/17817563?u=f1bf05b690d1fc164218f0b420cdd3acb7913e21&v=4
- url: https://github.com/joshuatz
- login: danielunderwood
avatarUrl: https://avatars.githubusercontent.com/u/4472301?v=4
url: https://github.com/danielunderwood
@@ -446,16 +419,7 @@ sponsors:
- login: harsh183
avatarUrl: https://avatars.githubusercontent.com/u/7780198?v=4
url: https://github.com/harsh183
- - login: hcristea
- avatarUrl: https://avatars.githubusercontent.com/u/7814406?u=19092923a4ea5b338567961c8270b9206a6d81bb&v=4
- url: https://github.com/hcristea
- - login: moonape1226
- avatarUrl: https://avatars.githubusercontent.com/u/8532038?u=d9f8b855a429fff9397c3833c2ff83849ebf989d&v=4
- url: https://github.com/moonape1226
-- - login: larsyngvelundin
- avatarUrl: https://avatars.githubusercontent.com/u/34173819?u=74958599695bf83ac9f1addd935a51548a10c6b0&v=4
- url: https://github.com/larsyngvelundin
- - login: andrecorumba
+- - login: andrecorumba
avatarUrl: https://avatars.githubusercontent.com/u/37807517?u=9b9be3b41da9bda60957da9ef37b50dbf65baa61&v=4
url: https://github.com/andrecorumba
- login: rwxd
@@ -470,21 +434,24 @@ sponsors:
- login: Olegt0rr
avatarUrl: https://avatars.githubusercontent.com/u/25399456?u=3e87b5239a2f4600975ba13be73054f8567c6060&v=4
url: https://github.com/Olegt0rr
- - login: FabulousCodingFox
- avatarUrl: https://avatars.githubusercontent.com/u/78906517?u=924a27cbee3db7e0ece5cc1509921402e1445e74&v=4
- url: https://github.com/FabulousCodingFox
- - login: anqorithm
- avatarUrl: https://avatars.githubusercontent.com/u/61029571?u=468256fa4e2d9ce2870b608299724bebb7a33f18&v=4
- url: https://github.com/anqorithm
- - login: Materacl
- avatarUrl: https://avatars.githubusercontent.com/u/70155818?u=ae11d084518856127cca483816a91a187e3124ee&v=4
- url: https://github.com/Materacl
+ - login: larsyngvelundin
+ avatarUrl: https://avatars.githubusercontent.com/u/34173819?u=74958599695bf83ac9f1addd935a51548a10c6b0&v=4
+ url: https://github.com/larsyngvelundin
+ - login: 0ne-stone
+ avatarUrl: https://avatars.githubusercontent.com/u/62360849?u=746dd21c34e7e06eefb11b03e8bb01aaae3c2a4f&v=4
+ url: https://github.com/0ne-stone
+ - login: darixsamani
+ avatarUrl: https://avatars.githubusercontent.com/u/67915678?u=cfa82128692eeeec4bf0e7a0faaa9a614695c0f9&v=4
+ url: https://github.com/darixsamani
+ - login: nayasinghania
+ avatarUrl: https://avatars.githubusercontent.com/u/74111380?u=af853245a21fe052b6a27e41a8de8cf4cdf76e85&v=4
+ url: https://github.com/nayasinghania
- login: Toothwitch
avatarUrl: https://avatars.githubusercontent.com/u/1710406?u=5eebb23b46cd26e48643b9e5179536cad491c17a&v=4
url: https://github.com/Toothwitch
- - login: ssbarnea
- avatarUrl: https://avatars.githubusercontent.com/u/102495?u=c7bd9ddf127785286fc939dd18cb02db0a453bce&v=4
- url: https://github.com/ssbarnea
+ - login: roboman-tech
+ avatarUrl: https://avatars.githubusercontent.com/u/8183070?u=fdeaa2ed29f598eb7901693884c0ad32b16982e3&v=4
+ url: https://github.com/roboman-tech
- login: andreagrandi
avatarUrl: https://avatars.githubusercontent.com/u/636391?u=13d90cb8ec313593a5b71fbd4e33b78d6da736f5&v=4
url: https://github.com/andreagrandi
diff --git a/docs/en/data/people.yml b/docs/en/data/people.yml
index 7f910ab34..e3eab5d01 100644
--- a/docs/en/data/people.yml
+++ b/docs/en/data/people.yml
@@ -1,43 +1,43 @@
maintainers:
- login: tiangolo
- answers: 1894
+ answers: 1898
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
experts:
- login: tiangolo
- count: 1894
+ count: 1898
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
+- login: YuriiMotov
+ count: 941
+ avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4
+ url: https://github.com/YuriiMotov
- login: github-actions
- count: 770
+ count: 769
avatarUrl: https://avatars.githubusercontent.com/in/15368?v=4
url: https://github.com/apps/github-actions
- login: Kludex
- count: 645
+ count: 654
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex
- login: jgould22
- count: 250
+ count: 263
avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4
url: https://github.com/jgould22
- login: dmontagu
count: 240
avatarUrl: https://avatars.githubusercontent.com/u/35119617?u=540f30c937a6450812628b9592a1dfe91bbe148e&v=4
url: https://github.com/dmontagu
-- login: YuriiMotov
- count: 223
- avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4
- url: https://github.com/YuriiMotov
- login: Mause
count: 219
avatarUrl: https://avatars.githubusercontent.com/u/1405026?v=4
url: https://github.com/Mause
- login: ycd
- count: 217
- avatarUrl: https://avatars.githubusercontent.com/u/62724709?u=29682e4b6ac7d5293742ccf818188394b9a82972&v=4
+ count: 216
+ avatarUrl: https://avatars.githubusercontent.com/u/62724709?u=f1e7bae394a315da950912c92dc861a8eaf95d4c&v=4
url: https://github.com/ycd
- login: JarroVGIT
- count: 192
+ count: 190
avatarUrl: https://avatars.githubusercontent.com/u/13659033?u=e8bea32d07a5ef72f7dde3b2079ceb714923ca05&v=4
url: https://github.com/JarroVGIT
- login: euri10
@@ -46,48 +46,52 @@ experts:
url: https://github.com/euri10
- login: iudeen
count: 128
- avatarUrl: https://avatars.githubusercontent.com/u/10519440?u=2843b3303282bff8b212dcd4d9d6689452e4470c&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/10519440?u=f09cdd745e5bf16138f29b42732dd57c7f02bee1&v=4
url: https://github.com/iudeen
- login: phy25
count: 126
avatarUrl: https://avatars.githubusercontent.com/u/331403?v=4
url: https://github.com/phy25
- login: JavierSanchezCastro
- count: 85
+ count: 93
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro
+- login: luzzodev
+ count: 84
+ avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
+ url: https://github.com/luzzodev
- login: raphaelauv
count: 83
avatarUrl: https://avatars.githubusercontent.com/u/10202690?u=e6f86f5c0c3026a15d6b51792fa3e532b12f1371&v=4
url: https://github.com/raphaelauv
-- login: ghandic
- count: 71
- avatarUrl: https://avatars.githubusercontent.com/u/23500353?u=e2e1d736f924d9be81e8bfc565b6d8836ba99773&v=4
- url: https://github.com/ghandic
- login: ArcLightSlavik
count: 71
avatarUrl: https://avatars.githubusercontent.com/u/31127044?u=b0f2c37142f4b762e41ad65dc49581813422bd71&v=4
url: https://github.com/ArcLightSlavik
+- login: ghandic
+ count: 71
+ avatarUrl: https://avatars.githubusercontent.com/u/23500353?u=e2e1d736f924d9be81e8bfc565b6d8836ba99773&v=4
+ url: https://github.com/ghandic
- login: n8sty
- count: 66
+ count: 67
avatarUrl: https://avatars.githubusercontent.com/u/2964996?v=4
url: https://github.com/n8sty
- login: falkben
count: 59
avatarUrl: https://avatars.githubusercontent.com/u/653031?u=ad9838e089058c9e5a0bab94c0eec7cc181e0cd0&v=4
url: https://github.com/falkben
-- login: acidjunk
+- login: yinziyan1206
count: 50
- avatarUrl: https://avatars.githubusercontent.com/u/685002?u=b5094ab4527fc84b006c0ac9ff54367bdebb2267&v=4
- url: https://github.com/acidjunk
+ avatarUrl: https://avatars.githubusercontent.com/u/37829370?u=da44ca53aefd5c23f346fab8e9fd2e108294c179&v=4
+ url: https://github.com/yinziyan1206
- login: sm-Fifteen
count: 49
avatarUrl: https://avatars.githubusercontent.com/u/516999?u=437c0c5038558c67e887ccd863c1ba0f846c03da&v=4
url: https://github.com/sm-Fifteen
-- login: yinziyan1206
+- login: acidjunk
count: 49
- avatarUrl: https://avatars.githubusercontent.com/u/37829370?u=da44ca53aefd5c23f346fab8e9fd2e108294c179&v=4
- url: https://github.com/yinziyan1206
+ avatarUrl: https://avatars.githubusercontent.com/u/685002?u=b5094ab4527fc84b006c0ac9ff54367bdebb2267&v=4
+ url: https://github.com/acidjunk
- login: adriangb
count: 46
avatarUrl: https://avatars.githubusercontent.com/u/1755071?u=612704256e38d6ac9cbed24f10e4b6ac2da74ecb&v=4
@@ -100,34 +104,30 @@ experts:
count: 45
avatarUrl: https://avatars.githubusercontent.com/u/16958893?u=f8be7088d5076d963984a21f95f44e559192d912&v=4
url: https://github.com/insomnes
-- login: odiseo0
- count: 43
- avatarUrl: https://avatars.githubusercontent.com/u/87550035?u=241a71f6b7068738b81af3e57f45ffd723538401&v=4
- url: https://github.com/odiseo0
- login: frankie567
count: 43
avatarUrl: https://avatars.githubusercontent.com/u/1144727?u=c159fe047727aedecbbeeaa96a1b03ceb9d39add&v=4
url: https://github.com/frankie567
+- login: odiseo0
+ count: 43
+ avatarUrl: https://avatars.githubusercontent.com/u/87550035?u=241a71f6b7068738b81af3e57f45ffd723538401&v=4
+ url: https://github.com/odiseo0
+- login: sinisaos
+ count: 41
+ avatarUrl: https://avatars.githubusercontent.com/u/30960668?v=4
+ url: https://github.com/sinisaos
- login: includeamin
count: 40
avatarUrl: https://avatars.githubusercontent.com/u/11836741?u=8bd5ef7e62fe6a82055e33c4c0e0a7879ff8cfb6&v=4
url: https://github.com/includeamin
-- login: sinisaos
- count: 39
- avatarUrl: https://avatars.githubusercontent.com/u/30960668?v=4
- url: https://github.com/sinisaos
-- login: luzzodev
+- login: STeveShary
count: 37
- avatarUrl: https://avatars.githubusercontent.com/u/27291415?v=4
- url: https://github.com/luzzodev
+ avatarUrl: https://avatars.githubusercontent.com/u/5167622?u=de8f597c81d6336fcebc37b32dfd61a3f877160c&v=4
+ url: https://github.com/STeveShary
- login: chbndrhnns
count: 37
avatarUrl: https://avatars.githubusercontent.com/u/7534547?v=4
url: https://github.com/chbndrhnns
-- login: STeveShary
- count: 37
- avatarUrl: https://avatars.githubusercontent.com/u/5167622?u=de8f597c81d6336fcebc37b32dfd61a3f877160c&v=4
- url: https://github.com/STeveShary
- login: krishnardt
count: 35
avatarUrl: https://avatars.githubusercontent.com/u/31960541?u=47f4829c77f4962ab437ffb7995951e41eeebe9b&v=4
@@ -144,9 +144,13 @@ experts:
count: 27
avatarUrl: https://avatars.githubusercontent.com/u/13135006?u=99f0b0f0fc47e88e8abb337b4447357939ef93e7&v=4
url: https://github.com/hasansezertasan
+- login: alv2017
+ count: 26
+ avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
+ url: https://github.com/alv2017
- login: dbanty
count: 26
- avatarUrl: https://avatars.githubusercontent.com/u/43723790?u=9bcce836bbce55835291c5b2ac93a4e311f4b3c3&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/43723790?u=9d726785d08e50b1e1cd96505800c8ea8405bce2&v=4
url: https://github.com/dbanty
- login: wshayes
count: 25
@@ -156,14 +160,14 @@ experts:
count: 23
avatarUrl: https://avatars.githubusercontent.com/u/9435877?u=719327b7d2c4c62212456d771bfa7c6b8dbb9eac&v=4
url: https://github.com/SirTelemak
+- login: connebs
+ count: 22
+ avatarUrl: https://avatars.githubusercontent.com/u/9054108?u=e151d5f545a3395136d711c227c22032fda67cfa&v=4
+ url: https://github.com/connebs
- login: nymous
count: 22
avatarUrl: https://avatars.githubusercontent.com/u/4216559?u=360a36fb602cded27273cbfc0afc296eece90662&v=4
url: https://github.com/nymous
-- login: acnebs
- count: 22
- avatarUrl: https://avatars.githubusercontent.com/u/9054108?v=4
- url: https://github.com/acnebs
- login: chrisK824
count: 22
avatarUrl: https://avatars.githubusercontent.com/u/79946379?u=03d85b22d696a58a9603e55fbbbe2de6b0f4face&v=4
@@ -172,10 +176,6 @@ experts:
count: 21
avatarUrl: https://avatars.githubusercontent.com/u/51059348?u=5fe59a56e1f2f9ccd8005d71752a8276f133ae1a&v=4
url: https://github.com/rafsaf
-- login: ebottos94
- count: 20
- avatarUrl: https://avatars.githubusercontent.com/u/100039558?u=8b91053b3abe4a9209375e3651e1c1ef192d884b&v=4
- url: https://github.com/ebottos94
- login: nsidnev
count: 20
avatarUrl: https://avatars.githubusercontent.com/u/22559461?u=a9cc3238217e21dc8796a1a500f01b722adb082c&v=4
@@ -184,26 +184,26 @@ experts:
count: 20
avatarUrl: https://avatars.githubusercontent.com/u/565544?v=4
url: https://github.com/chris-allnutt
+- login: ebottos94
+ count: 20
+ avatarUrl: https://avatars.githubusercontent.com/u/100039558?u=8b91053b3abe4a9209375e3651e1c1ef192d884b&v=4
+ url: https://github.com/ebottos94
- login: estebanx64
count: 19
avatarUrl: https://avatars.githubusercontent.com/u/10840422?u=45f015f95e1c0f06df602be4ab688d4b854cc8a8&v=4
url: https://github.com/estebanx64
-- login: sehraramiz
+- login: retnikt
count: 18
- avatarUrl: https://avatars.githubusercontent.com/u/14166324?u=8fac65e84dfff24245d304a5b5b09f7b5bd69dc9&v=4
- url: https://github.com/sehraramiz
+ avatarUrl: https://avatars.githubusercontent.com/u/24581770?v=4
+ url: https://github.com/retnikt
- login: zoliknemet
count: 18
avatarUrl: https://avatars.githubusercontent.com/u/22326718?u=31ba446ac290e23e56eea8e4f0c558aaf0b40779&v=4
url: https://github.com/zoliknemet
-- login: retnikt
+- login: sehraramiz
count: 18
- avatarUrl: https://avatars.githubusercontent.com/u/24581770?v=4
- url: https://github.com/retnikt
-- login: caeser1996
- count: 17
- avatarUrl: https://avatars.githubusercontent.com/u/16540232?u=05d2beb8e034d584d0a374b99d8826327bd7f614&v=4
- url: https://github.com/caeser1996
+ avatarUrl: https://avatars.githubusercontent.com/u/14166324?u=8fac65e84dfff24245d304a5b5b09f7b5bd69dc9&v=4
+ url: https://github.com/sehraramiz
- login: Hultner
count: 17
avatarUrl: https://avatars.githubusercontent.com/u/2669034?u=115e53df959309898ad8dc9443fbb35fee71df07&v=4
@@ -212,659 +212,511 @@ experts:
count: 17
avatarUrl: https://avatars.githubusercontent.com/u/1765494?u=5b1ab7c582db4b4016fa31affe977d10af108ad4&v=4
url: https://github.com/harunyasar
+- login: caeser1996
+ count: 17
+ avatarUrl: https://avatars.githubusercontent.com/u/16540232?u=05d2beb8e034d584d0a374b99d8826327bd7f614&v=4
+ url: https://github.com/caeser1996
- login: nkhitrov
count: 17
avatarUrl: https://avatars.githubusercontent.com/u/28262306?u=e19427d8dc296d6950e9c424adacc92d37496fe9&v=4
url: https://github.com/nkhitrov
-- login: jonatasoli
- count: 16
- avatarUrl: https://avatars.githubusercontent.com/u/26334101?u=071c062d2861d3dd127f6b4a5258cd8ef55d4c50&v=4
- url: https://github.com/jonatasoli
- login: dstlny
count: 16
avatarUrl: https://avatars.githubusercontent.com/u/41964673?u=9f2174f9d61c15c6e3a4c9e3aeee66f711ce311f&v=4
url: https://github.com/dstlny
-- login: ceb10n
+- login: jonatasoli
+ count: 16
+ avatarUrl: https://avatars.githubusercontent.com/u/26334101?u=f601c3f111f2148bd9244c2cb3ebbd57b592e674&v=4
+ url: https://github.com/jonatasoli
+- login: ghost
count: 15
- avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4
- url: https://github.com/ceb10n
+ avatarUrl: https://avatars.githubusercontent.com/u/10137?u=b1951d34a583cf12ec0d3b0781ba19be97726318&v=4
+ url: https://github.com/ghost
- login: jorgerpo
count: 15
avatarUrl: https://avatars.githubusercontent.com/u/12537771?u=7444d20019198e34911082780cc7ad73f2b97cb3&v=4
url: https://github.com/jorgerpo
-- login: simondale00
- count: 15
- avatarUrl: https://avatars.githubusercontent.com/u/33907262?u=2721fb37014d50daf473267c808aa678ecaefe09&v=4
- url: https://github.com/simondale00
-- login: ghost
+- login: pythonweb2
count: 15
- avatarUrl: https://avatars.githubusercontent.com/u/10137?u=b1951d34a583cf12ec0d3b0781ba19be97726318&v=4
- url: https://github.com/ghost
+ avatarUrl: https://avatars.githubusercontent.com/u/32141163?v=4
+ url: https://github.com/pythonweb2
- login: abhint
count: 15
avatarUrl: https://avatars.githubusercontent.com/u/25699289?u=b5d219277b4d001ac26fb8be357fddd88c29d51b&v=4
url: https://github.com/abhint
last_month_experts:
-- login: Kludex
- count: 14
- avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
- url: https://github.com/Kludex
- login: YuriiMotov
- count: 10
+ count: 289
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4
url: https://github.com/YuriiMotov
-- login: sehraramiz
- count: 7
- avatarUrl: https://avatars.githubusercontent.com/u/14166324?u=8fac65e84dfff24245d304a5b5b09f7b5bd69dc9&v=4
- url: https://github.com/sehraramiz
- login: luzzodev
- count: 5
- avatarUrl: https://avatars.githubusercontent.com/u/27291415?v=4
+ count: 12
+ avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev
-- login: yokwejuste
+- login: raceychan
+ count: 6
+ avatarUrl: https://avatars.githubusercontent.com/u/75417963?u=060c62870ec5a791765e63ac20d8885d11143786&v=4
+ url: https://github.com/raceychan
+- login: valentinDruzhinin
+ count: 5
+ avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
+ url: https://github.com/valentinDruzhinin
+- login: DoctorJohn
+ count: 5
+ avatarUrl: https://avatars.githubusercontent.com/u/14076775?u=2913e70a6142772847e91e2aaa5b9152391715e9&v=4
+ url: https://github.com/DoctorJohn
+- login: eqsdxr
count: 4
- avatarUrl: https://avatars.githubusercontent.com/u/71908316?u=592c1e42aa0ee5cb94890e0b863e2acc78cc3bbc&v=4
- url: https://github.com/yokwejuste
-- login: alv2017
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
- url: https://github.com/alv2017
-- login: Trinkes
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/9466879?v=4
- url: https://github.com/Trinkes
-- login: PREPONDERANCE
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/112809059?u=30ab12dc9ddba2f94ab90e6ad4ad8bc5cfa7fccd&v=4
- url: https://github.com/PREPONDERANCE
-- login: nbx3
+ avatarUrl: https://avatars.githubusercontent.com/u/157279130?u=58fddf77ed76966eaa8c73eea9bea4bb0c53b673&v=4
+ url: https://github.com/eqsdxr
+- login: sachinh35
+ count: 4
+ avatarUrl: https://avatars.githubusercontent.com/u/21972708?u=8560b97b8b41e175f476270b56de8a493b84f302&v=4
+ url: https://github.com/sachinh35
+- login: tiangolo
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/34649527?u=943812f69e0d40adbd3fa1c9b8ef50dd971a2a45&v=4
- url: https://github.com/nbx3
-- login: XiaoXinYo
+ avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
+ url: https://github.com/tiangolo
+- login: Brikas
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/56395004?u=b3b7cb758997f283c271a581833e407229dab82c&v=4
- url: https://github.com/XiaoXinYo
-- login: iloveitaly
+ avatarUrl: https://avatars.githubusercontent.com/u/80290187?v=4
+ url: https://github.com/Brikas
+- login: TaigoFr
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/150855?v=4
- url: https://github.com/iloveitaly
+ avatarUrl: https://avatars.githubusercontent.com/u/17792131?u=372b27056ec82f1ae03d8b3f37ef55b04a7cfdd1&v=4
+ url: https://github.com/TaigoFr
three_months_experts:
-- login: luzzodev
- count: 33
- avatarUrl: https://avatars.githubusercontent.com/u/27291415?v=4
- url: https://github.com/luzzodev
- login: YuriiMotov
- count: 31
+ count: 732
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4
url: https://github.com/YuriiMotov
-- login: Kludex
- count: 24
- avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
- url: https://github.com/Kludex
-- login: sehraramiz
- count: 11
- avatarUrl: https://avatars.githubusercontent.com/u/14166324?u=8fac65e84dfff24245d304a5b5b09f7b5bd69dc9&v=4
- url: https://github.com/sehraramiz
-- login: estebanx64
- count: 7
- avatarUrl: https://avatars.githubusercontent.com/u/10840422?u=45f015f95e1c0f06df602be4ab688d4b854cc8a8&v=4
- url: https://github.com/estebanx64
-- login: yvallois
+- login: luzzodev
+ count: 26
+ avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
+ url: https://github.com/luzzodev
+- login: valentinDruzhinin
+ count: 14
+ avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
+ url: https://github.com/valentinDruzhinin
+- login: sachinh35
+ count: 8
+ avatarUrl: https://avatars.githubusercontent.com/u/21972708?u=8560b97b8b41e175f476270b56de8a493b84f302&v=4
+ url: https://github.com/sachinh35
+- login: raceychan
count: 6
- avatarUrl: https://avatars.githubusercontent.com/u/36999744?v=4
- url: https://github.com/yvallois
-- login: yokwejuste
- count: 4
- avatarUrl: https://avatars.githubusercontent.com/u/71908316?u=592c1e42aa0ee5cb94890e0b863e2acc78cc3bbc&v=4
- url: https://github.com/yokwejuste
-- login: jgould22
+ avatarUrl: https://avatars.githubusercontent.com/u/75417963?u=060c62870ec5a791765e63ac20d8885d11143786&v=4
+ url: https://github.com/raceychan
+- login: DoctorJohn
+ count: 5
+ avatarUrl: https://avatars.githubusercontent.com/u/14076775?u=2913e70a6142772847e91e2aaa5b9152391715e9&v=4
+ url: https://github.com/DoctorJohn
+- login: eqsdxr
count: 4
- avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4
- url: https://github.com/jgould22
-- login: alv2017
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
- url: https://github.com/alv2017
-- login: viniciusCalcantara
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/108818737?u=3d7ffe5808843ee4372f9cc5a559ff1674cf1792&v=4
- url: https://github.com/viniciusCalcantara
-- login: Trinkes
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/9466879?v=4
- url: https://github.com/Trinkes
-- login: PREPONDERANCE
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/112809059?u=30ab12dc9ddba2f94ab90e6ad4ad8bc5cfa7fccd&v=4
- url: https://github.com/PREPONDERANCE
-- login: nbx3
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/34649527?u=943812f69e0d40adbd3fa1c9b8ef50dd971a2a45&v=4
- url: https://github.com/nbx3
-- login: XiaoXinYo
+ avatarUrl: https://avatars.githubusercontent.com/u/157279130?u=58fddf77ed76966eaa8c73eea9bea4bb0c53b673&v=4
+ url: https://github.com/eqsdxr
+- login: tiangolo
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/56395004?u=b3b7cb758997f283c271a581833e407229dab82c&v=4
- url: https://github.com/XiaoXinYo
+ avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
+ url: https://github.com/tiangolo
- login: JavierSanchezCastro
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro
-- login: iloveitaly
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/150855?v=4
- url: https://github.com/iloveitaly
-- login: LincolnPuzey
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/18750802?v=4
- url: https://github.com/LincolnPuzey
-- login: Knighthawk-Leo
+- login: henrymcl
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/72437494?u=27c68db94a3107b605e603cc136f4ba83f0106d5&v=4
- url: https://github.com/Knighthawk-Leo
-- login: gelezo43
+ avatarUrl: https://avatars.githubusercontent.com/u/26480299?v=4
+ url: https://github.com/henrymcl
+- login: jymchng
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/40732698?u=611f39d3c1d2f4207a590937a78c1f10eed6232c&v=4
- url: https://github.com/gelezo43
-- login: AliYmn
+ avatarUrl: https://avatars.githubusercontent.com/u/27895426?u=fb88c47775147d62a395fdb895d1af4148c7b566&v=4
+ url: https://github.com/jymchng
+- login: Brikas
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/18416653?u=98c1fca46c7e4dabe8c39d17b5e55d1511d41cf9&v=4
- url: https://github.com/AliYmn
-- login: RichieB2B
+ avatarUrl: https://avatars.githubusercontent.com/u/80290187?v=4
+ url: https://github.com/Brikas
+- login: TaigoFr
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/1461970?u=edaa57d1077705244ea5c9244f4783d94ff11f12&v=4
- url: https://github.com/RichieB2B
-- login: Synrom
+ avatarUrl: https://avatars.githubusercontent.com/u/17792131?u=372b27056ec82f1ae03d8b3f37ef55b04a7cfdd1&v=4
+ url: https://github.com/TaigoFr
+- login: davidhuser
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/30272537?v=4
- url: https://github.com/Synrom
-- login: iiotsrc
+ avatarUrl: https://avatars.githubusercontent.com/u/4357648?u=6ed702f8f6d49a8b2a0ed33cbd8ab59c2d7db7f7&v=4
+ url: https://github.com/davidhuser
+- login: KianAnbarestani
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/131771119?u=bcaf2559ef6266af70b151b7fda31a1ee3dbecb3&v=4
- url: https://github.com/iiotsrc
-- login: Kfir-G
+ avatarUrl: https://avatars.githubusercontent.com/u/145364424?u=dcc3d8fb4ca07d36fb52a17f38b6650565de40be&v=4
+ url: https://github.com/KianAnbarestani
+- login: Kludex
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/57500876?u=0cd29db046a17f12f382d398141319fca7ff230a&v=4
- url: https://github.com/Kfir-G
+ avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
+ url: https://github.com/Kludex
six_months_experts:
- login: YuriiMotov
- count: 72
+ count: 749
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4
url: https://github.com/YuriiMotov
+- login: luzzodev
+ count: 51
+ avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
+ url: https://github.com/luzzodev
+- login: alv2017
+ count: 26
+ avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
+ url: https://github.com/alv2017
- login: Kludex
- count: 40
+ count: 20
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex
-- login: luzzodev
- count: 37
- avatarUrl: https://avatars.githubusercontent.com/u/27291415?v=4
- url: https://github.com/luzzodev
-- login: sinisaos
- count: 37
- avatarUrl: https://avatars.githubusercontent.com/u/30960668?v=4
- url: https://github.com/sinisaos
+- login: valentinDruzhinin
+ count: 14
+ avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
+ url: https://github.com/valentinDruzhinin
+- login: jgould22
+ count: 13
+ avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4
+ url: https://github.com/jgould22
- login: JavierSanchezCastro
- count: 16
+ count: 10
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro
-- login: Kfir-G
- count: 13
- avatarUrl: https://avatars.githubusercontent.com/u/57500876?u=0cd29db046a17f12f382d398141319fca7ff230a&v=4
- url: https://github.com/Kfir-G
+- login: sachinh35
+ count: 9
+ avatarUrl: https://avatars.githubusercontent.com/u/21972708?u=8560b97b8b41e175f476270b56de8a493b84f302&v=4
+ url: https://github.com/sachinh35
+- login: yauhen-sobaleu
+ count: 9
+ avatarUrl: https://avatars.githubusercontent.com/u/51629535?u=fc1817060daf2df438bfca86c44f33da5cd667db&v=4
+ url: https://github.com/yauhen-sobaleu
- login: tiangolo
- count: 12
+ count: 8
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
+- login: raceychan
+ count: 6
+ avatarUrl: https://avatars.githubusercontent.com/u/75417963?u=060c62870ec5a791765e63ac20d8885d11143786&v=4
+ url: https://github.com/raceychan
+- login: DoctorJohn
+ count: 5
+ avatarUrl: https://avatars.githubusercontent.com/u/14076775?u=2913e70a6142772847e91e2aaa5b9152391715e9&v=4
+ url: https://github.com/DoctorJohn
- login: sehraramiz
- count: 11
+ count: 5
avatarUrl: https://avatars.githubusercontent.com/u/14166324?u=8fac65e84dfff24245d304a5b5b09f7b5bd69dc9&v=4
url: https://github.com/sehraramiz
-- login: ceb10n
- count: 10
- avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4
- url: https://github.com/ceb10n
-- login: estebanx64
- count: 7
- avatarUrl: https://avatars.githubusercontent.com/u/10840422?u=45f015f95e1c0f06df602be4ab688d4b854cc8a8&v=4
- url: https://github.com/estebanx64
-- login: yvallois
- count: 6
- avatarUrl: https://avatars.githubusercontent.com/u/36999744?v=4
- url: https://github.com/yvallois
-- login: n8sty
- count: 5
- avatarUrl: https://avatars.githubusercontent.com/u/2964996?v=4
- url: https://github.com/n8sty
-- login: TomFaulkner
- count: 4
- avatarUrl: https://avatars.githubusercontent.com/u/14956620?v=4
- url: https://github.com/TomFaulkner
-- login: yokwejuste
+- login: eqsdxr
count: 4
- avatarUrl: https://avatars.githubusercontent.com/u/71908316?u=592c1e42aa0ee5cb94890e0b863e2acc78cc3bbc&v=4
- url: https://github.com/yokwejuste
-- login: jgould22
- count: 4
- avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4
- url: https://github.com/jgould22
-- login: alv2017
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
- url: https://github.com/alv2017
-- login: viniciusCalcantara
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/108818737?u=3d7ffe5808843ee4372f9cc5a559ff1674cf1792&v=4
- url: https://github.com/viniciusCalcantara
-- login: pawelad
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/7062874?u=d27dc220545a8401ad21840590a97d474d7101e6&v=4
- url: https://github.com/pawelad
-- login: dbfreem
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/9778569?u=f2f1e9135b5e4f1b0c6821a548b17f97572720fc&v=4
- url: https://github.com/dbfreem
-- login: Isuxiz
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/48672727?u=34d7b4ade252687d22a27cf53037b735b244bfc1&v=4
- url: https://github.com/Isuxiz
-- login: bertomaniac
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/10235051?u=14484a96833228a7b29fee4a7916d411c242c4f6&v=4
- url: https://github.com/bertomaniac
-- login: PhysicallyActive
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/160476156?u=7a8e44f4a43d3bba636f795bb7d9476c9233b4d8&v=4
- url: https://github.com/PhysicallyActive
-- login: Minibrams
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/8108085?u=b028dbc308fa8485e0e2e9402b3d03d8deb22bf9&v=4
- url: https://github.com/Minibrams
-- login: AIdjis
+ avatarUrl: https://avatars.githubusercontent.com/u/157279130?u=58fddf77ed76966eaa8c73eea9bea4bb0c53b673&v=4
+ url: https://github.com/eqsdxr
+- login: SobikXexe
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/88404339?u=2a80d80b054e9228391e32fb9bb39571509dab6a&v=4
- url: https://github.com/AIdjis
-- login: svlandeg
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
- url: https://github.com/svlandeg
-- login: Trinkes
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/9466879?v=4
- url: https://github.com/Trinkes
-- login: PREPONDERANCE
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/112809059?u=30ab12dc9ddba2f94ab90e6ad4ad8bc5cfa7fccd&v=4
- url: https://github.com/PREPONDERANCE
-- login: nbx3
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/34649527?u=943812f69e0d40adbd3fa1c9b8ef50dd971a2a45&v=4
- url: https://github.com/nbx3
-- login: yanggeorge
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/2434407?v=4
- url: https://github.com/yanggeorge
-- login: XiaoXinYo
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/56395004?u=b3b7cb758997f283c271a581833e407229dab82c&v=4
- url: https://github.com/XiaoXinYo
-- login: pythonweb2
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/32141163?v=4
- url: https://github.com/pythonweb2
-- login: slafs
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/210173?v=4
- url: https://github.com/slafs
-- login: AmirHmZz
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/38752106?u=07f80e451bda00a9492bbc764e49d24ad3ada8cc&v=4
- url: https://github.com/AmirHmZz
-- login: iloveitaly
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/150855?v=4
- url: https://github.com/iloveitaly
-- login: LincolnPuzey
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/18750802?v=4
- url: https://github.com/LincolnPuzey
-- login: alejsdev
+ avatarUrl: https://avatars.githubusercontent.com/u/87701130?v=4
+ url: https://github.com/SobikXexe
+- login: EverStarck
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=356f39ff3f0211c720b06d3dbb060e98884085e3&v=4
- url: https://github.com/alejsdev
-- login: Knighthawk-Leo
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/72437494?u=27c68db94a3107b605e603cc136f4ba83f0106d5&v=4
- url: https://github.com/Knighthawk-Leo
-- login: gelezo43
+ avatarUrl: https://avatars.githubusercontent.com/u/51029456?u=343409b7cb6b3ea6a59359f4e8370d9c3f140ecd&v=4
+ url: https://github.com/EverStarck
+- login: henrymcl
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/40732698?u=611f39d3c1d2f4207a590937a78c1f10eed6232c&v=4
- url: https://github.com/gelezo43
-- login: christiansicari
+ avatarUrl: https://avatars.githubusercontent.com/u/26480299?v=4
+ url: https://github.com/henrymcl
+- login: jymchng
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/29756552?v=4
- url: https://github.com/christiansicari
-- login: 1001pepi
+ avatarUrl: https://avatars.githubusercontent.com/u/27895426?u=fb88c47775147d62a395fdb895d1af4148c7b566&v=4
+ url: https://github.com/jymchng
+- login: adsouza
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/82064861?u=8c6ffdf2275d6970a07294752c545cd2702c57d3&v=4
- url: https://github.com/1001pepi
-- login: AliYmn
+ avatarUrl: https://avatars.githubusercontent.com/u/275832?v=4
+ url: https://github.com/adsouza
+- login: Brikas
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/18416653?u=98c1fca46c7e4dabe8c39d17b5e55d1511d41cf9&v=4
- url: https://github.com/AliYmn
-- login: RichieB2B
+ avatarUrl: https://avatars.githubusercontent.com/u/80290187?v=4
+ url: https://github.com/Brikas
+- login: JacobHayes
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/1461970?u=edaa57d1077705244ea5c9244f4783d94ff11f12&v=4
- url: https://github.com/RichieB2B
-- login: Synrom
+ avatarUrl: https://avatars.githubusercontent.com/u/2555532?u=354a525847a276bbb4426b0c95791a8ba5970f9b&v=4
+ url: https://github.com/JacobHayes
+- login: TaigoFr
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/30272537?v=4
- url: https://github.com/Synrom
-- login: ecly
+ avatarUrl: https://avatars.githubusercontent.com/u/17792131?u=372b27056ec82f1ae03d8b3f37ef55b04a7cfdd1&v=4
+ url: https://github.com/TaigoFr
+- login: davidhuser
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/8410422?v=4
- url: https://github.com/ecly
-- login: iiotsrc
+ avatarUrl: https://avatars.githubusercontent.com/u/4357648?u=6ed702f8f6d49a8b2a0ed33cbd8ab59c2d7db7f7&v=4
+ url: https://github.com/davidhuser
+- login: PidgeyBE
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/131771119?u=bcaf2559ef6266af70b151b7fda31a1ee3dbecb3&v=4
- url: https://github.com/iiotsrc
-- login: simondale00
+ avatarUrl: https://avatars.githubusercontent.com/u/19860056?u=47b584eb1c1ab45e31c1b474109a962d7e82be49&v=4
+ url: https://github.com/PidgeyBE
+- login: KianAnbarestani
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/33907262?u=2721fb37014d50daf473267c808aa678ecaefe09&v=4
- url: https://github.com/simondale00
-- login: jd-solanki
+ avatarUrl: https://avatars.githubusercontent.com/u/145364424?u=dcc3d8fb4ca07d36fb52a17f38b6650565de40be&v=4
+ url: https://github.com/KianAnbarestani
+- login: Ykaiqx
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/47495003?u=6e225cb42c688d0cd70e65c6baedb9f5922b1178&v=4
- url: https://github.com/jd-solanki
-- login: AumGupta
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/86357151?u=7d05aa606c0611a18f4db16cf26361ce10a6e195&v=4
- url: https://github.com/AumGupta
-- login: DeoLeung
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/3764720?u=4c222ef513814de4c7fb3736d0a7adf11d953d43&v=4
- url: https://github.com/DeoLeung
-- login: Reemyos
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/44867003?v=4
- url: https://github.com/Reemyos
-- login: deight93
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/37678115?u=a608798b5bd0034183a9c430ebb42fb266db86ce&v=4
- url: https://github.com/deight93
-- login: Jkrox
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/83181939?u=d6a922d97129f7f3916d6a1c166bc011b3a72b7f&v=4
- url: https://github.com/Jkrox
-- login: mmzeynalli
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/33568903?u=19efd0c0722730b83a70b7c86c36e5b7d83e07d2&v=4
- url: https://github.com/mmzeynalli
-- login: ddahan
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/1933516?u=1d200a620e8d6841df017e9f2bb7efb58b580f40&v=4
- url: https://github.com/ddahan
-- login: jfeaver
+ avatarUrl: https://avatars.githubusercontent.com/u/56395004?u=1eebf5ce25a8067f7bfa6251a24f667be492d9d6&v=4
+ url: https://github.com/Ykaiqx
+- login: sinisaos
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/1091338?u=0bcba366447d8fadad63f6705a52d128da4c7ec2&v=4
- url: https://github.com/jfeaver
-- login: Wurstnase
+ avatarUrl: https://avatars.githubusercontent.com/u/30960668?v=4
+ url: https://github.com/sinisaos
+- login: Ale-Cas
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/8709415?u=f479af475a97aee9a1dab302cfc35d07e9ea245f&v=4
- url: https://github.com/Wurstnase
-- login: tristan
+ avatarUrl: https://avatars.githubusercontent.com/u/64859146?u=d52a6ecf8d83d2927e2ae270bdfcc83495dba8c9&v=4
+ url: https://github.com/Ale-Cas
+- login: nbx3
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/1412?u=aab8aaa4cc0f1210ac45fc93873a5909d314c965&v=4
- url: https://github.com/tristan
-- login: chandanch
+ avatarUrl: https://avatars.githubusercontent.com/u/34649527?u=943812f69e0d40adbd3fa1c9b8ef50dd971a2a45&v=4
+ url: https://github.com/nbx3
+- login: marsboy02
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/8663552?u=afc484bc0a952c83f1fb6a1583cda443f807cd66&v=4
- url: https://github.com/chandanch
-- login: rvishruth
+ avatarUrl: https://avatars.githubusercontent.com/u/86903678?u=efe3aa9e4b22689df7633a96328fb35bf4a23905&v=4
+ url: https://github.com/marsboy02
+- login: vtgn
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/79176273?v=4
- url: https://github.com/rvishruth
-- login: mattmess1221
+ avatarUrl: https://avatars.githubusercontent.com/u/112889052?v=4
+ url: https://github.com/vtgn
+- login: Trinkes
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/3409962?u=723662989f2027755e67d200137c13c53ae154ac&v=4
- url: https://github.com/mattmess1221
+ avatarUrl: https://avatars.githubusercontent.com/u/9466879?v=4
+ url: https://github.com/Trinkes
one_year_experts:
- login: YuriiMotov
- count: 223
+ count: 831
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4
url: https://github.com/YuriiMotov
+- login: luzzodev
+ count: 84
+ avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
+ url: https://github.com/luzzodev
- login: Kludex
- count: 81
+ count: 55
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex
-- login: JavierSanchezCastro
- count: 47
- avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
- url: https://github.com/JavierSanchezCastro
-- login: jgould22
- count: 42
- avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4
- url: https://github.com/jgould22
- login: sinisaos
- count: 39
+ count: 41
avatarUrl: https://avatars.githubusercontent.com/u/30960668?v=4
url: https://github.com/sinisaos
-- login: luzzodev
- count: 37
- avatarUrl: https://avatars.githubusercontent.com/u/27291415?v=4
- url: https://github.com/luzzodev
+- login: alv2017
+ count: 26
+ avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
+ url: https://github.com/alv2017
+- login: JavierSanchezCastro
+ count: 25
+ avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
+ url: https://github.com/JavierSanchezCastro
- login: tiangolo
- count: 24
+ count: 22
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
-- login: n8sty
- count: 23
- avatarUrl: https://avatars.githubusercontent.com/u/2964996?v=4
- url: https://github.com/n8sty
-- login: estebanx64
- count: 19
- avatarUrl: https://avatars.githubusercontent.com/u/10840422?u=45f015f95e1c0f06df602be4ab688d4b854cc8a8&v=4
- url: https://github.com/estebanx64
-- login: ceb10n
- count: 15
- avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4
- url: https://github.com/ceb10n
-- login: sehraramiz
- count: 15
- avatarUrl: https://avatars.githubusercontent.com/u/14166324?u=8fac65e84dfff24245d304a5b5b09f7b5bd69dc9&v=4
- url: https://github.com/sehraramiz
-- login: PhysicallyActive
+- login: jgould22
+ count: 17
+ avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4
+ url: https://github.com/jgould22
+- login: valentinDruzhinin
count: 14
- avatarUrl: https://avatars.githubusercontent.com/u/160476156?u=7a8e44f4a43d3bba636f795bb7d9476c9233b4d8&v=4
- url: https://github.com/PhysicallyActive
+ avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
+ url: https://github.com/valentinDruzhinin
- login: Kfir-G
count: 13
avatarUrl: https://avatars.githubusercontent.com/u/57500876?u=0cd29db046a17f12f382d398141319fca7ff230a&v=4
url: https://github.com/Kfir-G
-- login: mattmess1221
+- login: estebanx64
count: 11
- avatarUrl: https://avatars.githubusercontent.com/u/3409962?u=723662989f2027755e67d200137c13c53ae154ac&v=4
- url: https://github.com/mattmess1221
-- login: hasansezertasan
+ avatarUrl: https://avatars.githubusercontent.com/u/10840422?u=45f015f95e1c0f06df602be4ab688d4b854cc8a8&v=4
+ url: https://github.com/estebanx64
+- login: sehraramiz
+ count: 11
+ avatarUrl: https://avatars.githubusercontent.com/u/14166324?u=8fac65e84dfff24245d304a5b5b09f7b5bd69dc9&v=4
+ url: https://github.com/sehraramiz
+- login: ceb10n
count: 10
- avatarUrl: https://avatars.githubusercontent.com/u/13135006?u=99f0b0f0fc47e88e8abb337b4447357939ef93e7&v=4
- url: https://github.com/hasansezertasan
-- login: AIdjis
+ avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4
+ url: https://github.com/ceb10n
+- login: sachinh35
+ count: 9
+ avatarUrl: https://avatars.githubusercontent.com/u/21972708?u=8560b97b8b41e175f476270b56de8a493b84f302&v=4
+ url: https://github.com/sachinh35
+- login: yauhen-sobaleu
+ count: 9
+ avatarUrl: https://avatars.githubusercontent.com/u/51629535?u=fc1817060daf2df438bfca86c44f33da5cd667db&v=4
+ url: https://github.com/yauhen-sobaleu
+- login: n8sty
count: 8
- avatarUrl: https://avatars.githubusercontent.com/u/88404339?u=2a80d80b054e9228391e32fb9bb39571509dab6a&v=4
- url: https://github.com/AIdjis
+ avatarUrl: https://avatars.githubusercontent.com/u/2964996?v=4
+ url: https://github.com/n8sty
- login: yvallois
- count: 6
+ count: 7
avatarUrl: https://avatars.githubusercontent.com/u/36999744?v=4
url: https://github.com/yvallois
-- login: PREPONDERANCE
- count: 5
- avatarUrl: https://avatars.githubusercontent.com/u/112809059?u=30ab12dc9ddba2f94ab90e6ad4ad8bc5cfa7fccd&v=4
- url: https://github.com/PREPONDERANCE
-- login: pythonweb2
- count: 5
- avatarUrl: https://avatars.githubusercontent.com/u/32141163?v=4
- url: https://github.com/pythonweb2
-- login: acidjunk
- count: 5
- avatarUrl: https://avatars.githubusercontent.com/u/685002?u=b5094ab4527fc84b006c0ac9ff54367bdebb2267&v=4
- url: https://github.com/acidjunk
-- login: gustavosett
- count: 5
- avatarUrl: https://avatars.githubusercontent.com/u/99373133?u=1739ca547c3d200f1b72450520bce46a97aab184&v=4
- url: https://github.com/gustavosett
-- login: binbjz
+- login: raceychan
+ count: 6
+ avatarUrl: https://avatars.githubusercontent.com/u/75417963?u=060c62870ec5a791765e63ac20d8885d11143786&v=4
+ url: https://github.com/raceychan
+- login: DoctorJohn
count: 5
- avatarUrl: https://avatars.githubusercontent.com/u/8213913?u=22b68b7a0d5bf5e09c02084c0f5f53d7503114cd&v=4
- url: https://github.com/binbjz
-- login: chyok
+ avatarUrl: https://avatars.githubusercontent.com/u/14076775?u=2913e70a6142772847e91e2aaa5b9152391715e9&v=4
+ url: https://github.com/DoctorJohn
+- login: AIdjis
count: 5
- avatarUrl: https://avatars.githubusercontent.com/u/32629225?u=3b7c30e8a09426a1b9284f6e8a0ae53a525596bf&v=4
- url: https://github.com/chyok
+ avatarUrl: https://avatars.githubusercontent.com/u/88404339?u=2a80d80b054e9228391e32fb9bb39571509dab6a&v=4
+ url: https://github.com/AIdjis
+- login: eqsdxr
+ count: 4
+ avatarUrl: https://avatars.githubusercontent.com/u/157279130?u=58fddf77ed76966eaa8c73eea9bea4bb0c53b673&v=4
+ url: https://github.com/eqsdxr
- login: TomFaulkner
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/14956620?v=4
url: https://github.com/TomFaulkner
- login: yokwejuste
count: 4
- avatarUrl: https://avatars.githubusercontent.com/u/71908316?u=592c1e42aa0ee5cb94890e0b863e2acc78cc3bbc&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/71908316?u=4ba43bd63c169b5c015137d8916752a44001445a&v=4
url: https://github.com/yokwejuste
-- login: DeoLeung
- count: 4
- avatarUrl: https://avatars.githubusercontent.com/u/3764720?u=4c222ef513814de4c7fb3736d0a7adf11d953d43&v=4
- url: https://github.com/DeoLeung
-- login: flo-at
- count: 4
- avatarUrl: https://avatars.githubusercontent.com/u/564288?v=4
- url: https://github.com/flo-at
-- login: GodMoonGoodman
+- login: PhysicallyActive
count: 4
- avatarUrl: https://avatars.githubusercontent.com/u/29688727?u=7b251da620d999644c37c1feeb292d033eed7ad6&v=4
- url: https://github.com/GodMoonGoodman
-- login: bertomaniac
+ avatarUrl: https://avatars.githubusercontent.com/u/160476156?u=7a8e44f4a43d3bba636f795bb7d9476c9233b4d8&v=4
+ url: https://github.com/PhysicallyActive
+- login: svlandeg
count: 4
- avatarUrl: https://avatars.githubusercontent.com/u/10235051?u=14484a96833228a7b29fee4a7916d411c242c4f6&v=4
- url: https://github.com/bertomaniac
-- login: alv2017
+ avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
+ url: https://github.com/svlandeg
+- login: mattmess1221
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
- url: https://github.com/alv2017
-- login: msehnout
+ avatarUrl: https://avatars.githubusercontent.com/u/3409962?u=d22ea18aa8ea688af25a45df306134d593621a44&v=4
+ url: https://github.com/mattmess1221
+- login: pythonweb2
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/9369632?u=8c988f1b008a3f601385a3616f9327820f66e3a5&v=4
- url: https://github.com/msehnout
+ avatarUrl: https://avatars.githubusercontent.com/u/32141163?v=4
+ url: https://github.com/pythonweb2
- login: viniciusCalcantara
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/108818737?u=3d7ffe5808843ee4372f9cc5a559ff1674cf1792&v=4
url: https://github.com/viniciusCalcantara
-- login: pawelad
+- login: davidhuser
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/7062874?u=d27dc220545a8401ad21840590a97d474d7101e6&v=4
- url: https://github.com/pawelad
-- login: ThirVondukr
+ avatarUrl: https://avatars.githubusercontent.com/u/4357648?u=6ed702f8f6d49a8b2a0ed33cbd8ab59c2d7db7f7&v=4
+ url: https://github.com/davidhuser
+- login: bertomaniac
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/50728601?u=167c0bd655e52817082e50979a86d2f98f95b1a3&v=4
- url: https://github.com/ThirVondukr
+ avatarUrl: https://avatars.githubusercontent.com/u/10235051?u=14484a96833228a7b29fee4a7916d411c242c4f6&v=4
+ url: https://github.com/bertomaniac
- login: dbfreem
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/9778569?u=f2f1e9135b5e4f1b0c6821a548b17f97572720fc&v=4
url: https://github.com/dbfreem
-- login: Isuxiz
+- login: SobikXexe
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/48672727?u=34d7b4ade252687d22a27cf53037b735b244bfc1&v=4
- url: https://github.com/Isuxiz
-- login: angely-dev
+ avatarUrl: https://avatars.githubusercontent.com/u/87701130?v=4
+ url: https://github.com/SobikXexe
+- login: DeoLeung
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/4362224?v=4
- url: https://github.com/angely-dev
-- login: deight93
+ avatarUrl: https://avatars.githubusercontent.com/u/3764720?u=4c222ef513814de4c7fb3736d0a7adf11d953d43&v=4
+ url: https://github.com/DeoLeung
+- login: pawelad
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/37678115?u=a608798b5bd0034183a9c430ebb42fb266db86ce&v=4
- url: https://github.com/deight93
-- login: mmzeynalli
+ avatarUrl: https://avatars.githubusercontent.com/u/7062874?u=d27dc220545a8401ad21840590a97d474d7101e6&v=4
+ url: https://github.com/pawelad
+- login: Isuxiz
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/33568903?u=19efd0c0722730b83a70b7c86c36e5b7d83e07d2&v=4
- url: https://github.com/mmzeynalli
+ avatarUrl: https://avatars.githubusercontent.com/u/48672727?u=34d7b4ade252687d22a27cf53037b735b244bfc1&v=4
+ url: https://github.com/Isuxiz
- login: Minibrams
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/8108085?u=b028dbc308fa8485e0e2e9402b3d03d8deb22bf9&v=4
url: https://github.com/Minibrams
-- login: ryanisn
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/53449841?v=4
- url: https://github.com/ryanisn
-- login: svlandeg
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
- url: https://github.com/svlandeg
-- login: alexandercronin
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/8014288?u=69580504c51a0cdd756fc47b23bb7f404bd694e7&v=4
- url: https://github.com/alexandercronin
-- login: aanchlia
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/2835374?u=3c3ed29aa8b09ccaf8d66def0ce82bc2f7e5aab6&v=4
- url: https://github.com/aanchlia
-- login: chrisK824
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/79946379?u=03d85b22d696a58a9603e55fbbbe2de6b0f4face&v=4
- url: https://github.com/chrisK824
-- login: omarcruzpantoja
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/15116058?u=4b64c643fad49225d854e1aaecd1ffc6f9071a1b&v=4
- url: https://github.com/omarcruzpantoja
-- login: ahmedabdou14
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/104530599?u=d87b866e7c1db970d6f8e8031643818349b046d5&v=4
- url: https://github.com/ahmedabdou14
-- login: Trinkes
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/9466879?v=4
- url: https://github.com/Trinkes
-- login: Leon0824
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/1922026?v=4
- url: https://github.com/Leon0824
-- login: CarlosOliveira-23
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/102637302?u=cf350a4db956f30cbb2c27d3be0d15c282e32b14&v=4
- url: https://github.com/CarlosOliveira-23
-- login: nbx3
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/34649527?u=943812f69e0d40adbd3fa1c9b8ef50dd971a2a45&v=4
- url: https://github.com/nbx3
- login: yanggeorge
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/2434407?v=4
url: https://github.com/yanggeorge
-- login: XiaoXinYo
+- login: mmzeynalli
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/56395004?u=b3b7cb758997f283c271a581833e407229dab82c&v=4
- url: https://github.com/XiaoXinYo
-- login: anantgupta129
+ avatarUrl: https://avatars.githubusercontent.com/u/33568903?u=19efd0c0722730b83a70b7c86c36e5b7d83e07d2&v=4
+ url: https://github.com/mmzeynalli
+- login: jd-solanki
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/66518357?u=6e25dcd84638f17d2c6df5dc26f07fd7c6dc118e&v=4
- url: https://github.com/anantgupta129
+ avatarUrl: https://avatars.githubusercontent.com/u/47495003?u=6e225cb42c688d0cd70e65c6baedb9f5922b1178&v=4
+ url: https://github.com/jd-solanki
+- login: EverStarck
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/51029456?u=343409b7cb6b3ea6a59359f4e8370d9c3f140ecd&v=4
+ url: https://github.com/EverStarck
- login: slafs
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/210173?v=4
url: https://github.com/slafs
-- login: monchin
+- login: henrymcl
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/18521800?v=4
- url: https://github.com/monchin
-- login: AmirHmZz
+ avatarUrl: https://avatars.githubusercontent.com/u/26480299?v=4
+ url: https://github.com/henrymcl
+- login: jymchng
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/38752106?u=07f80e451bda00a9492bbc764e49d24ad3ada8cc&v=4
- url: https://github.com/AmirHmZz
+ avatarUrl: https://avatars.githubusercontent.com/u/27895426?u=fb88c47775147d62a395fdb895d1af4148c7b566&v=4
+ url: https://github.com/jymchng
+- login: adsouza
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/275832?v=4
+ url: https://github.com/adsouza
+- login: Synrom
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/30272537?v=4
+ url: https://github.com/Synrom
+- login: gaby
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/835733?u=8c72dec16fa560bdc81113354f2ffd79ad062bde&v=4
+ url: https://github.com/gaby
+- login: christiansicari
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/29756552?v=4
+ url: https://github.com/christiansicari
+- login: Brikas
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/80290187?v=4
+ url: https://github.com/Brikas
+- login: JacobHayes
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/2555532?u=354a525847a276bbb4426b0c95791a8ba5970f9b&v=4
+ url: https://github.com/JacobHayes
+- login: TaigoFr
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/17792131?u=372b27056ec82f1ae03d8b3f37ef55b04a7cfdd1&v=4
+ url: https://github.com/TaigoFr
+- login: rlimberger
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/4841242?u=6a13252caf3cedceb07b6e2775b6592445d13b70&v=4
+ url: https://github.com/rlimberger
- login: iloveitaly
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/150855?v=4
url: https://github.com/iloveitaly
-- login: msukmanowsky
+- login: iiotsrc
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/131771119?u=bcaf2559ef6266af70b151b7fda31a1ee3dbecb3&v=4
+ url: https://github.com/iiotsrc
+- login: AmirHmZz
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/38752106?u=07f80e451bda00a9492bbc764e49d24ad3ada8cc&v=4
+ url: https://github.com/AmirHmZz
+- login: PidgeyBE
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/362755?u=782e6bf5b9f0356c3f74b4d894fda9f179252086&v=4
- url: https://github.com/msukmanowsky
-- login: shurshilov
+ avatarUrl: https://avatars.githubusercontent.com/u/19860056?u=47b584eb1c1ab45e31c1b474109a962d7e82be49&v=4
+ url: https://github.com/PidgeyBE
+- login: KianAnbarestani
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/11828278?u=6bcadc5ce4f2f56a514331c9f68eb987d4afe29a&v=4
- url: https://github.com/shurshilov
+ avatarUrl: https://avatars.githubusercontent.com/u/145364424?u=dcc3d8fb4ca07d36fb52a17f38b6650565de40be&v=4
+ url: https://github.com/KianAnbarestani
+- login: Ykaiqx
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/56395004?u=1eebf5ce25a8067f7bfa6251a24f667be492d9d6&v=4
+ url: https://github.com/Ykaiqx
+- login: AliYmn
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/18416653?u=a77e2605e3ce6aaf6fef8ad4a7b0d32954fba47a&v=4
+ url: https://github.com/AliYmn
+- login: dolfinus
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/4661021?u=ed5ddadcf36d9b943ebe61febe0b96ee34e5425d&v=4
+ url: https://github.com/dolfinus
+- login: gelezo43
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/40732698?u=611f39d3c1d2f4207a590937a78c1f10eed6232c&v=4
+ url: https://github.com/gelezo43
diff --git a/docs/en/data/sponsors.yml b/docs/en/data/sponsors.yml
index 5cbf05f9d..784fd6692 100644
--- a/docs/en/data/sponsors.yml
+++ b/docs/en/data/sponsors.yml
@@ -5,26 +5,14 @@ gold:
- url: https://platform.sh/try-it-now/?utm_source=fastapi-signup&utm_medium=banner&utm_campaign=FastAPI-signup-June-2023
title: "Build, run and scale your apps on a modern, reliable, and secure PaaS."
img: https://fastapi.tiangolo.com/img/sponsors/platform-sh.png
- - url: https://www.porter.run
- title: Deploy FastAPI on AWS with a few clicks
- img: https://fastapi.tiangolo.com/img/sponsors/porter.png
- - url: https://bump.sh/fastapi?utm_source=fastapi&utm_medium=referral&utm_campaign=sponsor
- title: Automate FastAPI documentation generation with Bump.sh
- img: https://fastapi.tiangolo.com/img/sponsors/bump-sh.svg
- url: https://github.com/scalar/scalar/?utm_source=fastapi&utm_medium=website&utm_campaign=main-badge
title: "Scalar: Beautiful Open-Source API References from Swagger/OpenAPI files"
img: https://fastapi.tiangolo.com/img/sponsors/scalar.svg
- url: https://www.propelauth.com/?utm_source=fastapi&utm_campaign=1223&utm_medium=mainbadge
title: Auth, user management and more for your B2B product
img: https://fastapi.tiangolo.com/img/sponsors/propelauth.png
- - url: https://www.withcoherence.com/?utm_medium=advertising&utm_source=fastapi&utm_campaign=website
- title: Coherence
- img: https://fastapi.tiangolo.com/img/sponsors/coherence.png
- - url: https://www.mongodb.com/developer/languages/python/python-quickstart-fastapi/?utm_campaign=fastapi_framework&utm_source=fastapi_sponsorship&utm_medium=web_referral
- title: Simplify Full Stack Development with FastAPI & MongoDB
- img: https://fastapi.tiangolo.com/img/sponsors/mongodb.png
- url: https://zuplo.link/fastapi-gh
- title: 'Zuplo: Scale, Protect, Document, and Monetize your FastAPI'
+ title: 'Zuplo: Deploy, Secure, Document, and Monetize your FastAPI'
img: https://fastapi.tiangolo.com/img/sponsors/zuplo.png
- url: https://liblab.com?utm_source=fastapi
title: liblab - Generate SDKs from FastAPI
@@ -35,14 +23,17 @@ gold:
- url: https://www.coderabbit.ai/?utm_source=fastapi&utm_medium=badge&utm_campaign=fastapi
title: Cut Code Review Time & Bugs in Half with CodeRabbit
img: https://fastapi.tiangolo.com/img/sponsors/coderabbit.png
+ - url: https://subtotal.com/?utm_source=fastapi&utm_medium=sponsorship&utm_campaign=open-source
+ title: The Gold Standard in Retail Account Linking
+ img: https://fastapi.tiangolo.com/img/sponsors/subtotal.svg
+ - url: https://vibe.mobb.ai/?utm_source=Fast+APi&utm_medium=Image&utm_campaign=MVS
+ title: Secure Your AI-Generated Code to Unlock Dev Productivity
+ img: https://fastapi.tiangolo.com/img/sponsors/mobbai.png
silver:
- - url: https://github.com/deepset-ai/haystack/
- title: Build powerful search from composable, open source building blocks
- img: https://fastapi.tiangolo.com/img/sponsors/haystack-fastapi.svg
- url: https://databento.com/
title: Pay as you go for market data
img: https://fastapi.tiangolo.com/img/sponsors/databento.svg
- - url: https://speakeasy.com?utm_source=fastapi+repo&utm_medium=github+sponsorship
+ - url: https://speakeasy.com/editor?utm_source=fastapi+repo&utm_medium=github+sponsorship
title: SDKs for your API | Speakeasy
img: https://fastapi.tiangolo.com/img/sponsors/speakeasy.png
- url: https://www.svix.com/
@@ -54,6 +45,12 @@ silver:
- url: https://www.permit.io/blog/implement-authorization-in-fastapi?utm_source=github&utm_medium=referral&utm_campaign=fastapi
title: Fine-Grained Authorization for FastAPI
img: https://fastapi.tiangolo.com/img/sponsors/permit.png
+ - url: https://www.interviewpal.com/?utm_source=fastapi&utm_medium=open-source&utm_campaign=dev-hiring
+ title: InterviewPal - AI Interview Coach for Engineers and Devs
+ img: https://fastapi.tiangolo.com/img/sponsors/interviewpal.png
+ - url: https://dribia.com/en/
+ title: Dribia - Data Science within your reach
+ img: https://fastapi.tiangolo.com/img/sponsors/dribia.png
bronze:
- url: https://www.exoflare.com/open-source/?utm_source=FastAPI&utm_campaign=open_source
title: Biosecurity risk assessments made easy.
diff --git a/docs/en/data/sponsors_badge.yml b/docs/en/data/sponsors_badge.yml
index d507a500f..a8895c8ed 100644
--- a/docs/en/data/sponsors_badge.yml
+++ b/docs/en/data/sponsors_badge.yml
@@ -38,3 +38,9 @@ logins:
- render-sponsorships
- renderinc
- stainless-api
+ - snapit-cypher
+ - coderabbitai
+ - permitio
+ - LambdaTest-Inc
+ - dribia
+ - madisonredtfeldt
diff --git a/docs/en/data/topic_repos.yml b/docs/en/data/topic_repos.yml
index 633b0aee3..ab9f21995 100644
--- a/docs/en/data/topic_repos.yml
+++ b/docs/en/data/topic_repos.yml
@@ -1,495 +1,495 @@
- name: full-stack-fastapi-template
html_url: https://github.com/fastapi/full-stack-fastapi-template
- stars: 30645
+ stars: 34156
owner_login: fastapi
owner_html_url: https://github.com/fastapi
- name: Hello-Python
html_url: https://github.com/mouredev/Hello-Python
- stars: 28690
+ stars: 30835
owner_login: mouredev
owner_html_url: https://github.com/mouredev
- name: serve
html_url: https://github.com/jina-ai/serve
- stars: 21356
+ stars: 21631
owner_login: jina-ai
owner_html_url: https://github.com/jina-ai
-- name: sqlmodel
- html_url: https://github.com/fastapi/sqlmodel
- stars: 15312
- owner_login: fastapi
- owner_html_url: https://github.com/fastapi
- name: HivisionIDPhotos
html_url: https://github.com/Zeyi-Lin/HivisionIDPhotos
- stars: 14957
+ stars: 18125
owner_login: Zeyi-Lin
owner_html_url: https://github.com/Zeyi-Lin
+- name: sqlmodel
+ html_url: https://github.com/fastapi/sqlmodel
+ stars: 16249
+ owner_login: fastapi
+ owner_html_url: https://github.com/fastapi
- name: Douyin_TikTok_Download_API
html_url: https://github.com/Evil0ctal/Douyin_TikTok_Download_API
- stars: 11192
+ stars: 13279
owner_login: Evil0ctal
owner_html_url: https://github.com/Evil0ctal
- name: fastapi-best-practices
html_url: https://github.com/zhanymkanov/fastapi-best-practices
- stars: 10501
+ stars: 12334
owner_login: zhanymkanov
owner_html_url: https://github.com/zhanymkanov
- name: awesome-fastapi
html_url: https://github.com/mjhea0/awesome-fastapi
- stars: 9193
+ stars: 9934
owner_login: mjhea0
owner_html_url: https://github.com/mjhea0
- name: FastUI
html_url: https://github.com/pydantic/FastUI
- stars: 8721
+ stars: 8838
owner_login: pydantic
owner_html_url: https://github.com/pydantic
+- name: XHS-Downloader
+ html_url: https://github.com/JoeanAmier/XHS-Downloader
+ stars: 7962
+ owner_login: JoeanAmier
+ owner_html_url: https://github.com/JoeanAmier
- name: nonebot2
html_url: https://github.com/nonebot/nonebot2
- stars: 6433
+ stars: 6834
owner_login: nonebot
owner_html_url: https://github.com/nonebot
-- name: serge
- html_url: https://github.com/serge-chat/serge
- stars: 5699
- owner_login: serge-chat
- owner_html_url: https://github.com/serge-chat
- name: FileCodeBox
html_url: https://github.com/vastsa/FileCodeBox
- stars: 5534
+ stars: 6783
owner_login: vastsa
owner_html_url: https://github.com/vastsa
-- name: fastapi-users
- html_url: https://github.com/fastapi-users/fastapi-users
- stars: 4921
- owner_login: fastapi-users
- owner_html_url: https://github.com/fastapi-users
-- name: polar
- html_url: https://github.com/polarsource/polar
- stars: 4598
- owner_login: polarsource
- owner_html_url: https://github.com/polarsource
+- name: fastapi_mcp
+ html_url: https://github.com/tadata-org/fastapi_mcp
+ stars: 5846
+ owner_login: tadata-org
+ owner_html_url: https://github.com/tadata-org
- name: hatchet
html_url: https://github.com/hatchet-dev/hatchet
- stars: 4585
+ stars: 5773
owner_login: hatchet-dev
owner_html_url: https://github.com/hatchet-dev
-- name: chatgpt-web-share
- html_url: https://github.com/chatpire/chatgpt-web-share
- stars: 4318
- owner_login: chatpire
- owner_html_url: https://github.com/chatpire
+- name: serge
+ html_url: https://github.com/serge-chat/serge
+ stars: 5728
+ owner_login: serge-chat
+ owner_html_url: https://github.com/serge-chat
+- name: polar
+ html_url: https://github.com/polarsource/polar
+ stars: 5709
+ owner_login: polarsource
+ owner_html_url: https://github.com/polarsource
+- name: fastapi-users
+ html_url: https://github.com/fastapi-users/fastapi-users
+ stars: 5336
+ owner_login: fastapi-users
+ owner_html_url: https://github.com/fastapi-users
- name: strawberry
html_url: https://github.com/strawberry-graphql/strawberry
- stars: 4180
+ stars: 4317
owner_login: strawberry-graphql
owner_html_url: https://github.com/strawberry-graphql
+- name: chatgpt-web-share
+ html_url: https://github.com/chatpire/chatgpt-web-share
+ stars: 4301
+ owner_login: chatpire
+ owner_html_url: https://github.com/chatpire
- name: atrilabs-engine
html_url: https://github.com/Atri-Labs/atrilabs-engine
- stars: 4114
+ stars: 4106
owner_login: Atri-Labs
owner_html_url: https://github.com/Atri-Labs
- name: dynaconf
html_url: https://github.com/dynaconf/dynaconf
- stars: 3904
+ stars: 4045
owner_login: dynaconf
owner_html_url: https://github.com/dynaconf
- name: poem
html_url: https://github.com/poem-web/poem
- stars: 3781
+ stars: 4037
owner_login: poem-web
owner_html_url: https://github.com/poem-web
- name: farfalle
html_url: https://github.com/rashadphz/farfalle
- stars: 3190
+ stars: 3348
owner_login: rashadphz
owner_html_url: https://github.com/rashadphz
-- name: opyrator
- html_url: https://github.com/ml-tooling/opyrator
- stars: 3119
- owner_login: ml-tooling
- owner_html_url: https://github.com/ml-tooling
+- name: LitServe
+ html_url: https://github.com/Lightning-AI/LitServe
+ stars: 3347
+ owner_login: Lightning-AI
+ owner_html_url: https://github.com/Lightning-AI
- name: fastapi-admin
html_url: https://github.com/fastapi-admin/fastapi-admin
- stars: 3086
+ stars: 3309
owner_login: fastapi-admin
owner_html_url: https://github.com/fastapi-admin
-- name: docarray
- html_url: https://github.com/docarray/docarray
- stars: 3021
- owner_login: docarray
- owner_html_url: https://github.com/docarray
- name: datamodel-code-generator
html_url: https://github.com/koxudaxi/datamodel-code-generator
- stars: 2988
+ stars: 3291
owner_login: koxudaxi
owner_html_url: https://github.com/koxudaxi
-- name: LitServe
- html_url: https://github.com/Lightning-AI/LitServe
- stars: 2863
- owner_login: Lightning-AI
- owner_html_url: https://github.com/Lightning-AI
-- name: fastapi-realworld-example-app
- html_url: https://github.com/nsidnev/fastapi-realworld-example-app
- stars: 2850
- owner_login: nsidnev
- owner_html_url: https://github.com/nsidnev
- name: logfire
html_url: https://github.com/pydantic/logfire
- stars: 2757
+ stars: 3288
owner_login: pydantic
owner_html_url: https://github.com/pydantic
-- name: uvicorn-gunicorn-fastapi-docker
- html_url: https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker
- stars: 2731
- owner_login: tiangolo
- owner_html_url: https://github.com/tiangolo
- name: huma
html_url: https://github.com/danielgtaylor/huma
- stars: 2700
+ stars: 3201
owner_login: danielgtaylor
owner_html_url: https://github.com/danielgtaylor
+- name: opyrator
+ html_url: https://github.com/ml-tooling/opyrator
+ stars: 3132
+ owner_login: ml-tooling
+ owner_html_url: https://github.com/ml-tooling
+- name: Kokoro-FastAPI
+ html_url: https://github.com/remsky/Kokoro-FastAPI
+ stars: 3099
+ owner_login: remsky
+ owner_html_url: https://github.com/remsky
+- name: docarray
+ html_url: https://github.com/docarray/docarray
+ stars: 3075
+ owner_login: docarray
+ owner_html_url: https://github.com/docarray
+- name: fastapi-realworld-example-app
+ html_url: https://github.com/nsidnev/fastapi-realworld-example-app
+ stars: 2902
+ owner_login: nsidnev
+ owner_html_url: https://github.com/nsidnev
- name: tracecat
html_url: https://github.com/TracecatHQ/tracecat
- stars: 2539
+ stars: 2888
owner_login: TracecatHQ
owner_html_url: https://github.com/TracecatHQ
+- name: uvicorn-gunicorn-fastapi-docker
+ html_url: https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker
+ stars: 2775
+ owner_login: tiangolo
+ owner_html_url: https://github.com/tiangolo
- name: best-of-web-python
html_url: https://github.com/ml-tooling/best-of-web-python
- stars: 2460
+ stars: 2537
owner_login: ml-tooling
owner_html_url: https://github.com/ml-tooling
- name: RasaGPT
html_url: https://github.com/paulpierre/RasaGPT
- stars: 2401
+ stars: 2427
owner_login: paulpierre
owner_html_url: https://github.com/paulpierre
- name: fastapi-react
html_url: https://github.com/Buuntu/fastapi-react
- stars: 2315
+ stars: 2397
owner_login: Buuntu
owner_html_url: https://github.com/Buuntu
-- name: nextpy
- html_url: https://github.com/dot-agent/nextpy
- stars: 2266
- owner_login: dot-agent
- owner_html_url: https://github.com/dot-agent
-- name: 30-Days-of-Python
- html_url: https://github.com/codingforentrepreneurs/30-Days-of-Python
- stars: 2163
- owner_login: codingforentrepreneurs
- owner_html_url: https://github.com/codingforentrepreneurs
- name: FastAPI-template
html_url: https://github.com/s3rius/FastAPI-template
- stars: 2156
+ stars: 2334
owner_login: s3rius
owner_html_url: https://github.com/s3rius
+- name: nextpy
+ html_url: https://github.com/dot-agent/nextpy
+ stars: 2295
+ owner_login: dot-agent
+ owner_html_url: https://github.com/dot-agent
- name: sqladmin
html_url: https://github.com/aminalaee/sqladmin
- stars: 2051
+ stars: 2235
owner_login: aminalaee
owner_html_url: https://github.com/aminalaee
+- name: 30-Days-of-Python
+ html_url: https://github.com/codingforentrepreneurs/30-Days-of-Python
+ stars: 2181
+ owner_login: codingforentrepreneurs
+ owner_html_url: https://github.com/codingforentrepreneurs
- name: langserve
html_url: https://github.com/langchain-ai/langserve
- stars: 2025
+ stars: 2119
owner_login: langchain-ai
owner_html_url: https://github.com/langchain-ai
- name: fastapi-utils
html_url: https://github.com/fastapiutils/fastapi-utils
- stars: 2021
+ stars: 2100
owner_login: fastapiutils
owner_html_url: https://github.com/fastapiutils
-- name: solara
- html_url: https://github.com/widgetti/solara
- stars: 1980
- owner_login: widgetti
- owner_html_url: https://github.com/widgetti
- name: supabase-py
html_url: https://github.com/supabase/supabase-py
- stars: 1874
+ stars: 2084
owner_login: supabase
owner_html_url: https://github.com/supabase
-- name: python-week-2022
- html_url: https://github.com/rochacbruno/python-week-2022
- stars: 1829
- owner_login: rochacbruno
- owner_html_url: https://github.com/rochacbruno
+- name: solara
+ html_url: https://github.com/widgetti/solara
+ stars: 2056
+ owner_login: widgetti
+ owner_html_url: https://github.com/widgetti
- name: mangum
html_url: https://github.com/Kludex/mangum
- stars: 1820
+ stars: 1923
owner_login: Kludex
owner_html_url: https://github.com/Kludex
-- name: Kokoro-FastAPI
- html_url: https://github.com/remsky/Kokoro-FastAPI
- stars: 1771
- owner_login: remsky
- owner_html_url: https://github.com/remsky
+- name: python-week-2022
+ html_url: https://github.com/rochacbruno/python-week-2022
+ stars: 1821
+ owner_login: rochacbruno
+ owner_html_url: https://github.com/rochacbruno
+- name: agentkit
+ html_url: https://github.com/BCG-X-Official/agentkit
+ stars: 1765
+ owner_login: BCG-X-Official
+ owner_html_url: https://github.com/BCG-X-Official
- name: manage-fastapi
html_url: https://github.com/ycd/manage-fastapi
- stars: 1719
+ stars: 1756
owner_login: ycd
owner_html_url: https://github.com/ycd
- name: ormar
html_url: https://github.com/collerek/ormar
- stars: 1710
+ stars: 1755
owner_login: collerek
owner_html_url: https://github.com/collerek
-- name: agentkit
- html_url: https://github.com/BCG-X-Official/agentkit
- stars: 1658
- owner_login: BCG-X-Official
- owner_html_url: https://github.com/BCG-X-Official
- name: langchain-serve
html_url: https://github.com/jina-ai/langchain-serve
- stars: 1618
+ stars: 1631
owner_login: jina-ai
owner_html_url: https://github.com/jina-ai
-- name: termpair
- html_url: https://github.com/cs01/termpair
- stars: 1611
- owner_login: cs01
- owner_html_url: https://github.com/cs01
-- name: coronavirus-tracker-api
- html_url: https://github.com/ExpDev07/coronavirus-tracker-api
- stars: 1588
- owner_login: ExpDev07
- owner_html_url: https://github.com/ExpDev07
- name: piccolo
html_url: https://github.com/piccolo-orm/piccolo
- stars: 1546
+ stars: 1629
owner_login: piccolo-orm
owner_html_url: https://github.com/piccolo-orm
-- name: fastapi-cache
- html_url: https://github.com/long2ice/fastapi-cache
- stars: 1478
- owner_login: long2ice
- owner_html_url: https://github.com/long2ice
+- name: termpair
+ html_url: https://github.com/cs01/termpair
+ stars: 1616
+ owner_login: cs01
+ owner_html_url: https://github.com/cs01
- name: openapi-python-client
html_url: https://github.com/openapi-generators/openapi-python-client
- stars: 1467
+ stars: 1603
owner_login: openapi-generators
owner_html_url: https://github.com/openapi-generators
+- name: fastapi-cache
+ html_url: https://github.com/long2ice/fastapi-cache
+ stars: 1589
+ owner_login: long2ice
+ owner_html_url: https://github.com/long2ice
+- name: coronavirus-tracker-api
+ html_url: https://github.com/ExpDev07/coronavirus-tracker-api
+ stars: 1580
+ owner_login: ExpDev07
+ owner_html_url: https://github.com/ExpDev07
+- name: slowapi
+ html_url: https://github.com/laurentS/slowapi
+ stars: 1533
+ owner_login: laurentS
+ owner_html_url: https://github.com/laurentS
- name: fastapi-crudrouter
html_url: https://github.com/awtkns/fastapi-crudrouter
- stars: 1462
+ stars: 1518
owner_login: awtkns
owner_html_url: https://github.com/awtkns
- name: awesome-fastapi-projects
html_url: https://github.com/Kludex/awesome-fastapi-projects
- stars: 1418
+ stars: 1461
owner_login: Kludex
owner_html_url: https://github.com/Kludex
+- name: vue-fastapi-admin
+ html_url: https://github.com/mizhexiaoxiao/vue-fastapi-admin
+ stars: 1409
+ owner_login: mizhexiaoxiao
+ owner_html_url: https://github.com/mizhexiaoxiao
- name: awesome-python-resources
html_url: https://github.com/DjangoEx/awesome-python-resources
- stars: 1383
+ stars: 1393
owner_login: DjangoEx
owner_html_url: https://github.com/DjangoEx
-- name: slowapi
- html_url: https://github.com/laurentS/slowapi
- stars: 1363
- owner_login: laurentS
- owner_html_url: https://github.com/laurentS
-- name: budgetml
- html_url: https://github.com/ebhy/budgetml
- stars: 1344
- owner_login: ebhy
- owner_html_url: https://github.com/ebhy
- name: fastapi-pagination
html_url: https://github.com/uriyyo/fastapi-pagination
- stars: 1284
+ stars: 1378
owner_login: uriyyo
owner_html_url: https://github.com/uriyyo
- name: fastapi-boilerplate
html_url: https://github.com/teamhide/fastapi-boilerplate
- stars: 1234
+ stars: 1348
owner_login: teamhide
owner_html_url: https://github.com/teamhide
-- name: fastapi-tutorial
- html_url: https://github.com/liaogx/fastapi-tutorial
- stars: 1181
- owner_login: liaogx
- owner_html_url: https://github.com/liaogx
+- name: budgetml
+ html_url: https://github.com/ebhy/budgetml
+ stars: 1344
+ owner_login: ebhy
+ owner_html_url: https://github.com/ebhy
- name: fastapi-amis-admin
html_url: https://github.com/amisadmin/fastapi-amis-admin
- stars: 1164
+ stars: 1284
owner_login: amisadmin
owner_html_url: https://github.com/amisadmin
+- name: bracket
+ html_url: https://github.com/evroon/bracket
+ stars: 1274
+ owner_login: evroon
+ owner_html_url: https://github.com/evroon
+- name: fastapi-tutorial
+ html_url: https://github.com/liaogx/fastapi-tutorial
+ stars: 1265
+ owner_login: liaogx
+ owner_html_url: https://github.com/liaogx
- name: fastapi-code-generator
html_url: https://github.com/koxudaxi/fastapi-code-generator
- stars: 1132
+ stars: 1216
owner_login: koxudaxi
owner_html_url: https://github.com/koxudaxi
- name: bolt-python
html_url: https://github.com/slackapi/bolt-python
- stars: 1130
+ stars: 1190
owner_login: slackapi
owner_html_url: https://github.com/slackapi
+- name: fastcrud
+ html_url: https://github.com/benavlabs/fastcrud
+ stars: 1169
+ owner_login: benavlabs
+ owner_html_url: https://github.com/benavlabs
+- name: prometheus-fastapi-instrumentator
+ html_url: https://github.com/trallnag/prometheus-fastapi-instrumentator
+ stars: 1167
+ owner_login: trallnag
+ owner_html_url: https://github.com/trallnag
+- name: fastapi_production_template
+ html_url: https://github.com/zhanymkanov/fastapi_production_template
+ stars: 1165
+ owner_login: zhanymkanov
+ owner_html_url: https://github.com/zhanymkanov
+- name: bedrock-chat
+ html_url: https://github.com/aws-samples/bedrock-chat
+ stars: 1163
+ owner_login: aws-samples
+ owner_html_url: https://github.com/aws-samples
- name: langchain-extract
html_url: https://github.com/langchain-ai/langchain-extract
- stars: 1110
+ stars: 1142
owner_login: langchain-ai
owner_html_url: https://github.com/langchain-ai
- name: odmantic
html_url: https://github.com/art049/odmantic
- stars: 1104
+ stars: 1121
owner_login: art049
owner_html_url: https://github.com/art049
-- name: fastapi_production_template
- html_url: https://github.com/zhanymkanov/fastapi_production_template
- stars: 1093
- owner_login: zhanymkanov
- owner_html_url: https://github.com/zhanymkanov
-- name: SurfSense
- html_url: https://github.com/MODSetter/SurfSense
- stars: 1081
- owner_login: MODSetter
- owner_html_url: https://github.com/MODSetter
+- name: fastapi_best_architecture
+ html_url: https://github.com/fastapi-practices/fastapi_best_architecture
+ stars: 1118
+ owner_login: fastapi-practices
+ owner_html_url: https://github.com/fastapi-practices
- name: fastapi-alembic-sqlmodel-async
html_url: https://github.com/jonra1993/fastapi-alembic-sqlmodel-async
- stars: 1063
+ stars: 1116
owner_login: jonra1993
owner_html_url: https://github.com/jonra1993
-- name: prometheus-fastapi-instrumentator
- html_url: https://github.com/trallnag/prometheus-fastapi-instrumentator
- stars: 1059
- owner_login: trallnag
- owner_html_url: https://github.com/trallnag
-- name: bedrock-claude-chat
- html_url: https://github.com/aws-samples/bedrock-claude-chat
- stars: 1039
- owner_login: aws-samples
- owner_html_url: https://github.com/aws-samples
+- name: FastAPI-boilerplate
+ html_url: https://github.com/benavlabs/FastAPI-boilerplate
+ stars: 1070
+ owner_login: benavlabs
+ owner_html_url: https://github.com/benavlabs
+- name: restish
+ html_url: https://github.com/rest-sh/restish
+ stars: 1069
+ owner_login: rest-sh
+ owner_html_url: https://github.com/rest-sh
- name: runhouse
html_url: https://github.com/run-house/runhouse
- stars: 1005
+ stars: 1037
owner_login: run-house
owner_html_url: https://github.com/run-house
-- name: vue-fastapi-admin
- html_url: https://github.com/mizhexiaoxiao/vue-fastapi-admin
- stars: 987
- owner_login: mizhexiaoxiao
- owner_html_url: https://github.com/mizhexiaoxiao
-- name: lanarky
- html_url: https://github.com/ajndkr/lanarky
- stars: 986
- owner_login: ajndkr
- owner_html_url: https://github.com/ajndkr
- name: autollm
html_url: https://github.com/viddexa/autollm
- stars: 986
+ stars: 994
owner_login: viddexa
owner_html_url: https://github.com/viddexa
-- name: restish
- html_url: https://github.com/danielgtaylor/restish
- stars: 984
- owner_login: danielgtaylor
- owner_html_url: https://github.com/danielgtaylor
-- name: fastcrud
- html_url: https://github.com/igorbenav/fastcrud
- stars: 964
- owner_login: igorbenav
- owner_html_url: https://github.com/igorbenav
+- name: lanarky
+ html_url: https://github.com/ajndkr/lanarky
+ stars: 992
+ owner_login: ajndkr
+ owner_html_url: https://github.com/ajndkr
+- name: authx
+ html_url: https://github.com/yezz123/authx
+ stars: 953
+ owner_login: yezz123
+ owner_html_url: https://github.com/yezz123
- name: secure
html_url: https://github.com/TypeError/secure
- stars: 928
+ stars: 941
owner_login: TypeError
owner_html_url: https://github.com/TypeError
-- name: langcorn
- html_url: https://github.com/msoedov/langcorn
- stars: 916
- owner_login: msoedov
- owner_html_url: https://github.com/msoedov
- name: energy-forecasting
html_url: https://github.com/iusztinpaul/energy-forecasting
- stars: 898
+ stars: 928
owner_login: iusztinpaul
owner_html_url: https://github.com/iusztinpaul
-- name: authx
- html_url: https://github.com/yezz123/authx
- stars: 874
- owner_login: yezz123
- owner_html_url: https://github.com/yezz123
+- name: langcorn
+ html_url: https://github.com/msoedov/langcorn
+ stars: 927
+ owner_login: msoedov
+ owner_html_url: https://github.com/msoedov
- name: titiler
html_url: https://github.com/developmentseed/titiler
- stars: 841
+ stars: 901
owner_login: developmentseed
owner_html_url: https://github.com/developmentseed
-- name: FastAPI-boilerplate
- html_url: https://github.com/igorbenav/FastAPI-boilerplate
- stars: 820
- owner_login: igorbenav
- owner_html_url: https://github.com/igorbenav
+- name: flock
+ html_url: https://github.com/Onelevenvy/flock
+ stars: 896
+ owner_login: Onelevenvy
+ owner_html_url: https://github.com/Onelevenvy
+- name: fastapi-langgraph-agent-production-ready-template
+ html_url: https://github.com/wassim249/fastapi-langgraph-agent-production-ready-template
+ stars: 896
+ owner_login: wassim249
+ owner_html_url: https://github.com/wassim249
- name: marker-api
html_url: https://github.com/adithya-s-k/marker-api
- stars: 813
+ stars: 875
owner_login: adithya-s-k
owner_html_url: https://github.com/adithya-s-k
-- name: fastapi_best_architecture
- html_url: https://github.com/fastapi-practices/fastapi_best_architecture
- stars: 802
- owner_login: fastapi-practices
- owner_html_url: https://github.com/fastapi-practices
+- name: httpdbg
+ html_url: https://github.com/cle-b/httpdbg
+ stars: 870
+ owner_login: cle-b
+ owner_html_url: https://github.com/cle-b
- name: fastapi-do-zero
html_url: https://github.com/dunossauro/fastapi-do-zero
- stars: 745
+ stars: 855
owner_login: dunossauro
owner_html_url: https://github.com/dunossauro
-- name: fastapi-mail
- html_url: https://github.com/sabuhish/fastapi-mail
- stars: 744
- owner_login: sabuhish
- owner_html_url: https://github.com/sabuhish
+- name: ludic
+ html_url: https://github.com/getludic/ludic
+ stars: 849
+ owner_login: getludic
+ owner_html_url: https://github.com/getludic
- name: fastapi-observability
html_url: https://github.com/blueswen/fastapi-observability
- stars: 743
+ stars: 837
owner_login: blueswen
owner_html_url: https://github.com/blueswen
-- name: lccn_predictor
- html_url: https://github.com/baoliay2008/lccn_predictor
- stars: 741
- owner_login: baoliay2008
- owner_html_url: https://github.com/baoliay2008
-- name: annotated-py-projects
- html_url: https://github.com/hhstore/annotated-py-projects
- stars: 727
- owner_login: hhstore
- owner_html_url: https://github.com/hhstore
-- name: learn-generative-ai
- html_url: https://github.com/panaverse/learn-generative-ai
- stars: 714
- owner_login: panaverse
- owner_html_url: https://github.com/panaverse
+- name: fastapi-scaf
+ html_url: https://github.com/atpuxiner/fastapi-scaf
+ stars: 821
+ owner_login: atpuxiner
+ owner_html_url: https://github.com/atpuxiner
- name: starlette-admin
html_url: https://github.com/jowilf/starlette-admin
- stars: 713
+ stars: 808
owner_login: jowilf
owner_html_url: https://github.com/jowilf
-- name: chatGPT-web
- html_url: https://github.com/mic1on/chatGPT-web
- stars: 712
- owner_login: mic1on
- owner_html_url: https://github.com/mic1on
-- name: FastAPI-Backend-Template
- html_url: https://github.com/Aeternalis-Ingenium/FastAPI-Backend-Template
- stars: 709
- owner_login: Aeternalis-Ingenium
- owner_html_url: https://github.com/Aeternalis-Ingenium
-- name: linbing
- html_url: https://github.com/taomujian/linbing
- stars: 698
- owner_login: taomujian
- owner_html_url: https://github.com/taomujian
-- name: KonomiTV
- html_url: https://github.com/tsukumijima/KonomiTV
- stars: 687
- owner_login: tsukumijima
- owner_html_url: https://github.com/tsukumijima
-- name: fastapi-jwt-auth
- html_url: https://github.com/IndominusByte/fastapi-jwt-auth
- stars: 685
- owner_login: IndominusByte
- owner_html_url: https://github.com/IndominusByte
-- name: pity
- html_url: https://github.com/wuranxu/pity
- stars: 667
- owner_login: wuranxu
- owner_html_url: https://github.com/wuranxu
+- name: fastapi-mail
+ html_url: https://github.com/sabuhish/fastapi-mail
+ stars: 807
+ owner_login: sabuhish
+ owner_html_url: https://github.com/sabuhish
+- name: aktools
+ html_url: https://github.com/akfamily/aktools
+ stars: 796
+ owner_login: akfamily
+ owner_html_url: https://github.com/akfamily
+- name: RuoYi-Vue3-FastAPI
+ html_url: https://github.com/insistence/RuoYi-Vue3-FastAPI
+ stars: 782
+ owner_login: insistence
+ owner_html_url: https://github.com/insistence
diff --git a/docs/en/data/translation_reviewers.yml b/docs/en/data/translation_reviewers.yml
index 1a3c12988..4f3c95b27 100644
--- a/docs/en/data/translation_reviewers.yml
+++ b/docs/en/data/translation_reviewers.yml
@@ -8,16 +8,16 @@ Xewus:
count: 140
avatarUrl: https://avatars.githubusercontent.com/u/85196001?u=f8e2dc7e5104f109cef944af79050ea8d1b8f914&v=4
url: https://github.com/Xewus
+sodaMelon:
+ login: sodaMelon
+ count: 126
+ avatarUrl: https://avatars.githubusercontent.com/u/66295123?u=be939db90f1119efee9e6110cc05066ff1f40f00&v=4
+ url: https://github.com/sodaMelon
ceb10n:
login: ceb10n
count: 112
avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4
url: https://github.com/ceb10n
-sodaMelon:
- login: sodaMelon
- count: 111
- avatarUrl: https://avatars.githubusercontent.com/u/66295123?u=be939db90f1119efee9e6110cc05066ff1f40f00&v=4
- url: https://github.com/sodaMelon
tokusumi:
login: tokusumi
count: 104
@@ -30,9 +30,14 @@ hasansezertasan:
url: https://github.com/hasansezertasan
hard-coders:
login: hard-coders
- count: 92
+ count: 93
avatarUrl: https://avatars.githubusercontent.com/u/9651103?u=95db33927bbff1ed1c07efddeb97ac2ff33068ed&v=4
url: https://github.com/hard-coders
+alv2017:
+ login: alv2017
+ count: 88
+ avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
+ url: https://github.com/alv2017
nazarepiedady:
login: nazarepiedady
count: 83
@@ -43,11 +48,6 @@ AlertRED:
count: 81
avatarUrl: https://avatars.githubusercontent.com/u/15695000?u=f5a4944c6df443030409c88da7d7fa0b7ead985c&v=4
url: https://github.com/AlertRED
-alv2017:
- login: alv2017
- count: 81
- avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
- url: https://github.com/alv2017
Alexandrhub:
login: Alexandrhub
count: 68
@@ -65,12 +65,12 @@ cassiobotaro:
url: https://github.com/cassiobotaro
mattwang44:
login: mattwang44
- count: 58
+ count: 59
avatarUrl: https://avatars.githubusercontent.com/u/24987826?u=58e37fb3927b9124b458945ac4c97aa0f1062d85&v=4
url: https://github.com/mattwang44
tiangolo:
login: tiangolo
- count: 51
+ count: 53
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo
Laineyzhang55:
@@ -88,16 +88,26 @@ komtaki:
count: 45
avatarUrl: https://avatars.githubusercontent.com/u/39375566?u=260ad6b1a4b34c07dbfa728da5e586f16f6d1824&v=4
url: https://github.com/komtaki
+rostik1410:
+ login: rostik1410
+ count: 42
+ avatarUrl: https://avatars.githubusercontent.com/u/11443899?u=e26a635c2ba220467b308a326a579b8ccf4a8701&v=4
+ url: https://github.com/rostik1410
+svlandeg:
+ login: svlandeg
+ count: 42
+ avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
+ url: https://github.com/svlandeg
alperiox:
login: alperiox
count: 42
avatarUrl: https://avatars.githubusercontent.com/u/34214152?u=2c5acad3461d4dbc2d48371ba86cac56ae9b25cc&v=4
url: https://github.com/alperiox
-rostik1410:
- login: rostik1410
- count: 41
- avatarUrl: https://avatars.githubusercontent.com/u/11443899?u=e26a635c2ba220467b308a326a579b8ccf4a8701&v=4
- url: https://github.com/rostik1410
+Rishat-F:
+ login: Rishat-F
+ count: 42
+ avatarUrl: https://avatars.githubusercontent.com/u/66554797?v=4
+ url: https://github.com/Rishat-F
Winand:
login: Winand
count: 40
@@ -126,7 +136,7 @@ SwftAlpc:
alejsdev:
login: alejsdev
count: 36
- avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=356f39ff3f0211c720b06d3dbb060e98884085e3&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=638c65283ac9e9e2c3a0f9d1e3370db4b8a2c58d&v=4
url: https://github.com/alejsdev
timothy-jeong:
login: timothy-jeong
@@ -138,16 +148,11 @@ nilslindemann:
count: 35
avatarUrl: https://avatars.githubusercontent.com/u/6892179?u=1dca6a22195d6cd1ab20737c0e19a4c55d639472&v=4
url: https://github.com/nilslindemann
-svlandeg:
- login: svlandeg
- count: 35
- avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
- url: https://github.com/svlandeg
-Rishat-F:
- login: Rishat-F
+mezgoodle:
+ login: mezgoodle
count: 35
- avatarUrl: https://avatars.githubusercontent.com/u/66554797?v=4
- url: https://github.com/Rishat-F
+ avatarUrl: https://avatars.githubusercontent.com/u/41520940?u=4a9c765af688389d54296845d18b8f6cd6ddf09a&v=4
+ url: https://github.com/mezgoodle
rjNemo:
login: rjNemo
count: 34
@@ -168,16 +173,16 @@ romashevchenko:
count: 32
avatarUrl: https://avatars.githubusercontent.com/u/132477732?v=4
url: https://github.com/romashevchenko
-wdh99:
- login: wdh99
- count: 31
- avatarUrl: https://avatars.githubusercontent.com/u/108172295?u=8a8fb95d5afe3e0fa33257b2aecae88d436249eb&v=4
- url: https://github.com/wdh99
LorhanSohaky:
login: LorhanSohaky
count: 30
avatarUrl: https://avatars.githubusercontent.com/u/16273730?u=095b66f243a2cd6a0aadba9a095009f8aaf18393&v=4
url: https://github.com/LorhanSohaky
+Vincy1230:
+ login: Vincy1230
+ count: 30
+ avatarUrl: https://avatars.githubusercontent.com/u/81342412?u=ab5e256a4077a4a91f3f9cd2115ba80780454cbe&v=4
+ url: https://github.com/Vincy1230
black-redoc:
login: black-redoc
count: 29
@@ -201,7 +206,7 @@ dedkot01:
hsuanchi:
login: hsuanchi
count: 28
- avatarUrl: https://avatars.githubusercontent.com/u/24913710?u=0b094ae292292fee093818e37ceb645c114d2bff&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/24913710?u=7d25a398e478b6e63503bf6f26c54efa9e0da07b&v=4
url: https://github.com/hsuanchi
dpinezich:
login: dpinezich
@@ -228,16 +233,6 @@ junah201:
count: 26
avatarUrl: https://avatars.githubusercontent.com/u/75025529?u=2451c256e888fa2a06bcfc0646d09b87ddb6a945&v=4
url: https://github.com/junah201
-mezgoodle:
- login: mezgoodle
- count: 26
- avatarUrl: https://avatars.githubusercontent.com/u/41520940?u=e871bc26734eb2436d98c19c3fb57a4773e13c24&v=4
- url: https://github.com/mezgoodle
-Vincy1230:
- login: Vincy1230
- count: 26
- avatarUrl: https://avatars.githubusercontent.com/u/81342412?u=ab5e256a4077a4a91f3f9cd2115ba80780454cbe&v=4
- url: https://github.com/Vincy1230
zy7y:
login: zy7y
count: 25
@@ -248,11 +243,21 @@ mycaule:
count: 25
avatarUrl: https://avatars.githubusercontent.com/u/6161385?u=e3cec75bd6d938a0d73fae0dc5534d1ab2ed1b0e&v=4
url: https://github.com/mycaule
+YuriiMotov:
+ login: YuriiMotov
+ count: 24
+ avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4
+ url: https://github.com/YuriiMotov
Aruelius:
login: Aruelius
count: 24
avatarUrl: https://avatars.githubusercontent.com/u/25380989?u=574f8cfcda3ea77a3f81884f6b26a97068e36a9d&v=4
url: https://github.com/Aruelius
+wisderfin:
+ login: wisderfin
+ count: 24
+ avatarUrl: https://avatars.githubusercontent.com/u/77553770?u=9a23740d520d65dc0051cdc1ecd87f31cb900313&v=4
+ url: https://github.com/wisderfin
OzgunCaglarArslan:
login: OzgunCaglarArslan
count: 24
@@ -268,11 +273,11 @@ axel584:
count: 23
avatarUrl: https://avatars.githubusercontent.com/u/1334088?u=9667041f5b15dc002b6f9665fda8c0412933ac04&v=4
url: https://github.com/axel584
-wisderfin:
- login: wisderfin
+DianaTrufanova:
+ login: DianaTrufanova
count: 23
- avatarUrl: https://avatars.githubusercontent.com/u/77553770?u=f3b00a26736ba664e9927a1116c6e8088295e073&v=4
- url: https://github.com/wisderfin
+ avatarUrl: https://avatars.githubusercontent.com/u/119067607?u=1cd55f841b68b4a187fa6d06a7dafa5f070195aa&v=4
+ url: https://github.com/DianaTrufanova
AGolicyn:
login: AGolicyn
count: 21
@@ -328,6 +333,16 @@ ivan-abc:
count: 18
avatarUrl: https://avatars.githubusercontent.com/u/36765187?u=c6e0ba571c1ccb6db9d94e62e4b8b5eda811a870&v=4
url: https://github.com/ivan-abc
+Limsunoh:
+ login: Limsunoh
+ count: 18
+ avatarUrl: https://avatars.githubusercontent.com/u/90311848?u=f456e0c5709fd50c8cd2898b551558eda14e5f21&v=4
+ url: https://github.com/Limsunoh
+SofiiaTrufanova:
+ login: SofiiaTrufanova
+ count: 18
+ avatarUrl: https://avatars.githubusercontent.com/u/63260929?u=483e0b64fabc76343b3be39b7e1dcb930a95e1bb&v=4
+ url: https://github.com/SofiiaTrufanova
bezaca:
login: bezaca
count: 17
@@ -353,11 +368,6 @@ jeison-araya:
count: 17
avatarUrl: https://avatars.githubusercontent.com/u/57369279?u=17001e68af7d8e5b8c343e5e9df4050f419998d5&v=4
url: https://github.com/jeison-araya
-Limsunoh:
- login: Limsunoh
- count: 17
- avatarUrl: https://avatars.githubusercontent.com/u/90311848?u=f456e0c5709fd50c8cd2898b551558eda14e5f21&v=4
- url: https://github.com/Limsunoh
yanever:
login: yanever
count: 16
@@ -376,7 +386,7 @@ Joao-Pedro-P-Holanda:
JaeHyuckSa:
login: JaeHyuckSa
count: 16
- avatarUrl: https://avatars.githubusercontent.com/u/104830931?v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/104830931?u=6e352201714a05154e5d0ccf91b4715a951c622e&v=4
url: https://github.com/JaeHyuckSa
Jedore:
login: Jedore
@@ -398,11 +408,6 @@ dukkee:
count: 14
avatarUrl: https://avatars.githubusercontent.com/u/36825394?u=ccfd86e6a4f2d093dad6f7544cc875af67fa2df8&v=4
url: https://github.com/dukkee
-mkdir700:
- login: mkdir700
- count: 14
- avatarUrl: https://avatars.githubusercontent.com/u/56359329?u=3d6ea8714f5000829b60dcf7b13a75b1e73aaf47&v=4
- url: https://github.com/mkdir700
BORA040126:
login: BORA040126
count: 14
@@ -411,7 +416,7 @@ BORA040126:
mattkoehne:
login: mattkoehne
count: 14
- avatarUrl: https://avatars.githubusercontent.com/u/80362153?u=6e1439582715693407b86182eb66263bb578a761&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/80362153?v=4
url: https://github.com/mattkoehne
jovicon:
login: jovicon
@@ -453,16 +458,16 @@ oandersonmagalhaes:
count: 12
avatarUrl: https://avatars.githubusercontent.com/u/83456692?v=4
url: https://github.com/oandersonmagalhaes
+mkdir700:
+ login: mkdir700
+ count: 12
+ avatarUrl: https://avatars.githubusercontent.com/u/56359329?u=3d6ea8714f5000829b60dcf7b13a75b1e73aaf47&v=4
+ url: https://github.com/mkdir700
batlopes:
login: batlopes
count: 12
avatarUrl: https://avatars.githubusercontent.com/u/33462923?u=0fb3d7acb316764616f11e4947faf080e49ad8d9&v=4
url: https://github.com/batlopes
-Lenclove:
- login: Lenclove
- count: 12
- avatarUrl: https://avatars.githubusercontent.com/u/32355298?u=d0065e01650c63c2b2413f42d983634b2ea85481&v=4
- url: https://github.com/Lenclove
joonas-yoon:
login: joonas-yoon
count: 12
@@ -483,6 +488,11 @@ andersonrocha0:
count: 12
avatarUrl: https://avatars.githubusercontent.com/u/22346169?u=93a1359c8c5461d894802c0cc65bcd09217e7a02&v=4
url: https://github.com/andersonrocha0
+gitgernit:
+ login: gitgernit
+ count: 12
+ avatarUrl: https://avatars.githubusercontent.com/u/129539613?u=d04f10143ab32c93f563ea14bf242d1d2bc991b0&v=4
+ url: https://github.com/gitgernit
kwang1215:
login: kwang1215
count: 12
@@ -528,16 +538,16 @@ Lufa1u:
count: 11
avatarUrl: https://avatars.githubusercontent.com/u/112495876?u=087658920ed9e74311597bdd921d8d2de939d276&v=4
url: https://github.com/Lufa1u
+waketzheng:
+ login: waketzheng
+ count: 11
+ avatarUrl: https://avatars.githubusercontent.com/u/35413830?u=df19e4fd5bb928e7d086e053ef26a46aad23bf84&v=4
+ url: https://github.com/waketzheng
KNChiu:
login: KNChiu
count: 11
avatarUrl: https://avatars.githubusercontent.com/u/36751646?v=4
url: https://github.com/KNChiu
-gitgernit:
- login: gitgernit
- count: 11
- avatarUrl: https://avatars.githubusercontent.com/u/129539613?u=d04f10143ab32c93f563ea14bf242d1d2bc991b0&v=4
- url: https://github.com/gitgernit
mariacamilagl:
login: mariacamilagl
count: 10
@@ -593,16 +603,21 @@ nick-cjyx9:
count: 10
avatarUrl: https://avatars.githubusercontent.com/u/119087246?u=c35aab03f082430be8a1edd80f5625b44819a0d8&v=4
url: https://github.com/nick-cjyx9
-waketzheng:
- login: waketzheng
- count: 10
- avatarUrl: https://avatars.githubusercontent.com/u/35413830?u=df19e4fd5bb928e7d086e053ef26a46aad23bf84&v=4
- url: https://github.com/waketzheng
lucasbalieiro:
login: lucasbalieiro
count: 10
avatarUrl: https://avatars.githubusercontent.com/u/37416577?u=eabaf4aebbaa88a94a4886273edba689012cee70&v=4
url: https://github.com/lucasbalieiro
+maru0123-2004:
+ login: maru0123-2004
+ count: 10
+ avatarUrl: https://avatars.githubusercontent.com/u/43961566?u=16ed8603a4d6a4665cb6c53a7aece6f31379b769&v=4
+ url: https://github.com/maru0123-2004
+Zhongheng-Cheng:
+ login: Zhongheng-Cheng
+ count: 10
+ avatarUrl: https://avatars.githubusercontent.com/u/95612344?u=a0f7730a3cc7486827965e01a119ad610bda4b0a&v=4
+ url: https://github.com/Zhongheng-Cheng
RunningIkkyu:
login: RunningIkkyu
count: 9
@@ -616,18 +631,18 @@ JulianMaurin:
JeongHyeongKim:
login: JeongHyeongKim
count: 9
- avatarUrl: https://avatars.githubusercontent.com/u/26577800?u=fe653349051c0acf62cd984e74c4ff60ca8d2cb6&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/26577800?u=77f060f4686f32c248907b81b16ee2b3177ca44c&v=4
url: https://github.com/JeongHyeongKim
arthurio:
login: arthurio
count: 9
avatarUrl: https://avatars.githubusercontent.com/u/950449?u=76b997138273ce5e1990b971c4f27c9aff979fd5&v=4
url: https://github.com/arthurio
-mahone3297:
- login: mahone3297
+Lenclove:
+ login: Lenclove
count: 9
- avatarUrl: https://avatars.githubusercontent.com/u/1701379?u=20588ff0e456d13e8017333eb237595d11410234&v=4
- url: https://github.com/mahone3297
+ avatarUrl: https://avatars.githubusercontent.com/u/32355298?u=d0065e01650c63c2b2413f42d983634b2ea85481&v=4
+ url: https://github.com/Lenclove
eVery1337:
login: eVery1337
count: 9
@@ -643,6 +658,11 @@ riroan:
count: 9
avatarUrl: https://avatars.githubusercontent.com/u/33053284?u=2d18e3771506ee874b66d6aa2b3b1107fd95c38f&v=4
url: https://github.com/riroan
+MinLee0210:
+ login: MinLee0210
+ count: 9
+ avatarUrl: https://avatars.githubusercontent.com/u/57653278?u=8ca05a7efbc76048183da00da87d148b755a3ba8&v=4
+ url: https://github.com/MinLee0210
yodai-yodai:
login: yodai-yodai
count: 9
@@ -658,11 +678,6 @@ JoaoGustavoRogel:
count: 9
avatarUrl: https://avatars.githubusercontent.com/u/29525510?u=a0a91251f5e43e132608d55d28ccb8645c5ea405&v=4
url: https://github.com/JoaoGustavoRogel
-Zhongheng-Cheng:
- login: Zhongheng-Cheng
- count: 9
- avatarUrl: https://avatars.githubusercontent.com/u/95612344?u=a0f7730a3cc7486827965e01a119ad610bda4b0a&v=4
- url: https://github.com/Zhongheng-Cheng
Yarous:
login: Yarous
count: 9
@@ -683,11 +698,6 @@ bnzone:
count: 8
avatarUrl: https://avatars.githubusercontent.com/u/39371503?u=c16f00c41d88479fa2d57b0d7d233b758eacce2d&v=4
url: https://github.com/bnzone
-ChuyuChoyeon:
- login: ChuyuChoyeon
- count: 8
- avatarUrl: https://avatars.githubusercontent.com/u/129537877?u=f0c76f3327817a8b86b422d62e04a34bf2827f2b&v=4
- url: https://github.com/ChuyuChoyeon
shamosishen:
login: shamosishen
count: 8
@@ -698,26 +708,31 @@ mertssmnoglu:
count: 8
avatarUrl: https://avatars.githubusercontent.com/u/61623638?u=59dd885b68ff1832f9ab3b4a4446896358c23442&v=4
url: https://github.com/mertssmnoglu
+mahone3297:
+ login: mahone3297
+ count: 8
+ avatarUrl: https://avatars.githubusercontent.com/u/1701379?u=20588ff0e456d13e8017333eb237595d11410234&v=4
+ url: https://github.com/mahone3297
KimJoonSeo:
login: KimJoonSeo
count: 8
avatarUrl: https://avatars.githubusercontent.com/u/17760162?u=a58cdc77ae1c069a64166f7ecc4d42eecfd9a468&v=4
url: https://github.com/KimJoonSeo
-MinLee0210:
- login: MinLee0210
- count: 8
- avatarUrl: https://avatars.githubusercontent.com/u/57653278?u=7def7c0654ad82f43b46d6dfc3b51c4d2be15011&v=4
- url: https://github.com/MinLee0210
camigomezdev:
login: camigomezdev
count: 8
avatarUrl: https://avatars.githubusercontent.com/u/16061815?u=25b5ebc042fff53fa03dc107ded10e36b1b7a5b9&v=4
url: https://github.com/camigomezdev
-maru0123-2004:
- login: maru0123-2004
+minaton-ru:
+ login: minaton-ru
count: 8
- avatarUrl: https://avatars.githubusercontent.com/u/43961566?u=16ed8603a4d6a4665cb6c53a7aece6f31379b769&v=4
- url: https://github.com/maru0123-2004
+ avatarUrl: https://avatars.githubusercontent.com/u/53541518?u=67336ca11a85493f75031508aade588dad3b9910&v=4
+ url: https://github.com/minaton-ru
+sungchan1:
+ login: sungchan1
+ count: 8
+ avatarUrl: https://avatars.githubusercontent.com/u/28076127?u=a816d86ef3e60450a7225f128caf9a394c9320f9&v=4
+ url: https://github.com/sungchan1
Serrones:
login: Serrones
count: 7
@@ -738,6 +753,11 @@ anthonycepeda:
count: 7
avatarUrl: https://avatars.githubusercontent.com/u/72019805?u=60bdf46240cff8fca482ff0fc07d963fd5e1a27c&v=4
url: https://github.com/anthonycepeda
+Muaytie666:
+ login: Muaytie666
+ count: 7
+ avatarUrl: https://avatars.githubusercontent.com/u/198508825?v=4
+ url: https://github.com/Muaytie666
fabioueno:
login: fabioueno
count: 7
@@ -763,10 +783,20 @@ d2a-raudenaerde:
count: 7
avatarUrl: https://avatars.githubusercontent.com/u/5213150?v=4
url: https://github.com/d2a-raudenaerde
+valentinDruzhinin:
+ login: valentinDruzhinin
+ count: 7
+ avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
+ url: https://github.com/valentinDruzhinin
+Zerohertz:
+ login: Zerohertz
+ count: 7
+ avatarUrl: https://avatars.githubusercontent.com/u/42334717?u=5ebf4d33e73b1ad373154f6cdee44f7cab4d05ba&v=4
+ url: https://github.com/Zerohertz
deniscapeto:
login: deniscapeto
count: 6
- avatarUrl: https://avatars.githubusercontent.com/u/12864353?u=dbc20c5c1171feab5df4db46488b675d53cb5b07&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/12864353?u=20c5b2300b264a585a8381acf3cef44bcfcc1ead&v=4
url: https://github.com/deniscapeto
bsab:
login: bsab
@@ -838,11 +868,6 @@ Kirilex:
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/100281552?v=4
url: https://github.com/Kirilex
-Mordson:
- login: Mordson
- count: 6
- avatarUrl: https://avatars.githubusercontent.com/u/39025897?u=b94ea96ef35bbe43bc85359cfb31d28ac16d470c&v=4
- url: https://github.com/Mordson
arunppsg:
login: arunppsg
count: 6
@@ -853,11 +878,6 @@ dimastbk:
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/3132181?u=66587398d43466a1dc75c238df5f048e0afc77ed&v=4
url: https://github.com/dimastbk
-lordqyxz:
- login: lordqyxz
- count: 6
- avatarUrl: https://avatars.githubusercontent.com/u/31722468?u=974553c0ba53526d9be7e9876544283291be3b0d&v=4
- url: https://github.com/lordqyxz
dudyaosuplayer:
login: dudyaosuplayer
count: 6
@@ -873,16 +893,11 @@ bankofsardine:
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/44944207?u=0368e1b698ffab6bf29e202f9fd2dddd352429f1&v=4
url: https://github.com/bankofsardine
-SofiiaTrufanova:
- login: SofiiaTrufanova
+Rekl0w:
+ login: Rekl0w
count: 6
- avatarUrl: https://avatars.githubusercontent.com/u/63260929?v=4
- url: https://github.com/SofiiaTrufanova
-DianaTrufanova:
- login: DianaTrufanova
- count: 6
- avatarUrl: https://avatars.githubusercontent.com/u/119067607?v=4
- url: https://github.com/DianaTrufanova
+ avatarUrl: https://avatars.githubusercontent.com/u/91488737?u=3b62b04a3e6699eab9b1eea4e88c09a39b753a17&v=4
+ url: https://github.com/Rekl0w
rsip22:
login: rsip22
count: 5
@@ -911,7 +926,7 @@ TemaSpb:
BugLight:
login: BugLight
count: 5
- avatarUrl: https://avatars.githubusercontent.com/u/13618366?u=57572e544e40c2a491db5bf7255bd24886d2cb09&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/13618366?u=7d733749f80e5f7e66a434cf42aedcfc60340f43&v=4
url: https://github.com/BugLight
0x4Dark:
login: 0x4Dark
@@ -926,13 +941,18 @@ Wuerike:
jvmazagao:
login: jvmazagao
count: 5
- avatarUrl: https://avatars.githubusercontent.com/u/22477816?u=f3b2d503b53e6ec8c808f0601b756a063a07f06e&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/22477816?u=2b57addf5830906bf6ae5f25cd4c8c2fa5c2d68e&v=4
url: https://github.com/jvmazagao
cun3yt:
login: cun3yt
count: 5
- avatarUrl: https://avatars.githubusercontent.com/u/24409240?u=39f651cdcc4991fb9fef5bbd9e9503db2174ac13&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/24409240?u=06abfd77786db859b0602d5369d2ae18c932c17c&v=4
url: https://github.com/cun3yt
+Mordson:
+ login: Mordson
+ count: 5
+ avatarUrl: https://avatars.githubusercontent.com/u/39025897?u=b94ea96ef35bbe43bc85359cfb31d28ac16d470c&v=4
+ url: https://github.com/Mordson
aminkhani:
login: aminkhani
count: 5
@@ -953,10 +973,15 @@ Chushine:
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/135534400?v=4
url: https://github.com/Chushine
+ChuyuChoyeon:
+ login: ChuyuChoyeon
+ count: 5
+ avatarUrl: https://avatars.githubusercontent.com/u/129537877?u=f0c76f3327817a8b86b422d62e04a34bf2827f2b&v=4
+ url: https://github.com/ChuyuChoyeon
frwl404:
login: frwl404
count: 5
- avatarUrl: https://avatars.githubusercontent.com/u/42642656?u=572a5a33762e07eaa6ebd58d9d773abdb1de41c3&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/42642656?u=8395a3d991d9fac86901277d76f0f70857b56ec5&v=4
url: https://github.com/frwl404
esrefzeki:
login: esrefzeki
@@ -1033,6 +1058,11 @@ FelipeSilva93:
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/66804965?u=e7cb4b580e46f2e04ecb4cd4d7a12acdddd3c6c1&v=4
url: https://github.com/FelipeSilva93
+peacekimjapan:
+ login: peacekimjapan
+ count: 4
+ avatarUrl: https://avatars.githubusercontent.com/u/33534175?u=e4219bcebc3773a7068cc34c3eb268ef77cec31b&v=4
+ url: https://github.com/peacekimjapan
bas-baskara:
login: bas-baskara
count: 4
@@ -1061,13 +1091,18 @@ aminalaee:
erfan-rfmhr:
login: erfan-rfmhr
count: 4
- avatarUrl: https://avatars.githubusercontent.com/u/98986056?u=6c4f9218fe5bb04780dd92bfced360c55e2009f0&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/98986056?u=0acda1ff1df0989f3f3eb79977baa35da4cb6c8c&v=4
url: https://github.com/erfan-rfmhr
Scorpionchiques:
login: Scorpionchiques
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/15703294?v=4
url: https://github.com/Scorpionchiques
+lordqyxz:
+ login: lordqyxz
+ count: 4
+ avatarUrl: https://avatars.githubusercontent.com/u/31722468?u=974553c0ba53526d9be7e9876544283291be3b0d&v=4
+ url: https://github.com/lordqyxz
heysaeid:
login: heysaeid
count: 4
@@ -1123,11 +1158,11 @@ gerry-sabar:
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/1120123?v=4
url: https://github.com/gerry-sabar
-valentinDruzhinin:
- login: valentinDruzhinin
+cookie-byte217:
+ login: cookie-byte217
count: 4
- avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
- url: https://github.com/valentinDruzhinin
+ avatarUrl: https://avatars.githubusercontent.com/u/57880178?v=4
+ url: https://github.com/cookie-byte217
tyronedamasceno:
login: tyronedamasceno
count: 3
@@ -1206,7 +1241,7 @@ RuslanTer:
FedorGN:
login: FedorGN
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/66411909?u=1c6734e92f50c7d66f130ef7d394e72b53770fe6&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/66411909?u=22382380e7d66ee57ffbfc2ae6bd5efd0cdb672e&v=4
url: https://github.com/FedorGN
rafsaf:
login: rafsaf
@@ -1308,6 +1343,11 @@ Sion99:
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/82511301?v=4
url: https://github.com/Sion99
+nymous:
+ login: nymous
+ count: 3
+ avatarUrl: https://avatars.githubusercontent.com/u/4216559?u=360a36fb602cded27273cbfc0afc296eece90662&v=4
+ url: https://github.com/nymous
EpsilonRationes:
login: EpsilonRationes
count: 3
@@ -1328,6 +1368,11 @@ kohiry:
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/57669492?u=f6ab0a062740261e882879269a41a47788c84043&v=4
url: https://github.com/kohiry
+ptt3199:
+ login: ptt3199
+ count: 3
+ avatarUrl: https://avatars.githubusercontent.com/u/51350651?u=2c3d947a80283e32bf616d4c3af139a6be69680f&v=4
+ url: https://github.com/ptt3199
arynoot:
login: arynoot
count: 3
@@ -1341,7 +1386,7 @@ GDemay:
maxscheijen:
login: maxscheijen
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/47034840?u=eb98f37882528ea349ca4e5255fa64ac3fef0294&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/47034840?v=4
url: https://github.com/maxscheijen
celestywang:
login: celestywang
@@ -1353,16 +1398,21 @@ RyaWcksn:
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/42831964?u=0cb4265faf3e3425a89e59b6fddd3eb2de180af0&v=4
url: https://github.com/RyaWcksn
-Zerohertz:
- login: Zerohertz
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/42334717?u=c6acda352c866b1747921e0ff8782b58571d849e&v=4
- url: https://github.com/Zerohertz
tienduong-21:
login: tienduong-21
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/80129618?v=4
url: https://github.com/tienduong-21
+soroushgh1:
+ login: soroushgh1
+ count: 3
+ avatarUrl: https://avatars.githubusercontent.com/u/178516095?u=5e26f6a5f66cdb32d7b56e6ab362bf18ba7858b9&v=4
+ url: https://github.com/soroushgh1
+zbellos:
+ login: zbellos
+ count: 3
+ avatarUrl: https://avatars.githubusercontent.com/u/204500646?v=4
+ url: https://github.com/zbellos
blaisep:
login: blaisep
count: 2
@@ -1436,7 +1486,7 @@ TimorChow:
ataberkciftlikli:
login: ataberkciftlikli
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/64265169?v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/64265169?u=ca7c1348242559f70bc1dc027a4be277c464676f&v=4
url: https://github.com/ataberkciftlikli
leandrodesouzadev:
login: leandrodesouzadev
@@ -1468,26 +1518,21 @@ lindsayzhou:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/26602940?u=3c52ce6393bb547c97e6380ccdee03e0c64152c6&v=4
url: https://github.com/0xflotus
-peacekimjapan:
- login: peacekimjapan
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/33534175?u=e4219bcebc3773a7068cc34c3eb268ef77cec31b&v=4
- url: https://github.com/peacekimjapan
jonatasoli:
login: jonatasoli
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/26334101?u=071c062d2861d3dd127f6b4a5258cd8ef55d4c50&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/26334101?u=f601c3f111f2148bd9244c2cb3ebbd57b592e674&v=4
url: https://github.com/jonatasoli
tyzh-dev:
login: tyzh-dev
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/51972581?u=ba3882da7c009918a8e2d6b9ead31c89f09c922d&v=4
url: https://github.com/tyzh-dev
-WaFeeAL:
- login: WaFeeAL
+yurkevich-dev:
+ login: yurkevich-dev
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/45145188?u=db2de8c186073d95693279dcf085fcebffab57d0&v=4
- url: https://github.com/WaFeeAL
+ url: https://github.com/yurkevich-dev
emp7yhead:
login: emp7yhead
count: 2
@@ -1541,7 +1586,7 @@ raphaelauv:
Fahad-Md-Kamal:
login: Fahad-Md-Kamal
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/34704464?u=84abea85e59c30b2e3bc700ae42424f3fe704332&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/34704464?u=141086368c5557d5a1a533fe291f21f9fc584458&v=4
url: https://github.com/Fahad-Md-Kamal
zxcq544:
login: zxcq544
@@ -1656,7 +1701,7 @@ zhiquanchi:
Jamim:
login: Jamim
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/5607572?u=0cf3027bec78ba4f0b89802430c136bc69847d7a&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/5607572?u=9ce0b6a6d1a5124e28b3c04d8d26827ca328713a&v=4
url: https://github.com/Jamim
alvinkhalil:
login: alvinkhalil
@@ -1666,7 +1711,7 @@ alvinkhalil:
leylaeminova:
login: leylaeminova
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/100516839?u=35a9ce14bb86d7d7faa25d432f61dec2984cb818&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/100516839?u=0b0dab9e31742076b22812b14a39b4e6d8f6de4a&v=4
url: https://github.com/leylaeminova
UN-9BOT:
login: UN-9BOT
@@ -1678,11 +1723,6 @@ flasonme:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/30571019?v=4
url: https://github.com/flasonme
-ptt3199:
- login: ptt3199
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/51350651?u=ccf51f8820787e17983954f26b06acf226cba293&v=4
- url: https://github.com/ptt3199
gustavoprezoto:
login: gustavoprezoto
count: 2
@@ -1706,13 +1746,18 @@ ZhibangYue:
saeye:
login: saeye
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/62229734?v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/62229734?u=312d619db2588b60d5d5bde65260a2f44fdc6c76&v=4
url: https://github.com/saeye
Heumhub:
login: Heumhub
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/173761521?v=4
url: https://github.com/Heumhub
+manumolina:
+ login: manumolina
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/2404208?u=fdc5502910f8dec814b2477f89587b9e45fac846&v=4
+ url: https://github.com/manumolina
logan2d5:
login: logan2d5
count: 2
@@ -1728,8 +1773,48 @@ kiharito:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/38311245?v=4
url: https://github.com/kiharito
+t4f1d:
+ login: t4f1d
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/4054172?u=463d5ce0ec8ad8582f6e9351bb8c9a5105b39bb7&v=4
+ url: https://github.com/t4f1d
J-Fuji:
login: J-Fuji
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/101452903?v=4
url: https://github.com/J-Fuji
+MrL8199:
+ login: MrL8199
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/39489075?u=3fc4f89c86973e40b5970d838c801bdbc13ac828&v=4
+ url: https://github.com/MrL8199
+ivintoiu:
+ login: ivintoiu
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/1853336?u=5e3d0977f44661fb9712fa297cc8f7608ea6ce48&v=4
+ url: https://github.com/ivintoiu
+EgorOnishchuk:
+ login: EgorOnishchuk
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/120256301?v=4
+ url: https://github.com/EgorOnishchuk
+iamantonreznik:
+ login: iamantonreznik
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/112612414?u=bf6de9a1ab17326fe14de0709719fff3826526d0&v=4
+ url: https://github.com/iamantonreznik
+Azazul123:
+ login: Azazul123
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/102759111?u=b48ce6e30a81a23467cc30e0c011bcc57f0326ab&v=4
+ url: https://github.com/Azazul123
+ykertytsky:
+ login: ykertytsky
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/83857001?u=1172902656ee604cf37f5e36abe938cd34a97a32&v=4
+ url: https://github.com/ykertytsky
+NavesSapnis:
+ login: NavesSapnis
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/79222417?u=b5b10291b8e9130ca84fd20f0a641e04ed94b6b1&v=4
+ url: https://github.com/NavesSapnis
diff --git a/docs/en/data/translators.yml b/docs/en/data/translators.yml
index 9874afa56..3cd6120d0 100644
--- a/docs/en/data/translators.yml
+++ b/docs/en/data/translators.yml
@@ -8,6 +8,11 @@ jaystone776:
count: 46
avatarUrl: https://avatars.githubusercontent.com/u/11191137?u=299205a95e9b6817a43144a48b643346a5aac5cc&v=4
url: https://github.com/jaystone776
+valentinDruzhinin:
+ login: valentinDruzhinin
+ count: 29
+ avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
+ url: https://github.com/valentinDruzhinin
ceb10n:
login: ceb10n
count: 27
@@ -53,16 +58,16 @@ codingjenny:
count: 14
avatarUrl: https://avatars.githubusercontent.com/u/103817302?u=3a042740dc0ff58615da0d8679230966fd7693e8&v=4
url: https://github.com/codingjenny
-valentinDruzhinin:
- login: valentinDruzhinin
- count: 14
- avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
- url: https://github.com/valentinDruzhinin
Xewus:
login: Xewus
count: 13
avatarUrl: https://avatars.githubusercontent.com/u/85196001?u=f8e2dc7e5104f109cef944af79050ea8d1b8f914&v=4
url: https://github.com/Xewus
+Zhongheng-Cheng:
+ login: Zhongheng-Cheng
+ count: 13
+ avatarUrl: https://avatars.githubusercontent.com/u/95612344?u=a0f7730a3cc7486827965e01a119ad610bda4b0a&v=4
+ url: https://github.com/Zhongheng-Cheng
Smlep:
login: Smlep
count: 11
@@ -83,11 +88,6 @@ Vincy1230:
count: 9
avatarUrl: https://avatars.githubusercontent.com/u/81342412?u=ab5e256a4077a4a91f3f9cd2115ba80780454cbe&v=4
url: https://github.com/Vincy1230
-Zhongheng-Cheng:
- login: Zhongheng-Cheng
- count: 9
- avatarUrl: https://avatars.githubusercontent.com/u/95612344?u=a0f7730a3cc7486827965e01a119ad610bda4b0a&v=4
- url: https://github.com/Zhongheng-Cheng
rjNemo:
login: rjNemo
count: 8
@@ -103,6 +103,16 @@ pablocm83:
count: 8
avatarUrl: https://avatars.githubusercontent.com/u/28315068?u=3310fbb05bb8bfc50d2c48b6cb64ac9ee4a14549&v=4
url: https://github.com/pablocm83
+ptt3199:
+ login: ptt3199
+ count: 7
+ avatarUrl: https://avatars.githubusercontent.com/u/51350651?u=2c3d947a80283e32bf616d4c3af139a6be69680f&v=4
+ url: https://github.com/ptt3199
+NinaHwang:
+ login: NinaHwang
+ count: 6
+ avatarUrl: https://avatars.githubusercontent.com/u/79563565?u=241f2cb6d38a2d379536608a8ea5a22ed4b1a3ea&v=4
+ url: https://github.com/NinaHwang
batlopes:
login: batlopes
count: 6
@@ -118,11 +128,6 @@ Alexandrhub:
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/119126536?u=9fc0d48f3307817bafecc5861eb2168401a6cb04&v=4
url: https://github.com/Alexandrhub
-ptt3199:
- login: ptt3199
- count: 6
- avatarUrl: https://avatars.githubusercontent.com/u/51350651?u=ccf51f8820787e17983954f26b06acf226cba293&v=4
- url: https://github.com/ptt3199
Serrones:
login: Serrones
count: 5
@@ -138,11 +143,6 @@ Attsun1031:
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/1175560?v=4
url: https://github.com/Attsun1031
-NinaHwang:
- login: NinaHwang
- count: 5
- avatarUrl: https://avatars.githubusercontent.com/u/79563565?u=241f2cb6d38a2d379536608a8ea5a22ed4b1a3ea&v=4
- url: https://github.com/NinaHwang
tiangolo:
login: tiangolo
count: 5
@@ -203,6 +203,11 @@ kwang1215:
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/74170199?u=2a63ff6692119dde3f5e5693365b9fcd6f977b08&v=4
url: https://github.com/kwang1215
+k94-ishi:
+ login: k94-ishi
+ count: 4
+ avatarUrl: https://avatars.githubusercontent.com/u/32672580?u=bc7c5c07af0656be9fe4f1784a444af8d81ded89&v=4
+ url: https://github.com/k94-ishi
jfunez:
login: jfunez
count: 3
@@ -248,11 +253,6 @@ Zssaer:
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/45691504?u=4c0c195f25cb5ac6af32acfb0ab35427682938d2&v=4
url: https://github.com/Zssaer
-wdh99:
- login: wdh99
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/108172295?u=8a8fb95d5afe3e0fa33257b2aecae88d436249eb&v=4
- url: https://github.com/wdh99
ChuyuChoyeon:
login: ChuyuChoyeon
count: 3
@@ -271,12 +271,12 @@ mojtabapaso:
hsuanchi:
login: hsuanchi
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/24913710?u=0b094ae292292fee093818e37ceb645c114d2bff&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/24913710?u=7d25a398e478b6e63503bf6f26c54efa9e0da07b&v=4
url: https://github.com/hsuanchi
alejsdev:
login: alejsdev
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=356f39ff3f0211c720b06d3dbb060e98884085e3&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=638c65283ac9e9e2c3a0f9d1e3370db4b8a2c58d&v=4
url: https://github.com/alejsdev
riroan:
login: riroan
@@ -296,7 +296,7 @@ pe-brian:
maxscheijen:
login: maxscheijen
count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/47034840?u=eb98f37882528ea349ca4e5255fa64ac3fef0294&v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/47034840?v=4
url: https://github.com/maxscheijen
ilacftemp:
login: ilacftemp
@@ -328,21 +328,26 @@ nahyunkeem:
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/174440096?u=e12401d492eee58570f8914d0872b52e421a776e&v=4
url: https://github.com/nahyunkeem
+timothy-jeong:
+ login: timothy-jeong
+ count: 3
+ avatarUrl: https://avatars.githubusercontent.com/u/53824764?u=db3d0cea2f5fab64d810113c5039a369699a2774&v=4
+ url: https://github.com/timothy-jeong
gerry-sabar:
login: gerry-sabar
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/1120123?v=4
url: https://github.com/gerry-sabar
-k94-ishi:
- login: k94-ishi
- count: 3
- avatarUrl: https://avatars.githubusercontent.com/u/32672580?u=bc7c5c07af0656be9fe4f1784a444af8d81ded89&v=4
- url: https://github.com/k94-ishi
Rishat-F:
login: Rishat-F
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/66554797?v=4
url: https://github.com/Rishat-F
+ruzia:
+ login: ruzia
+ count: 3
+ avatarUrl: https://avatars.githubusercontent.com/u/24503?v=4
+ url: https://github.com/ruzia
izaguerreiro:
login: izaguerreiro
count: 2
@@ -473,6 +478,11 @@ imtiaz101325:
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/54007087?u=194d972b501b9ea9d2ddeaed757c492936e0121a&v=4
url: https://github.com/imtiaz101325
+fabianfalon:
+ login: fabianfalon
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/3700760?u=95f69e31280b17ac22299cdcd345323b142fe0af&v=4
+ url: https://github.com/fabianfalon
waketzheng:
login: waketzheng
count: 2
@@ -501,15 +511,25 @@ andersonrocha0:
saeye:
login: saeye
count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/62229734?v=4
+ avatarUrl: https://avatars.githubusercontent.com/u/62229734?u=312d619db2588b60d5d5bde65260a2f44fdc6c76&v=4
url: https://github.com/saeye
-timothy-jeong:
- login: timothy-jeong
- count: 2
- avatarUrl: https://avatars.githubusercontent.com/u/53824764?u=db3d0cea2f5fab64d810113c5039a369699a2774&v=4
- url: https://github.com/timothy-jeong
11kkw:
login: 11kkw
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/21125286?v=4
url: https://github.com/11kkw
+yes0ng:
+ login: yes0ng
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/25501794?u=3aed18b0d491e0220a167a1e9e58bea3638c6707&v=4
+ url: https://github.com/yes0ng
+EgorOnishchuk:
+ login: EgorOnishchuk
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/120256301?v=4
+ url: https://github.com/EgorOnishchuk
+NavesSapnis:
+ login: NavesSapnis
+ count: 2
+ avatarUrl: https://avatars.githubusercontent.com/u/79222417?u=b5b10291b8e9130ca84fd20f0a641e04ed94b6b1&v=4
+ url: https://github.com/NavesSapnis
diff --git a/docs/en/docs/advanced/generate-clients.md b/docs/en/docs/advanced/generate-clients.md
index 3b9dc83f0..55e6a08b1 100644
--- a/docs/en/docs/advanced/generate-clients.md
+++ b/docs/en/docs/advanced/generate-clients.md
@@ -22,9 +22,9 @@ And it shows their true commitment to FastAPI and its **community** (you), as th
For example, you might want to try:
-* Speakeasy
+* Speakeasy
* Stainless
-* liblab
+* liblab
There are also several other companies offering similar services that you can search and find online. đ¤
diff --git a/docs/en/docs/advanced/response-directly.md b/docs/en/docs/advanced/response-directly.md
index 691b1e7cd..759b762b5 100644
--- a/docs/en/docs/advanced/response-directly.md
+++ b/docs/en/docs/advanced/response-directly.md
@@ -58,7 +58,7 @@ You could put your XML content in a string, put that in a `Response`, and return
## Notes
-When you return a `Response` directly its data is not validated, converted (serialized), nor documented automatically.
+When you return a `Response` directly its data is not validated, converted (serialized), or documented automatically.
But you can still document it as described in [Additional Responses in OpenAPI](additional-responses.md){.internal-link target=_blank}.
diff --git a/docs/en/docs/async.md b/docs/en/docs/async.md
index 63bd8ca68..8207ec480 100644
--- a/docs/en/docs/async.md
+++ b/docs/en/docs/async.md
@@ -40,7 +40,7 @@ def results():
---
-If your application (somehow) doesn't have to communicate with anything else and wait for it to respond, use `async def`.
+If your application (somehow) doesn't have to communicate with anything else and wait for it to respond, use `async def`, even if you don't need to use `await` inside.
---
diff --git a/docs/en/docs/contributing.md b/docs/en/docs/contributing.md
index 1b70a0ea9..2583fd1fb 100644
--- a/docs/en/docs/contributing.md
+++ b/docs/en/docs/contributing.md
@@ -181,6 +181,28 @@ as Uvicorn by default will use the port `8000`, the documentation on port `8008`
### Translations
+/// warning | Attention
+
+**Update on Translations**
+
+We're updating the way we handle documentation translations.
+
+Until now, we invited community members to translate pages via pull requests, which were then reviewed by at least two native speakers. While this has helped bring FastAPI to many more users, weâve also run into several challenges - some languages have only a few translated pages, others are outdated and hard to maintain over time.
+To improve this, weâre working on automation tools đ¤ to manage translations more efficiently. Once ready, documentation will be machine-translated and still reviewed by at least two native speakers â
before publishing. This will allow us to keep translations up-to-date while reducing the review burden on maintainers.
+
+Whatâs changing now:
+
+* đĢ Weâre no longer accepting new community-submitted translation PRs.
+
+* âŗ Existing open PRs will be reviewed and can still be merged if completed within the next 3 weeks (since July 11 2025).
+
+* đ In the future, we will only support languages where at least three active native speakers are available to review and maintain translations.
+
+This transition will help us keep translations more consistent and timely while better supporting our contributors đ. Thank you to everyone who has contributed so far â your help has been invaluable! đ
+
+///
+
+
Help with translations is VERY MUCH appreciated! And it can't be done without the help from the community. đ đ
Here are the steps to help with translations.
@@ -293,30 +315,47 @@ Now you can translate it all and see how it looks as you save the file.
Some of these files are updated very frequently and a translation would always be behind, or they include the main content from English source files, etc.
+#### Request a New Language
+
+Let's say that you want to request translations for a language that is not yet translated, not even some pages. For example, Latin.
+
+If there is no discussion for that language, you can start by requesting the new language. For that, you can follow these steps:
+
+* Create a new discussion following the template.
+* Get a few native speakers to comment on the discussion and commit to help review translations for that language.
+
+Once there are several people in the discussion, the FastAPI team can evaluate it and can make it an official translation.
+
+Then the docs will be automatically translated using AI, and the team of native speakers can review the translation, and help tweak the AI prompts.
+
+Once there's a new translation, for example if docs are updated or there's a new section, there will be a comment in the same discussion with the link to the new translation to review.
+
#### New Language
-Let's say that you want to add translations for a language that is not yet translated, not even some pages.
+/// note
-Let's say you want to add translations for Creole, and it's not yet there in the docs.
+These steps will be performed by the FastAPI team.
+
+///
-Checking the link from above, the code for "Creole" is `ht`.
+Checking the link from above (List of ISO 639-1 codes), you can see that the 2-letter code for Latin is `la`.
-The next step is to run the script to generate a new translation directory:
+Now you can create a new directory for the new language, running the following script:
```console
// Use the command new-lang, pass the language code as a CLI argument
-$ python ./scripts/docs.py new-lang ht
+$ python ./scripts/docs.py new-lang la
-Successfully initialized: docs/ht
+Successfully initialized: docs/la
```
-Now you can check in your code editor the newly created directory `docs/ht/`.
+Now you can check in your code editor the newly created directory `docs/la/`.
-That command created a file `docs/ht/mkdocs.yml` with a simple config that inherits everything from the `en` version:
+That command created a file `docs/la/mkdocs.yml` with a simple config that inherits everything from the `en` version:
```yaml
INHERIT: ../en/mkdocs.yml
@@ -328,11 +367,11 @@ You could also simply create that file with those contents manually.
///
-That command also created a dummy file `docs/ht/index.md` for the main page, you can start by translating that one.
+That command also created a dummy file `docs/la/index.md` for the main page, you can start by translating that one.
You can continue with the previous instructions for an "Existing Language" for that process.
-You can make the first pull request with those two files, `docs/ht/mkdocs.yml` and `docs/ht/index.md`. đ
+You can make the first pull request with those two files, `docs/la/mkdocs.yml` and `docs/la/index.md`. đ
#### Preview the result
diff --git a/docs/en/docs/deployment/cloud.md b/docs/en/docs/deployment/cloud.md
index 471808851..d713379c3 100644
--- a/docs/en/docs/deployment/cloud.md
+++ b/docs/en/docs/deployment/cloud.md
@@ -14,5 +14,4 @@ You might want to try their services and follow their guides:
* Platform.sh
* Porter
-* Coherence
* Render
diff --git a/docs/en/docs/deployment/concepts.md b/docs/en/docs/deployment/concepts.md
index e71a7487a..ed635a920 100644
--- a/docs/en/docs/deployment/concepts.md
+++ b/docs/en/docs/deployment/concepts.md
@@ -65,7 +65,7 @@ The word **program** is commonly used to describe many things:
* The **code** that you write, the **Python files**.
* The **file** that can be **executed** by the operating system, for example: `python`, `python.exe` or `uvicorn`.
-* A particular program while it is **running** on the operating system, using the CPU, and storing things on memory. This is also called a **process**.
+* A particular program while it is **running** on the operating system, using the CPU, and storing things in memory. This is also called a **process**.
### What is a Process
@@ -216,7 +216,7 @@ This Manager Process would probably be the one listening on the **port** in the
Those worker processes would be the ones running your application, they would perform the main computations to receive a **request** and return a **response**, and they would load anything you put in variables in RAM.
-
+
And of course, the same machine would probably have **other processes** running as well, apart from your application.
diff --git a/docs/en/docs/deployment/https.md b/docs/en/docs/deployment/https.md
index 46eda791e..8b4a08dbe 100644
--- a/docs/en/docs/deployment/https.md
+++ b/docs/en/docs/deployment/https.md
@@ -85,7 +85,7 @@ First, the browser would check with the **DNS servers** what is the **IP for the
The DNS servers would tell the browser to use some specific **IP address**. That would be the public IP address used by your server, that you configured in the DNS servers.
-
+
### TLS Handshake Start
@@ -93,7 +93,7 @@ The browser would then communicate with that IP address on **port 443** (the HTT
The first part of the communication is just to establish the connection between the client and the server and to decide the cryptographic keys they will use, etc.
-
+
This interaction between the client and the server to establish the TLS connection is called the **TLS handshake**.
@@ -111,7 +111,7 @@ Using the **SNI extension** discussed above, the TLS Termination Proxy would che
In this case, it would use the certificate for `someapp.example.com`.
-
+
The client already **trusts** the entity that generated that TLS certificate (in this case Let's Encrypt, but we'll see about that later), so it can **verify** that the certificate is valid.
@@ -133,19 +133,19 @@ Now that the client and server (specifically the browser and the TLS Termination
So, the client sends an **HTTPS request**. This is just an HTTP request through an encrypted TLS connection.
-
+
### Decrypt the Request
The TLS Termination Proxy would use the encryption agreed to **decrypt the request**, and would transmit the **plain (decrypted) HTTP request** to the process running the application (for example a process with Uvicorn running the FastAPI application).
-
+
### HTTP Response
The application would process the request and send a **plain (unencrypted) HTTP response** to the TLS Termination Proxy.
-
+
### HTTPS Response
@@ -153,7 +153,7 @@ The TLS Termination Proxy would then **encrypt the response** using the cryptogr
Next, the browser would verify that the response is valid and encrypted with the right cryptographic key, etc. It would then **decrypt the response** and process it.
-
+
The client (browser) will know that the response comes from the correct server because it is using the cryptography they agreed using the **HTTPS certificate** before.
@@ -163,7 +163,7 @@ In the same server (or servers), there could be **multiple applications**, for e
Only one process can be handling the specific IP and port (the TLS Termination Proxy in our example) but the other applications/processes can be running on the server(s) too, as long as they don't try to use the same **combination of public IP and port**.
-
+
That way, the TLS Termination Proxy could handle HTTPS and certificates for **multiple domains**, for multiple applications, and then transmit the requests to the right application in each case.
@@ -173,7 +173,7 @@ At some point in the future, each certificate would **expire** (about 3 months a
And then, there would be another program (in some cases it's another program, in some cases it could be the same TLS Termination Proxy) that would talk to Let's Encrypt, and renew the certificate(s).
-
+
The **TLS certificates** are **associated with a domain name**, not with an IP address.
diff --git a/docs/en/docs/help-fastapi.md b/docs/en/docs/help-fastapi.md
index 81151032f..35d2e7b84 100644
--- a/docs/en/docs/help-fastapi.md
+++ b/docs/en/docs/help-fastapi.md
@@ -249,20 +249,7 @@ On the other side, there are thousands of users in the chat systems, so there's
## Sponsor the author
-You can also financially support the author (me) through GitHub sponsors .
-
-There you could buy me a coffee âī¸ to say thanks. đ
-
-And you can also become a Silver or Gold sponsor for FastAPI. đ
đ
-
-## Sponsor the tools that power FastAPI
-
-As you have seen in the documentation, FastAPI stands on the shoulders of giants, Starlette and Pydantic.
-
-You can also sponsor:
-
-* Samuel Colvin (Pydantic)
-* Encode (Starlette, Uvicorn)
+If your **product/company** depends on or is related to **FastAPI** and you want to reach its users, you can sponsor the author (me) through GitHub sponsors . Depending on the tier, you could get some extra benefits, like a badge in the docs. đ
---
diff --git a/docs/en/docs/how-to/custom-docs-ui-assets.md b/docs/en/docs/how-to/custom-docs-ui-assets.md
index f717c98fa..9d2238e4f 100644
--- a/docs/en/docs/how-to/custom-docs-ui-assets.md
+++ b/docs/en/docs/how-to/custom-docs-ui-assets.md
@@ -98,7 +98,7 @@ You can probably right-click each link and select an option similar to `Save lin
And **ReDoc** uses the file:
-* `redoc.standalone.js`
+* `redoc.standalone.js`
After that, your file structure could look like:
@@ -129,14 +129,8 @@ You should see a very long JavaScript file for **ReDoc**.
It could start with something like:
```JavaScript
-/*!
- * ReDoc - OpenAPI/Swagger-generated API Reference Documentation
- * -------------------------------------------------------------
- * Version: "2.0.0-rc.18"
- * Repo: https://github.com/Redocly/redoc
- */
-!function(e,t){"object"==typeof exports&&"object"==typeof m
-
+/*! For license information please see redoc.standalone.js.LICENSE.txt */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("null")):
...
```
diff --git a/docs/en/docs/img/deployment/concepts/process-ram.drawio b/docs/en/docs/img/deployment/concepts/process-ram.drawio
deleted file mode 100644
index b29c8a342..000000000
--- a/docs/en/docs/img/deployment/concepts/process-ram.drawio
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/en/docs/img/deployment/concepts/process-ram.drawio.svg b/docs/en/docs/img/deployment/concepts/process-ram.drawio.svg
new file mode 100644
index 000000000..a6a5c81d0
--- /dev/null
+++ b/docs/en/docs/img/deployment/concepts/process-ram.drawio.svg
@@ -0,0 +1,297 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Server
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RAM
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ CPU
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Process
+
+
+
+ Manager
+
+
+
+
+
+
+
+ Process Manager
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Worker Process
+
+
+
+
+
+
+
+ Worker Process
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Worker Process
+
+
+
+
+
+
+
+ Worker Process
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Another Process
+
+
+
+
+
+
+
+ Another Process
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1 GB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1 GB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Text is not SVG - cannot display
+
+
+
+
diff --git a/docs/en/docs/img/deployment/concepts/process-ram.svg b/docs/en/docs/img/deployment/concepts/process-ram.svg
deleted file mode 100644
index c1bf0d589..000000000
--- a/docs/en/docs/img/deployment/concepts/process-ram.svg
+++ /dev/null
@@ -1,59 +0,0 @@
-Server RAM
- CPU
- Process Manager Worker Process Worker Process Another Process 1 GB 1 GB Viewer does not support full SVG 1.1
diff --git a/docs/en/docs/img/deployment/https/https.drawio b/docs/en/docs/img/deployment/https/https.drawio
deleted file mode 100644
index c4c8a3628..000000000
--- a/docs/en/docs/img/deployment/https/https.drawio
+++ /dev/null
@@ -1,277 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/en/docs/img/deployment/https/https.drawio.svg b/docs/en/docs/img/deployment/https/https.drawio.svg
new file mode 100644
index 000000000..c2a65b69f
--- /dev/null
+++ b/docs/en/docs/img/deployment/https/https.drawio.svg
@@ -0,0 +1,907 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DNS Servers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Termination Proxy
+
+
+
+
+
+
+
+
+ TLS Termination Proxy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cert Renovation Program
+
+
+
+
+
+
+ Cert Renovation Program
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Let's Encrypt
+
+
+
+
+
+
+ Let's Encrypt
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FastAPI
+
+
+ app for: someapp.example.com
+
+
+
+
+
+
+
+ FastAPI app for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Another app
+
+
+ : another.example.com
+
+
+
+
+
+
+
+ Another app: another.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ One more app
+
+
+ : onemore.example.com
+
+
+
+
+
+
+
+ One more app: onemore.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Database
+
+
+
+
+
+
+
+ A Database
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Plain response from: someapp.example.com
+
+
+
+
+
+
+
+ Plain response from: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Encrypted request for: someapp.example.com
+
+
+
+
+
+
+
+ Encrypted request for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Renew HTTPS cert for: someapp.example.com
+
+
+
+
+
+
+
+ Renew HTTPS cert for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ New HTTPS cert for: someapp.example.com
+
+
+
+
+
+
+
+ New HTTPS cert for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Encrypted response from: someapp.example.com
+
+
+
+
+
+
+
+ Encrypted response from: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HTTPS certificates
+
+
+
+
+
+
+
+
+ HTTPS certificates
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ someapp.example.com
+
+
+
+
+
+
+
+
+
+ someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ another.example.net
+
+
+
+
+
+
+
+
+
+ another.example.net
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ onemore.example.org
+
+
+
+
+
+
+
+
+
+ onemore.example.org
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Decrypted request for: someapp.example.com
+
+
+
+
+
+
+
+ Decrypted request for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+
+
+
+ Text is not SVG - cannot display
+
+
+
+
diff --git a/docs/en/docs/img/deployment/https/https.svg b/docs/en/docs/img/deployment/https/https.svg
deleted file mode 100644
index 69497518a..000000000
--- a/docs/en/docs/img/deployment/https/https.svg
+++ /dev/null
@@ -1,62 +0,0 @@
-Server(s) https://someapp.example.com
https://someapp.example.com DNS Servers TLS Termination Proxy
- Cert Renovation Program Let's Encrypt FastAPI app for: someapp.example.com
FastAPI app for: someapp.example.com Another app : another.example.com
Another app: another.example.com One more app : onemore.example.com
One more app: onemore.example.com A Database Plain response from: someapp.example.com
Plain response from: someapp.example.com Port 443 (HTTPS) Encrypted request for: someapp.example.com
Encrypted request for: someapp.example.com Who is: someapp.example.com
Who is: someapp.example.com IP:... Renew HTTPS cert for: someapp.example.com
Renew HTTPS cert for: someapp.example.com New HTTPS cert for: someapp.example.com
New HTTPS cert for: someapp.example.com TLS Handshake Encrypted response from: someapp.example.com
Encrypted response from: someapp.example.com HTTPS certificates
- someapp.example.com
- another.example.net
- onemore.example.org
- IP:... Decrypted request for: someapp.example.com
Decrypted request for: someapp.example.com Viewer does not support full SVG 1.1
diff --git a/docs/en/docs/img/deployment/https/https01.drawio b/docs/en/docs/img/deployment/https/https01.drawio
deleted file mode 100644
index 181582f9b..000000000
--- a/docs/en/docs/img/deployment/https/https01.drawio
+++ /dev/null
@@ -1,78 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/en/docs/img/deployment/https/https01.drawio.svg b/docs/en/docs/img/deployment/https/https01.drawio.svg
new file mode 100644
index 000000000..ea128daf8
--- /dev/null
+++ b/docs/en/docs/img/deployment/https/https01.drawio.svg
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DNS Servers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+
+
+
+ Text is not SVG - cannot display
+
+
+
+
diff --git a/docs/en/docs/img/deployment/https/https01.svg b/docs/en/docs/img/deployment/https/https01.svg
deleted file mode 100644
index 2edbd0623..000000000
--- a/docs/en/docs/img/deployment/https/https01.svg
+++ /dev/null
@@ -1,57 +0,0 @@
-https://someapp.example.com
https://someapp.example.com DNS Servers Who is: someapp.example.com
Who is: someapp.example.com IP:... Viewer does not support full SVG 1.1
diff --git a/docs/en/docs/img/deployment/https/https02.drawio b/docs/en/docs/img/deployment/https/https02.drawio
deleted file mode 100644
index 650c06d1e..000000000
--- a/docs/en/docs/img/deployment/https/https02.drawio
+++ /dev/null
@@ -1,110 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/en/docs/img/deployment/https/https02.drawio.svg b/docs/en/docs/img/deployment/https/https02.drawio.svg
new file mode 100644
index 000000000..c29d59356
--- /dev/null
+++ b/docs/en/docs/img/deployment/https/https02.drawio.svg
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DNS Servers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+
+
+
+ Text is not SVG - cannot display
+
+
+
+
diff --git a/docs/en/docs/img/deployment/https/https02.svg b/docs/en/docs/img/deployment/https/https02.svg
deleted file mode 100644
index e16b7e94a..000000000
--- a/docs/en/docs/img/deployment/https/https02.svg
+++ /dev/null
@@ -1,57 +0,0 @@
-Server(s) https://someapp.example.com
https://someapp.example.com DNS Servers Port 443 (HTTPS) IP:... Who is: someapp.example.com
Who is: someapp.example.com IP:... TLS Handshake Viewer does not support full SVG 1.1
diff --git a/docs/en/docs/img/deployment/https/https03.drawio b/docs/en/docs/img/deployment/https/https03.drawio
deleted file mode 100644
index c178fd363..000000000
--- a/docs/en/docs/img/deployment/https/https03.drawio
+++ /dev/null
@@ -1,131 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/en/docs/img/deployment/https/https03.drawio.svg b/docs/en/docs/img/deployment/https/https03.drawio.svg
new file mode 100644
index 000000000..6971e4c9c
--- /dev/null
+++ b/docs/en/docs/img/deployment/https/https03.drawio.svg
@@ -0,0 +1,715 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DNS Servers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Termination Proxy
+
+
+
+
+
+
+
+
+ TLS Termination Proxy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HTTPS certificates
+
+
+
+
+
+
+
+
+ HTTPS certificates
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ someapp.example.com
+
+
+
+
+
+
+
+
+
+ someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ another.example.net
+
+
+
+
+
+
+
+
+
+ another.example.net
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ onemore.example.org
+
+
+
+
+
+
+
+
+
+ onemore.example.org
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+
+
+
+ Text is not SVG - cannot display
+
+
+
+
diff --git a/docs/en/docs/img/deployment/https/https03.svg b/docs/en/docs/img/deployment/https/https03.svg
deleted file mode 100644
index 2badd1c7d..000000000
--- a/docs/en/docs/img/deployment/https/https03.svg
+++ /dev/null
@@ -1,62 +0,0 @@
-Server(s) https://someapp.example.com
https://someapp.example.com DNS Servers TLS Termination Proxy
- Port 443 (HTTPS) Who is: someapp.example.com
Who is: someapp.example.com IP:... TLS Handshake HTTPS certificates
- someapp.example.com
- another.example.net
- onemore.example.org
- IP:... Viewer does not support full SVG 1.1
diff --git a/docs/en/docs/img/deployment/https/https04.drawio b/docs/en/docs/img/deployment/https/https04.drawio
deleted file mode 100644
index 78a6e919a..000000000
--- a/docs/en/docs/img/deployment/https/https04.drawio
+++ /dev/null
@@ -1,152 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/en/docs/img/deployment/https/https04.drawio.svg b/docs/en/docs/img/deployment/https/https04.drawio.svg
new file mode 100644
index 000000000..7e32bcdfe
--- /dev/null
+++ b/docs/en/docs/img/deployment/https/https04.drawio.svg
@@ -0,0 +1,419 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DNS Servers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Termination Proxy
+
+
+
+
+
+
+
+
+ TLS Termination Proxy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Encrypted request for: someapp.example.com
+
+
+
+
+
+
+
+ Encrypted request for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HTTPS certificates
+
+
+
+
+
+
+
+
+ HTTPS certificates
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ someapp.example.com
+
+
+
+
+
+
+
+
+
+ someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ another.example.net
+
+
+
+
+
+
+
+
+
+ another.example.net
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ onemore.example.org
+
+
+
+
+
+
+
+
+
+ onemore.example.org
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+
+
+
+ Text is not SVG - cannot display
+
+
+
+
diff --git a/docs/en/docs/img/deployment/https/https04.svg b/docs/en/docs/img/deployment/https/https04.svg
deleted file mode 100644
index 4513ac76b..000000000
--- a/docs/en/docs/img/deployment/https/https04.svg
+++ /dev/null
@@ -1,62 +0,0 @@
-Server(s) https://someapp.example.com
https://someapp.example.com DNS Servers TLS Termination Proxy
- Port 443 (HTTPS) Encrypted request for: someapp.example.com
Encrypted request for: someapp.example.com Who is: someapp.example.com
Who is: someapp.example.com IP:... TLS Handshake HTTPS certificates
- someapp.example.com
- another.example.net
- onemore.example.org
- IP:... Viewer does not support full SVG 1.1
diff --git a/docs/en/docs/img/deployment/https/https05.drawio b/docs/en/docs/img/deployment/https/https05.drawio
deleted file mode 100644
index 236ecd841..000000000
--- a/docs/en/docs/img/deployment/https/https05.drawio
+++ /dev/null
@@ -1,166 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/en/docs/img/deployment/https/https05.drawio.svg b/docs/en/docs/img/deployment/https/https05.drawio.svg
new file mode 100644
index 000000000..fed2fad16
--- /dev/null
+++ b/docs/en/docs/img/deployment/https/https05.drawio.svg
@@ -0,0 +1,641 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DNS Servers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Termination Proxy
+
+
+
+
+
+
+
+
+ TLS Termination Proxy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FastAPI
+
+
+ app for: someapp.example.com
+
+
+
+
+
+
+
+ FastAPI app for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Decrypted request for: someapp.example.com
+
+
+
+
+
+
+
+ Decrypted request for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Encrypted request for: someapp.example.com
+
+
+
+
+
+
+
+ Encrypted request for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HTTPS certificates
+
+
+
+
+
+
+
+
+ HTTPS certificates
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ someapp.example.com
+
+
+
+
+
+
+
+
+
+ someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ another.example.net
+
+
+
+
+
+
+
+
+
+ another.example.net
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ onemore.example.org
+
+
+
+
+
+
+
+
+
+ onemore.example.org
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+
+
+
+ Text is not SVG - cannot display
+
+
+
+
diff --git a/docs/en/docs/img/deployment/https/https05.svg b/docs/en/docs/img/deployment/https/https05.svg
deleted file mode 100644
index ddcd2760a..000000000
--- a/docs/en/docs/img/deployment/https/https05.svg
+++ /dev/null
@@ -1,62 +0,0 @@
-Server(s) https://someapp.example.com
https://someapp.example.com DNS Servers TLS Termination Proxy
- FastAPI app for: someapp.example.com
FastAPI app for: someapp.example.com Decrypted request for: someapp.example.com
Decrypted request for: someapp.example.com Port 443 (HTTPS) Encrypted request for: someapp.example.com
Encrypted request for: someapp.example.com Who is: someapp.example.com
Who is: someapp.example.com IP:... TLS Handshake HTTPS certificates
- someapp.example.com
- another.example.net
- onemore.example.org
- IP:... Viewer does not support full SVG 1.1
diff --git a/docs/en/docs/img/deployment/https/https06.drawio b/docs/en/docs/img/deployment/https/https06.drawio
deleted file mode 100644
index 9dec13184..000000000
--- a/docs/en/docs/img/deployment/https/https06.drawio
+++ /dev/null
@@ -1,183 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/en/docs/img/deployment/https/https06.drawio.svg b/docs/en/docs/img/deployment/https/https06.drawio.svg
new file mode 100644
index 000000000..e0bd9bc6e
--- /dev/null
+++ b/docs/en/docs/img/deployment/https/https06.drawio.svg
@@ -0,0 +1,673 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DNS Servers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Termination Proxy
+
+
+
+
+
+
+
+
+ TLS Termination Proxy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FastAPI
+
+
+ app for: someapp.example.com
+
+
+
+
+
+
+
+ FastAPI app for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Plain response from: someapp.example.com
+
+
+
+
+
+
+
+ Plain response from: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Decrypted request for: someapp.example.com
+
+
+
+
+
+
+
+ Decrypted request for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Encrypted request for: someapp.example.com
+
+
+
+
+
+
+
+ Encrypted request for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HTTPS certificates
+
+
+
+
+
+
+
+
+ HTTPS certificates
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ someapp.example.com
+
+
+
+
+
+
+
+
+
+ someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ another.example.net
+
+
+
+
+
+
+
+
+
+ another.example.net
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ onemore.example.org
+
+
+
+
+
+
+
+
+
+ onemore.example.org
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+
+
+
+ Text is not SVG - cannot display
+
+
+
+
diff --git a/docs/en/docs/img/deployment/https/https06.svg b/docs/en/docs/img/deployment/https/https06.svg
deleted file mode 100644
index 3695de40c..000000000
--- a/docs/en/docs/img/deployment/https/https06.svg
+++ /dev/null
@@ -1,62 +0,0 @@
-Server(s) https://someapp.example.com
https://someapp.example.com DNS Servers TLS Termination Proxy
- FastAPI app for: someapp.example.com
FastAPI app for: someapp.example.com Plain response from: someapp.example.com
Plain response from: someapp.example.com Decrypted request for: someapp.example.com
Decrypted request for: someapp.example.com Port 443 (HTTPS) Encrypted request for: someapp.example.com
Encrypted request for: someapp.example.com Who is: someapp.example.com
Who is: someapp.example.com IP:... TLS Handshake HTTPS certificates
- someapp.example.com
- another.example.net
- onemore.example.org
- IP:... Viewer does not support full SVG 1.1
diff --git a/docs/en/docs/img/deployment/https/https07.drawio b/docs/en/docs/img/deployment/https/https07.drawio
deleted file mode 100644
index aa8f4d6be..000000000
--- a/docs/en/docs/img/deployment/https/https07.drawio
+++ /dev/null
@@ -1,203 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/en/docs/img/deployment/https/https07.drawio.svg b/docs/en/docs/img/deployment/https/https07.drawio.svg
new file mode 100644
index 000000000..b74b33807
--- /dev/null
+++ b/docs/en/docs/img/deployment/https/https07.drawio.svg
@@ -0,0 +1,540 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DNS Servers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Termination Proxy
+
+
+
+
+
+
+
+
+ TLS Termination Proxy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FastAPI
+
+
+ app for: someapp.example.com
+
+
+
+
+
+
+
+ FastAPI app for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Plain response from: someapp.example.com
+
+
+
+
+
+
+
+ Plain response from: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Decrypted request for: someapp.example.com
+
+
+
+
+
+
+
+ Decrypted request for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Encrypted request for: someapp.example.com
+
+
+
+
+
+
+
+ Encrypted request for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Encrypted response from: someapp.example.com
+
+
+
+
+
+
+
+ Encrypted response from: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HTTPS certificates
+
+
+
+
+
+
+
+
+ HTTPS certificates
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ someapp.example.com
+
+
+
+
+
+
+
+
+
+ someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ another.example.net
+
+
+
+
+
+
+
+
+
+ another.example.net
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ onemore.example.org
+
+
+
+
+
+
+
+
+
+ onemore.example.org
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+
+
+
+ Text is not SVG - cannot display
+
+
+
+
diff --git a/docs/en/docs/img/deployment/https/https07.svg b/docs/en/docs/img/deployment/https/https07.svg
deleted file mode 100644
index 551354cef..000000000
--- a/docs/en/docs/img/deployment/https/https07.svg
+++ /dev/null
@@ -1,62 +0,0 @@
-Server(s) https://someapp.example.com
https://someapp.example.com DNS Servers TLS Termination Proxy
- FastAPI app for: someapp.example.com
FastAPI app for: someapp.example.com Plain response from: someapp.example.com
Plain response from: someapp.example.com Decrypted request for: someapp.example.com
Decrypted request for: someapp.example.com Port 443 (HTTPS) Encrypted request for: someapp.example.com
Encrypted request for: someapp.example.com Who is: someapp.example.com
Who is: someapp.example.com IP:... TLS Handshake Encrypted response from: someapp.example.com
Encrypted response from: someapp.example.com HTTPS certificates
- someapp.example.com
- another.example.net
- onemore.example.org
- IP:... Viewer does not support full SVG 1.1
diff --git a/docs/en/docs/img/deployment/https/https08.drawio b/docs/en/docs/img/deployment/https/https08.drawio
deleted file mode 100644
index 794b192df..000000000
--- a/docs/en/docs/img/deployment/https/https08.drawio
+++ /dev/null
@@ -1,217 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/en/docs/img/deployment/https/https08.drawio.svg b/docs/en/docs/img/deployment/https/https08.drawio.svg
new file mode 100644
index 000000000..8fc0b31ec
--- /dev/null
+++ b/docs/en/docs/img/deployment/https/https08.drawio.svg
@@ -0,0 +1,625 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+ Server(s)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DNS Servers
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Termination Proxy
+
+
+
+
+
+
+
+
+ TLS Termination Proxy
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ FastAPI
+
+
+ app for: someapp.example.com
+
+
+
+
+
+
+
+ FastAPI app for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Another app
+
+
+ : another.example.com
+
+
+
+
+
+
+
+ Another app: another.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ One more app
+
+
+ : onemore.example.com
+
+
+
+
+
+
+
+ One more app: onemore.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A Database
+
+
+
+
+
+
+
+ A Database
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Plain response from: someapp.example.com
+
+
+
+
+
+
+
+ Plain response from: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Decrypted request for: someapp.example.com
+
+
+
+
+
+
+
+ Decrypted request for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+ Port 443 (HTTPS)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Encrypted request for: someapp.example.com
+
+
+
+
+
+
+
+ Encrypted request for: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+ Who is: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+ TLS Handshake
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Encrypted response from: someapp.example.com
+
+
+
+
+
+
+
+ Encrypted response from: someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ HTTPS certificates
+
+
+
+
+
+
+
+
+ HTTPS certificates
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ someapp.example.com
+
+
+
+
+
+
+
+
+
+ someapp.example.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ another.example.net
+
+
+
+
+
+
+
+
+
+ another.example.net
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ onemore.example.org
+
+
+
+
+
+
+
+
+
+ onemore.example.org
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IP:
+
+
+
+ 123.124.125.126
+
+
+
+
+
+
+
+
+
+ IP:...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+ https://someapp.example.com
+
+
+
+
+
+
+
+
+
+ Text is not SVG - cannot display
+
+
+
+
diff --git a/docs/en/docs/img/deployment/https/https08.svg b/docs/en/docs/img/deployment/https/https08.svg
deleted file mode 100644
index 2d4680dcc..000000000
--- a/docs/en/docs/img/deployment/https/https08.svg
+++ /dev/null
@@ -1,62 +0,0 @@
-Server(s) https://someapp.example.com
https://someapp.example.com DNS Servers TLS Termination Proxy
- FastAPI app for: someapp.example.com
FastAPI app for: someapp.example.com Another app : another.example.com
Another app: another.example.com One more app : onemore.example.com
One more app: onemore.example.com A Database Plain response from: someapp.example.com
Plain response from: someapp.example.com Decrypted request for: someapp.example.com
Decrypted request for: someapp.example.com Port 443 (HTTPS) Encrypted request for: someapp.example.com
Encrypted request for: someapp.example.com Who is: someapp.example.com
Who is: someapp.example.com IP:... TLS Handshake Encrypted response from: someapp.example.com
Encrypted response from: someapp.example.com HTTPS certificates
- someapp.example.com
- another.example.net
- onemore.example.org
- IP:... Viewer does not support full SVG 1.1
diff --git a/docs/en/docs/img/sponsors/dribia.png b/docs/en/docs/img/sponsors/dribia.png
new file mode 100644
index 000000000..f40e14086
Binary files /dev/null and b/docs/en/docs/img/sponsors/dribia.png differ
diff --git a/docs/en/docs/img/sponsors/interviewpal.png b/docs/en/docs/img/sponsors/interviewpal.png
new file mode 100644
index 000000000..e40ed01fd
Binary files /dev/null and b/docs/en/docs/img/sponsors/interviewpal.png differ
diff --git a/docs/en/docs/img/sponsors/mobbai-banner.png b/docs/en/docs/img/sponsors/mobbai-banner.png
new file mode 100644
index 000000000..1f59294ab
Binary files /dev/null and b/docs/en/docs/img/sponsors/mobbai-banner.png differ
diff --git a/docs/en/docs/img/sponsors/mobbai.png b/docs/en/docs/img/sponsors/mobbai.png
new file mode 100644
index 000000000..b519fd885
Binary files /dev/null and b/docs/en/docs/img/sponsors/mobbai.png differ
diff --git a/docs/en/docs/img/sponsors/subtotal-banner.svg b/docs/en/docs/img/sponsors/subtotal-banner.svg
new file mode 100644
index 000000000..3d6c98dfc
--- /dev/null
+++ b/docs/en/docs/img/sponsors/subtotal-banner.svg
@@ -0,0 +1,133 @@
+
+
+
+
+ sponsorship-banner
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/en/docs/img/sponsors/subtotal.svg b/docs/en/docs/img/sponsors/subtotal.svg
new file mode 100644
index 000000000..b944c1b2c
--- /dev/null
+++ b/docs/en/docs/img/sponsors/subtotal.svg
@@ -0,0 +1,31 @@
+
+
+ sponsorship-badge
+
+
diff --git a/docs/en/docs/img/sponsors/zuplo.png b/docs/en/docs/img/sponsors/zuplo.png
index 7a7c16862..6a4ed233e 100644
Binary files a/docs/en/docs/img/sponsors/zuplo.png and b/docs/en/docs/img/sponsors/zuplo.png differ
diff --git a/docs/en/docs/img/tutorial/bigger-applications/package.drawio b/docs/en/docs/img/tutorial/bigger-applications/package.drawio
deleted file mode 100644
index cab3de2ca..000000000
--- a/docs/en/docs/img/tutorial/bigger-applications/package.drawio
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/en/docs/img/tutorial/bigger-applications/package.drawio.svg b/docs/en/docs/img/tutorial/bigger-applications/package.drawio.svg
new file mode 100644
index 000000000..7e28f4a68
--- /dev/null
+++ b/docs/en/docs/img/tutorial/bigger-applications/package.drawio.svg
@@ -0,0 +1,420 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Package app
+
+ app/__init__.py
+
+
+
+
+
+
+ Package app...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Module app.main
+
+
+
+ app/main.py
+
+
+
+
+
+
+
+ Module app.main...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Module app.dependencies
+
+
+
+ app/dependencies.py
+
+
+
+
+
+
+
+ Module app.dependencies...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Subpackage app.internal
+
+
+
+ app/internal/__init__.py
+
+
+
+
+
+
+
+
+
+
+ Subpackage app.internal...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Module app.internal.admin
+
+
+
+ app/internal/admin.py
+
+
+
+
+
+
+
+ Module app.internal.admin...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Subpackage app.routers
+
+ app/routers/__init__.py
+
+
+
+
+
+
+
+
+ Subpackage app.routers...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Module app.routers.items
+
+
+
+ app/routers/items.py
+
+
+
+
+
+
+
+ Module app.routers.items...
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Module app.routers.users
+
+
+
+ app/routers/users.py
+
+
+
+
+
+
+
+ Module app.routers.users...
+
+
+
+
+
+
+
+
+
+ Text is not SVG - cannot display
+
+
+
+
diff --git a/docs/en/docs/img/tutorial/bigger-applications/package.svg b/docs/en/docs/img/tutorial/bigger-applications/package.svg
deleted file mode 100644
index 44da1dc30..000000000
--- a/docs/en/docs/img/tutorial/bigger-applications/package.svg
+++ /dev/null
@@ -1 +0,0 @@
-Package app app/__init__.py
Package app... Module app.main app/main.py
Module app.main... Module app.dependencies app/dependencies.py
Module app.dependencies... Subpackage app.internal app/internal/__init__.py
Subpackage app.internal... Module app.internal.admin app/internal/admin.py
Module app.internal.admin... Subpackage app.routers app/routers/__init__.py
Subpackage app.routers... Module app.routers.items app/routers/items.py
Module app.routers.items... Module app.routers.users app/routers/users.py
Module app.routers.users... Viewer does not support full SVG 1.1
diff --git a/docs/en/docs/index.md b/docs/en/docs/index.md
index 4a2777f25..938882d7d 100644
--- a/docs/en/docs/index.md
+++ b/docs/en/docs/index.md
@@ -146,7 +146,7 @@ $ pip install "fastapi[standard]"
### Create it
-* Create a file `main.py` with:
+Create a file `main.py` with:
```Python
from typing import Union
@@ -468,15 +468,20 @@ Used by Starlette:
* jinja2
- Required if you want to use the default template configuration.
* python-multipart
- Required if you want to support form "parsing" , with `request.form()`.
-Used by FastAPI / Starlette:
+Used by FastAPI:
* uvicorn
- for the server that loads and serves your application. This includes `uvicorn[standard]`, which includes some dependencies (e.g. `uvloop`) needed for high performance serving.
-* `fastapi-cli` - to provide the `fastapi` command.
+* `fastapi-cli[standard]` - to provide the `fastapi` command.
+ * This includes `fastapi-cloud-cli`, which allows you to deploy your FastAPI application to FastAPI Cloud .
### Without `standard` Dependencies
If you don't want to include the `standard` optional dependencies, you can install with `pip install fastapi` instead of `pip install "fastapi[standard]"`.
+### Without `fastapi-cloud-cli`
+
+If you want to install FastAPI with the standard dependencies but without the `fastapi-cloud-cli`, you can install with `pip install "fastapi[standard-no-fastapi-cloud-cli]"`.
+
### Additional Optional Dependencies
There are some additional dependencies you might want to install.
diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md
index c900dc918..f3984fa9e 100644
--- a/docs/en/docs/release-notes.md
+++ b/docs/en/docs/release-notes.md
@@ -7,13 +7,225 @@ hide:
## Latest Changes
+### Docs
+
+* đ Add discussion template for new language translation requests. PR [#13535](https://github.com/fastapi/fastapi/pull/13535) by [@alejsdev](https://github.com/alejsdev).
+
+### Translations
+
+* đ Update Portuguese Translation for `docs/pt/docs/async.md`. PR [#13863](https://github.com/fastapi/fastapi/pull/13863) by [@EdmilsonRodrigues](https://github.com/EdmilsonRodrigues).
+* đ Fix highlight line in `docs/ja/docs/tutorial/body.md`. PR [#13927](https://github.com/fastapi/fastapi/pull/13927) by [@KoyoMiyazaki](https://github.com/KoyoMiyazaki).
+* đ Add Persian translation for `docs/fa/docs/environment-variables.md`. PR [#13923](https://github.com/fastapi/fastapi/pull/13923) by [@Mohammad222PR](https://github.com/Mohammad222PR).
+* đ Add Persian translation for `docs/fa/docs/python-types.md`. PR [#13524](https://github.com/fastapi/fastapi/pull/13524) by [@Mohammad222PR](https://github.com/Mohammad222PR).
+* đ Update Portuguese Translation for `docs/pt/docs/project-generation.md`. PR [#13875](https://github.com/fastapi/fastapi/pull/13875) by [@EdmilsonRodrigues](https://github.com/EdmilsonRodrigues).
+* đ Add Persian translation for `docs/fa/docs/async.md`. PR [#13541](https://github.com/fastapi/fastapi/pull/13541) by [@Mohammad222PR](https://github.com/Mohammad222PR).
+* đ Add Bangali translation for `docs/bn/about/index.md`. PR [#13882](https://github.com/fastapi/fastapi/pull/13882) by [@sajjadrahman56](https://github.com/sajjadrahman56).
+
+### Internal
+
+* âī¸ Update translate script, show and update outdated translations. PR [#13933](https://github.com/fastapi/fastapi/pull/13933) by [@tiangolo](https://github.com/tiangolo).
+* đ¨ Refactor translate script with extra feedback (prints). PR [#13932](https://github.com/fastapi/fastapi/pull/13932) by [@tiangolo](https://github.com/tiangolo).
+* đ¨ Update translations script to remove old (removed) files. PR [#13928](https://github.com/fastapi/fastapi/pull/13928) by [@tiangolo](https://github.com/tiangolo).
+* âŦ [pre-commit.ci] pre-commit autoupdate. PR [#13894](https://github.com/fastapi/fastapi/pull/13894) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
+* âŦ Update httpx requirement to >=0.23.0,<0.29.0. PR [#13114](https://github.com/fastapi/fastapi/pull/13114) by [@yan12125](https://github.com/yan12125).
+* đ§ Update sponsors: Add Mobb. PR [#13916](https://github.com/fastapi/fastapi/pull/13916) by [@tiangolo](https://github.com/tiangolo).
+* đĨ Update FastAPI People - Experts. PR [#13889](https://github.com/fastapi/fastapi/pull/13889) by [@tiangolo](https://github.com/tiangolo).
+* đ¨ Update FastAPI People sleep interval, use external settings. PR [#13888](https://github.com/fastapi/fastapi/pull/13888) by [@tiangolo](https://github.com/tiangolo).
+
+## 0.116.1
+
+### Upgrades
+
+* âŦī¸ Upgrade Starlette supported version range to `>=0.40.0,<0.48.0`. PR [#13884](https://github.com/fastapi/fastapi/pull/13884) by [@tiangolo](https://github.com/tiangolo).
+
+### Docs
+
+* đ Add notification about impending changes in Translations to `docs/en/docs/contributing.md`. PR [#13886](https://github.com/fastapi/fastapi/pull/13886) by [@YuriiMotov](https://github.com/YuriiMotov).
+
+### Internal
+
+* âŦ [pre-commit.ci] pre-commit autoupdate. PR [#13871](https://github.com/fastapi/fastapi/pull/13871) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
+
+## 0.116.0
+
+### Features
+
+* ⨠Add support for deploying to FastAPI Cloud with `fastapi deploy`. PR [#13870](https://github.com/fastapi/fastapi/pull/13870) by [@tiangolo](https://github.com/tiangolo).
+
+Installing `fastapi[standard]` now includes `fastapi-cloud-cli`.
+
+This will allow you to deploy to [FastAPI Cloud](https://fastapicloud.com) with the `fastapi deploy` command.
+
+If you want to install `fastapi` with the standard dependencies but without `fastapi-cloud-cli`, you can install instead `fastapi[standard-no-fastapi-cloud-cli]`.
+
+### Translations
+
+* đ Add Russian translation for `docs/ru/docs/advanced/response-directly.md`. PR [#13801](https://github.com/fastapi/fastapi/pull/13801) by [@NavesSapnis](https://github.com/NavesSapnis).
+* đ Add Russian translation for `docs/ru/docs/advanced/additional-status-codes.md`. PR [#13799](https://github.com/fastapi/fastapi/pull/13799) by [@NavesSapnis](https://github.com/NavesSapnis).
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/body-updates.md`. PR [#13804](https://github.com/fastapi/fastapi/pull/13804) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+
+### Internal
+
+* âŦ Bump pillow from 11.1.0 to 11.3.0. PR [#13852](https://github.com/fastapi/fastapi/pull/13852) by [@dependabot[bot]](https://github.com/apps/dependabot).
+* đĨ Update FastAPI People - Sponsors. PR [#13846](https://github.com/fastapi/fastapi/pull/13846) by [@tiangolo](https://github.com/tiangolo).
+* đĨ Update FastAPI GitHub topic repositories. PR [#13848](https://github.com/fastapi/fastapi/pull/13848) by [@tiangolo](https://github.com/tiangolo).
+* âŦ Bump mkdocs-material from 9.6.1 to 9.6.15. PR [#13849](https://github.com/fastapi/fastapi/pull/13849) by [@dependabot[bot]](https://github.com/apps/dependabot).
+* âŦ [pre-commit.ci] pre-commit autoupdate. PR [#13843](https://github.com/fastapi/fastapi/pull/13843) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
+* đĨ Update FastAPI People - Contributors and Translators. PR [#13845](https://github.com/fastapi/fastapi/pull/13845) by [@tiangolo](https://github.com/tiangolo).
+
+## 0.115.14
+
+### Fixes
+
+* đ Fix support for unions when using `Form`. PR [#13827](https://github.com/fastapi/fastapi/pull/13827) by [@patrick91](https://github.com/patrick91).
+
+### Docs
+
+* âī¸ Fix grammar mistake in `docs/en/docs/advanced/response-directly.md`. PR [#13800](https://github.com/fastapi/fastapi/pull/13800) by [@NavesSapnis](https://github.com/NavesSapnis).
+* đ Update Speakeasy URL to Speakeasy Sandbox. PR [#13697](https://github.com/fastapi/fastapi/pull/13697) by [@ndimares](https://github.com/ndimares).
+
+### Translations
+
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/response-model.md`. PR [#13792](https://github.com/fastapi/fastapi/pull/13792) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/security/index.md`. PR [#13805](https://github.com/fastapi/fastapi/pull/13805) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* âī¸ Fix typo in `docs/ja/docs/tutorial/encoder.md`. PR [#13815](https://github.com/fastapi/fastapi/pull/13815) by [@ruzia](https://github.com/ruzia).
+* âī¸ Fix typo in `docs/ja/docs/tutorial/handling-errors.md`. PR [#13814](https://github.com/fastapi/fastapi/pull/13814) by [@ruzia](https://github.com/ruzia).
+* âī¸ Fix typo in `docs/ja/docs/tutorial/body-fields.md`. PR [#13802](https://github.com/fastapi/fastapi/pull/13802) by [@ruzia](https://github.com/ruzia).
+* đ Add Russian translation for `docs/ru/docs/advanced/index.md`. PR [#13797](https://github.com/fastapi/fastapi/pull/13797) by [@NavesSapnis](https://github.com/NavesSapnis).
+
+### Internal
+
+* âŦ [pre-commit.ci] pre-commit autoupdate. PR [#13823](https://github.com/fastapi/fastapi/pull/13823) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
+
+## 0.115.13
+
+### Fixes
+
+* đ Fix truncating the model's description with form feed (`\f`) character for Pydantic V2. PR [#13698](https://github.com/fastapi/fastapi/pull/13698) by [@YuriiMotov](https://github.com/YuriiMotov).
+
+### Refactors
+
+* ⨠Add `refreshUrl` parameter in `OAuth2PasswordBearer`. PR [#11460](https://github.com/fastapi/fastapi/pull/11460) by [@snosratiershad](https://github.com/snosratiershad).
+* đ¸ Set format to password for fields `password` and `client_secret` in `OAuth2PasswordRequestForm`, make docs show password fields for passwords. PR [#11032](https://github.com/fastapi/fastapi/pull/11032) by [@Thodoris1999](https://github.com/Thodoris1999).
+* â
Simplify tests for `settings`. PR [#13505](https://github.com/fastapi/fastapi/pull/13505) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* â
Simplify tests for `validate_response_recursive`. PR [#13507](https://github.com/fastapi/fastapi/pull/13507) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+
+### Upgrades
+
+* âŦī¸ Update ReDoc to version 2.x. PR [#9700](https://github.com/fastapi/fastapi/pull/9700) by [@joakimnordling](https://github.com/joakimnordling).
+
+### Docs
+
+* đ Add annotations to HTTP middleware example. PR [#11530](https://github.com/fastapi/fastapi/pull/11530) by [@Kilo59](https://github.com/Kilo59).
+* đ Clarify in CORS docs that wildcards and credentials are mutually exclusive. PR [#9829](https://github.com/fastapi/fastapi/pull/9829) by [@dfioravanti](https://github.com/dfioravanti).
+* âī¸ Fix typo in docstring. PR [#13532](https://github.com/fastapi/fastapi/pull/13532) by [@comp64](https://github.com/comp64).
+* đ Clarify guidance on using `async def` without `await`. PR [#13642](https://github.com/fastapi/fastapi/pull/13642) by [@swastikpradhan1999](https://github.com/swastikpradhan1999).
+* đ Update exclude-parameters-from-openapi documentation links. PR [#13600](https://github.com/fastapi/fastapi/pull/13600) by [@timonrieger](https://github.com/timonrieger).
+* đ Clarify the middleware execution order in docs. PR [#13699](https://github.com/fastapi/fastapi/pull/13699) by [@YuriiMotov](https://github.com/YuriiMotov).
+* đą Update Drawio diagrams SVGs, single file per diagram, sans-serif font. PR [#13706](https://github.com/fastapi/fastapi/pull/13706) by [@tiangolo](https://github.com/tiangolo).
+* đ Update docs for "Help FastAPI", simplify and reduce "sponsor" section. PR [#13670](https://github.com/fastapi/fastapi/pull/13670) by [@tiangolo](https://github.com/tiangolo).
+* đ Remove unnecessary bullet from docs. PR [#13641](https://github.com/fastapi/fastapi/pull/13641) by [@Adamowoc](https://github.com/Adamowoc).
+* âī¸ Fix syntax error in `docs/en/docs/tutorial/handling-errors.md`. PR [#13623](https://github.com/fastapi/fastapi/pull/13623) by [@gsheni](https://github.com/gsheni).
+* đ Fix typo in documentation. PR [#13599](https://github.com/fastapi/fastapi/pull/13599) by [@Taoup](https://github.com/Taoup).
+* đ Fix liblab client generation doc link. PR [#13571](https://github.com/fastapi/fastapi/pull/13571) by [@EFord36](https://github.com/EFord36).
+* âī¸ Fix talk information typo. PR [#13544](https://github.com/fastapi/fastapi/pull/13544) by [@blueswen](https://github.com/blueswen).
+* đ Add External Link: Taiwanese talk on FastAPI with observability . PR [#13527](https://github.com/fastapi/fastapi/pull/13527) by [@blueswen](https://github.com/blueswen).
+
+### Translations
+
+* đ Add Russian Translation for `docs/ru/docs/advanced/response-change-status-code.md`. PR [#13791](https://github.com/fastapi/fastapi/pull/13791) by [@NavesSapnis](https://github.com/NavesSapnis).
+* đ Add Persian translation for `docs/fa/docs/learn/index.md`. PR [#13518](https://github.com/fastapi/fastapi/pull/13518) by [@Mohammad222PR](https://github.com/Mohammad222PR).
+* đ Add Korean translation for `docs/ko/docs/advanced/sub-applications.md`. PR [#4543](https://github.com/fastapi/fastapi/pull/4543) by [@NinaHwang](https://github.com/NinaHwang).
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/schema-extra-example.md`. PR [#13769](https://github.com/fastapi/fastapi/pull/13769) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* âī¸ Remove redundant words in docs/zh/docs/python-types.md. PR [#13774](https://github.com/fastapi/fastapi/pull/13774) by [@CharleeWa](https://github.com/CharleeWa).
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/query-param-models.md`. PR [#13748](https://github.com/fastapi/fastapi/pull/13748) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* đ Add Bengali translation for `docs/bn/docs/environment-variables.md`. PR [#13629](https://github.com/fastapi/fastapi/pull/13629) by [@SakibSibly](https://github.com/SakibSibly).
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/query-params-str-validations.md` page. PR [#13546](https://github.com/fastapi/fastapi/pull/13546) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* đ Add Russian translation for `docs/ru/docs/tutorial/cookie-param-models.md`. PR [#13616](https://github.com/fastapi/fastapi/pull/13616) by [@EgorOnishchuk](https://github.com/EgorOnishchuk).
+* đ Add Korean translation for `docs/ko/docs/tutorial/extra-models.md`. PR [#13063](https://github.com/fastapi/fastapi/pull/13063) by [@timothy-jeong](https://github.com/timothy-jeong).
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/path-params-numeric-validations.md` page. PR [#13548](https://github.com/fastapi/fastapi/pull/13548) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/middleware.md` page. PR [#13520](https://github.com/fastapi/fastapi/pull/13520) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/background-tasks.md` page. PR [#13502](https://github.com/fastapi/fastapi/pull/13502) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/cors.md` page. PR [#13519](https://github.com/fastapi/fastapi/pull/13519) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* đ Update Korean translation for `docs/ko/docs/advanced/events.md`. PR [#13487](https://github.com/fastapi/fastapi/pull/13487) by [@bom1215](https://github.com/bom1215).
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/handling-errors.md` page. PR [#13420](https://github.com/fastapi/fastapi/pull/13420) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* đ Add Russian translation for `docs/ru/docs/tutorial/request-form-models.md`. PR [#13552](https://github.com/fastapi/fastapi/pull/13552) by [@EgorOnishchuk](https://github.com/EgorOnishchuk).
+* đ Fix internal anchor link in Spanish deployment docs. PR [#13737](https://github.com/fastapi/fastapi/pull/13737) by [@fabianfalon](https://github.com/fabianfalon).
+* đ Update Korean translation for `docs/ko/docs/virtual-environments.md`. PR [#13630](https://github.com/fastapi/fastapi/pull/13630) by [@sungchan1](https://github.com/sungchan1).
+* đ Add Russian translation for `docs/ru/docs/tutorial/header-param-models.md`. PR [#13526](https://github.com/fastapi/fastapi/pull/13526) by [@minaton-ru](https://github.com/minaton-ru).
+* đ Update Chinese translation for `docs/zh/docs/tutorial/index.md`. PR [#13374](https://github.com/fastapi/fastapi/pull/13374) by [@Zhongheng-Cheng](https://github.com/Zhongheng-Cheng).
+* đ Update Chinese translation for `docs/zh/docs/deployment/manually.md`. PR [#13324](https://github.com/fastapi/fastapi/pull/13324) by [@Zhongheng-Cheng](https://github.com/Zhongheng-Cheng).
+* đ Update Chinese translation for `docs/zh/docs/deployment/server-workers.md`. PR [#13292](https://github.com/fastapi/fastapi/pull/13292) by [@Zhongheng-Cheng](https://github.com/Zhongheng-Cheng).
+* đ Update Chinese translation for `docs/zh/docs/tutorial/first-steps.md`. PR [#13348](https://github.com/fastapi/fastapi/pull/13348) by [@Zhongheng-Cheng](https://github.com/Zhongheng-Cheng).
+
+### Internal
+
+* đ¨ Resolve Pydantic deprecation warnings in internal script. PR [#13696](https://github.com/fastapi/fastapi/pull/13696) by [@emmanuel-ferdman](https://github.com/emmanuel-ferdman).
+* đ§ Update sponsors: remove Porter. PR [#13783](https://github.com/fastapi/fastapi/pull/13783) by [@tiangolo](https://github.com/tiangolo).
+* âŦ [pre-commit.ci] pre-commit autoupdate. PR [#13781](https://github.com/fastapi/fastapi/pull/13781) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
+* âŦ [pre-commit.ci] pre-commit autoupdate. PR [#13757](https://github.com/fastapi/fastapi/pull/13757) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
+* âŦ Bump griffe-typingdoc from 0.2.7 to 0.2.8. PR [#13751](https://github.com/fastapi/fastapi/pull/13751) by [@dependabot[bot]](https://github.com/apps/dependabot).
+* đą Update sponsors: Dribia badge size. PR [#13773](https://github.com/fastapi/fastapi/pull/13773) by [@tiangolo](https://github.com/tiangolo).
+* đ§ Update sponsors: add Dribia. PR [#13771](https://github.com/fastapi/fastapi/pull/13771) by [@tiangolo](https://github.com/tiangolo).
+* âŦ Bump typer from 0.15.3 to 0.16.0. PR [#13752](https://github.com/fastapi/fastapi/pull/13752) by [@dependabot[bot]](https://github.com/apps/dependabot).
+* đĨ Update FastAPI GitHub topic repositories. PR [#13754](https://github.com/fastapi/fastapi/pull/13754) by [@tiangolo](https://github.com/tiangolo).
+* đĨ Update FastAPI People - Sponsors. PR [#13750](https://github.com/fastapi/fastapi/pull/13750) by [@tiangolo](https://github.com/tiangolo).
+* đĨ Update FastAPI People - Contributors and Translators. PR [#13749](https://github.com/fastapi/fastapi/pull/13749) by [@tiangolo](https://github.com/tiangolo).
+* âŦ [pre-commit.ci] pre-commit autoupdate. PR [#13736](https://github.com/fastapi/fastapi/pull/13736) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
+* đ§ Update sponsors: Add InterviewPal. PR [#13728](https://github.com/fastapi/fastapi/pull/13728) by [@tiangolo](https://github.com/tiangolo).
+* đ§ Remove Google Analytics. PR [#13727](https://github.com/fastapi/fastapi/pull/13727) by [@tiangolo](https://github.com/tiangolo).
+* đ§ Update sponsors: remove MongoDB. PR [#13725](https://github.com/fastapi/fastapi/pull/13725) by [@tiangolo](https://github.com/tiangolo).
+* âŦ [pre-commit.ci] pre-commit autoupdate. PR [#13711](https://github.com/fastapi/fastapi/pull/13711) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
+* đ§ Update sponsors: add Subtotal. PR [#13701](https://github.com/fastapi/fastapi/pull/13701) by [@tiangolo](https://github.com/tiangolo).
+* đ§ Update sponsors: remove deepset / Haystack. PR [#13700](https://github.com/fastapi/fastapi/pull/13700) by [@tiangolo](https://github.com/tiangolo).
+* âŦ [pre-commit.ci] pre-commit autoupdate. PR [#13688](https://github.com/fastapi/fastapi/pull/13688) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
+* đĨ Update FastAPI People - Experts. PR [#13671](https://github.com/fastapi/fastapi/pull/13671) by [@tiangolo](https://github.com/tiangolo).
+* âŦ Bump typer from 0.12.5 to 0.15.3. PR [#13666](https://github.com/fastapi/fastapi/pull/13666) by [@dependabot[bot]](https://github.com/apps/dependabot).
+* âŦ Bump sqlmodel from 0.0.23 to 0.0.24. PR [#13665](https://github.com/fastapi/fastapi/pull/13665) by [@dependabot[bot]](https://github.com/apps/dependabot).
+* đ§ Update Sponsors: Zuplo logo and alt text. PR [#13645](https://github.com/fastapi/fastapi/pull/13645) by [@martyndavies](https://github.com/martyndavies).
+* đĨ Update FastAPI GitHub topic repositories. PR [#13667](https://github.com/fastapi/fastapi/pull/13667) by [@tiangolo](https://github.com/tiangolo).
+* đ§ Update links for LinkedIn and bottom. PR [#13669](https://github.com/fastapi/fastapi/pull/13669) by [@tiangolo](https://github.com/tiangolo).
+* đ§ Update sponsors: remove Bump.sh and Coherence. PR [#13668](https://github.com/fastapi/fastapi/pull/13668) by [@tiangolo](https://github.com/tiangolo).
+* đĨ Update FastAPI People - Sponsors. PR [#13664](https://github.com/fastapi/fastapi/pull/13664) by [@tiangolo](https://github.com/tiangolo).
+* đĨ Update FastAPI People - Contributors and Translators. PR [#13662](https://github.com/fastapi/fastapi/pull/13662) by [@tiangolo](https://github.com/tiangolo).
+* âŦ [pre-commit.ci] pre-commit autoupdate. PR [#13656](https://github.com/fastapi/fastapi/pull/13656) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
+* â
Use `inline-snapshot` to support different Pydantic versions in the test suite. PR [#12534](https://github.com/fastapi/fastapi/pull/12534) by [@15r10nk](https://github.com/15r10nk).
+* âŦ Bump astral-sh/setup-uv from 5 to 6. PR [#13648](https://github.com/fastapi/fastapi/pull/13648) by [@dependabot[bot]](https://github.com/apps/dependabot).
+* âŦ [pre-commit.ci] pre-commit autoupdate. PR [#13634](https://github.com/fastapi/fastapi/pull/13634) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
+* âŦ [pre-commit.ci] pre-commit autoupdate. PR [#13619](https://github.com/fastapi/fastapi/pull/13619) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
+* âŦ [pre-commit.ci] pre-commit autoupdate. PR [#13594](https://github.com/fastapi/fastapi/pull/13594) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
+* đĨ Update FastAPI People - Experts. PR [#13568](https://github.com/fastapi/fastapi/pull/13568) by [@tiangolo](https://github.com/tiangolo).
+* đĨ Update FastAPI GitHub topic repositories. PR [#13565](https://github.com/fastapi/fastapi/pull/13565) by [@tiangolo](https://github.com/tiangolo).
+* đĨ Update FastAPI People - Sponsors. PR [#13559](https://github.com/fastapi/fastapi/pull/13559) by [@tiangolo](https://github.com/tiangolo).
+* đĨ Update FastAPI People - Contributors and Translators. PR [#13558](https://github.com/fastapi/fastapi/pull/13558) by [@tiangolo](https://github.com/tiangolo).
+* âŦ Bump dirty-equals from 0.8.0 to 0.9.0. PR [#13561](https://github.com/fastapi/fastapi/pull/13561) by [@dependabot[bot]](https://github.com/apps/dependabot).
+* đ§ Clean up `docs/en/mkdocs.yml` configuration file. PR [#13542](https://github.com/fastapi/fastapi/pull/13542) by [@svlandeg](https://github.com/svlandeg).
+* âŦ [pre-commit.ci] pre-commit autoupdate. PR [#12986](https://github.com/fastapi/fastapi/pull/12986) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
+
+## 0.115.12
+
+### Fixes
+
+* đ Fix `convert_underscores=False` for header Pydantic models. PR [#13515](https://github.com/fastapi/fastapi/pull/13515) by [@tiangolo](https://github.com/tiangolo).
+
+### Docs
+
+* đ Update `docs/en/docs/tutorial/middleware.md`. PR [#13444](https://github.com/fastapi/fastapi/pull/13444) by [@Rishat-F](https://github.com/Rishat-F).
+* đĨ Update FastAPI People - Experts. PR [#13493](https://github.com/fastapi/fastapi/pull/13493) by [@tiangolo](https://github.com/tiangolo).
+
### Translations
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/metadata.md` page. PR [#13459](https://github.com/fastapi/fastapi/pull/13459) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/response-status-code.md` page. PR [#13462](https://github.com/fastapi/fastapi/pull/13462) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/cookie-param-models.md` page. PR [#13460](https://github.com/fastapi/fastapi/pull/13460) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* đ Add Ukrainian translation for `docs/uk/docs/tutorial/header-param-models.md` page. PR [#13461](https://github.com/fastapi/fastapi/pull/13461) by [@valentinDruzhinin](https://github.com/valentinDruzhinin).
+* đ Add Japanese translation for `docs/ja/docs/virtual-environments.md`. PR [#13304](https://github.com/fastapi/fastapi/pull/13304) by [@k94-ishi](https://github.com/k94-ishi).
* đ Add Korean translation for `docs/ko/docs/tutorial/security/oauth2-jwt.md`. PR [#13333](https://github.com/fastapi/fastapi/pull/13333) by [@yes0ng](https://github.com/yes0ng).
* đ Add Vietnamese translation for `docs/vi/docs/deployment/cloud.md`. PR [#13407](https://github.com/fastapi/fastapi/pull/13407) by [@ptt3199](https://github.com/ptt3199).
### Internal
+* âŦ Bump pydantic-ai from 0.0.15 to 0.0.30. PR [#13438](https://github.com/fastapi/fastapi/pull/13438) by [@dependabot[bot]](https://github.com/apps/dependabot).
* âŦ Bump sqlmodel from 0.0.22 to 0.0.23. PR [#13437](https://github.com/fastapi/fastapi/pull/13437) by [@dependabot[bot]](https://github.com/apps/dependabot).
* âŦ Bump black from 24.10.0 to 25.1.0. PR [#13436](https://github.com/fastapi/fastapi/pull/13436) by [@dependabot[bot]](https://github.com/apps/dependabot).
* âŦ Bump ruff to 0.9.4. PR [#13299](https://github.com/fastapi/fastapi/pull/13299) by [@dependabot[bot]](https://github.com/apps/dependabot).
diff --git a/docs/en/docs/tutorial/bigger-applications.md b/docs/en/docs/tutorial/bigger-applications.md
index 605ced0d3..f5f29a173 100644
--- a/docs/en/docs/tutorial/bigger-applications.md
+++ b/docs/en/docs/tutorial/bigger-applications.md
@@ -52,7 +52,7 @@ from app.routers import items
* There's also a subdirectory `app/internal/` with another file `__init__.py`, so it's another "Python subpackage": `app.internal`.
* And the file `app/internal/admin.py` is another submodule: `app.internal.admin`.
-
+
The same file structure with comments:
@@ -270,7 +270,7 @@ But that file doesn't exist, our dependencies are in a file at `app/dependencies
Remember how our app/file structure looks like:
-
+
---
diff --git a/docs/en/docs/tutorial/cors.md b/docs/en/docs/tutorial/cors.md
index cf31cfcf5..5ca4437b3 100644
--- a/docs/en/docs/tutorial/cors.md
+++ b/docs/en/docs/tutorial/cors.md
@@ -57,7 +57,10 @@ The following arguments are supported:
* `allow_origin_regex` - A regex string to match against origins that should be permitted to make cross-origin requests. e.g. `'https://.*\.example\.org'`.
* `allow_methods` - A list of HTTP methods that should be allowed for cross-origin requests. Defaults to `['GET']`. You can use `['*']` to allow all standard methods.
* `allow_headers` - A list of HTTP request headers that should be supported for cross-origin requests. Defaults to `[]`. You can use `['*']` to allow all headers. The `Accept`, `Accept-Language`, `Content-Language` and `Content-Type` headers are always allowed for simple CORS requests .
-* `allow_credentials` - Indicate that cookies should be supported for cross-origin requests. Defaults to `False`. Also, `allow_origins` cannot be set to `['*']` for credentials to be allowed, origins must be specified.
+* `allow_credentials` - Indicate that cookies should be supported for cross-origin requests. Defaults to `False`.
+
+ None of `allow_origins`, `allow_methods` and `allow_headers` can be set to `['*']` if `allow_credentials` is set to `True`. All of them must be explicitly specified .
+
* `expose_headers` - Indicate any response headers that should be made accessible to the browser. Defaults to `[]`.
* `max_age` - Sets a maximum time in seconds for browsers to cache CORS responses. Defaults to `600`.
diff --git a/docs/en/docs/tutorial/handling-errors.md b/docs/en/docs/tutorial/handling-errors.md
index 4d969747f..5b8e677e4 100644
--- a/docs/en/docs/tutorial/handling-errors.md
+++ b/docs/en/docs/tutorial/handling-errors.md
@@ -35,7 +35,7 @@ Because it's a Python exception, you don't `return` it, you `raise` it.
This also means that if you are inside a utility function that you are calling inside of your *path operation function*, and you raise the `HTTPException` from inside of that utility function, it won't run the rest of the code in the *path operation function*, it will terminate that request right away and send the HTTP error from the `HTTPException` to the client.
-The benefit of raising an exception over `return`ing a value will be more evident in the section about Dependencies and Security.
+The benefit of raising an exception over returning a value will be more evident in the section about Dependencies and Security.
In this example, when the client requests an item by an ID that doesn't exist, raise an exception with a status code of `404`:
@@ -252,4 +252,4 @@ If you want to use the exception along with the same default exception handlers
{* ../../docs_src/handling_errors/tutorial006.py hl[2:5,15,21] *}
-In this example you are just `print`ing the error with a very expressive message, but you get the idea. You can use the exception and then just reuse the default exception handlers.
+In this example you are just printing the error with a very expressive message, but you get the idea. You can use the exception and then just reuse the default exception handlers.
diff --git a/docs/en/docs/tutorial/header-param-models.md b/docs/en/docs/tutorial/header-param-models.md
index 73950a668..4cdf09705 100644
--- a/docs/en/docs/tutorial/header-param-models.md
+++ b/docs/en/docs/tutorial/header-param-models.md
@@ -51,6 +51,22 @@ For example, if the client tries to send a `tool` header with a value of `plumbu
}
```
+## Disable Convert Underscores
+
+The same way as with regular header parameters, when you have underscore characters in the parameter names, they are **automatically converted to hyphens**.
+
+For example, if you have a header parameter `save_data` in the code, the expected HTTP header will be `save-data`, and it will show up like that in the docs.
+
+If for some reason you need to disable this automatic conversion, you can do it as well for Pydantic models for header parameters.
+
+{* ../../docs_src/header_param_models/tutorial003_an_py310.py hl[19] *}
+
+/// warning
+
+Before setting `convert_underscores` to `False`, bear in mind that some HTTP proxies and servers disallow the usage of headers with underscores.
+
+///
+
## Summary
You can use **Pydantic models** to declare **headers** in **FastAPI**. đ
diff --git a/docs/en/docs/tutorial/index.md b/docs/en/docs/tutorial/index.md
index 4fe38256c..17f6fb685 100644
--- a/docs/en/docs/tutorial/index.md
+++ b/docs/en/docs/tutorial/index.md
@@ -76,10 +76,12 @@ $ pip install "fastapi[standard]"
/// note
-When you install with `pip install "fastapi[standard]"` it comes with some default optional standard dependencies.
+When you install with `pip install "fastapi[standard]"` it comes with some default optional standard dependencies, including `fastapi-cloud-cli`, which allows you to deploy to FastAPI Cloud .
If you don't want to have those optional dependencies, you can instead install `pip install fastapi`.
+If you want to install the standard dependencies but without the `fastapi-cloud-cli`, you can install with `pip install "fastapi[standard-no-fastapi-cloud-cli]"`.
+
///
## Advanced User Guide
diff --git a/docs/en/docs/tutorial/middleware.md b/docs/en/docs/tutorial/middleware.md
index 53c47a085..b7c03a319 100644
--- a/docs/en/docs/tutorial/middleware.md
+++ b/docs/en/docs/tutorial/middleware.md
@@ -15,7 +15,7 @@ A "middleware" is a function that works with every **request** before it is proc
If you have dependencies with `yield`, the exit code will run *after* the middleware.
-If there were any background tasks (documented later), they will run *after* all the middleware.
+If there were any background tasks (covered in the [Background Tasks](background-tasks.md){.internal-link target=_blank} section, you will see it later), they will run *after* all the middleware.
///
@@ -65,6 +65,29 @@ Here we use -
- Thanks for your feedback!
- - icon: material/emoticon-sad-outline
- name: This page could be improved
- data: 0
- note: >-
- Thanks for your feedback!
social:
- icon: fontawesome/brands/github-alt
link: https://github.com/fastapi/fastapi
@@ -331,14 +297,9 @@ extra:
- icon: fontawesome/brands/twitter
link: https://twitter.com/fastapi
- 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
+ link: https://www.linkedin.com/company/fastapi
- icon: fontawesome/solid/globe
link: https://tiangolo.com
-
alternate:
- link: /
name: en - English
@@ -390,14 +351,11 @@ extra:
name: zh-hant - įšéĢ䏿
- link: /em/
name: đ
-
extra_css:
- css/termynal.css
- css/custom.css
-
extra_javascript:
- js/termynal.js
- js/custom.js
-
hooks:
- ../../scripts/mkdocs_hooks.py
diff --git a/docs/en/overrides/main.html b/docs/en/overrides/main.html
index 30973bfcb..22630e188 100644
--- a/docs/en/overrides/main.html
+++ b/docs/en/overrides/main.html
@@ -10,6 +10,13 @@
Follow @fastapi on Twitter to stay updated
+
-
@@ -34,18 +38,6 @@
-
-
-
-
+
+
{% endblock %}
diff --git a/docs/es/docs/advanced/generate-clients.md b/docs/es/docs/advanced/generate-clients.md
index bf2e5cb4f..b664bceac 100644
--- a/docs/es/docs/advanced/generate-clients.md
+++ b/docs/es/docs/advanced/generate-clients.md
@@ -22,7 +22,7 @@ Y muestra su verdadero compromiso con FastAPI y su **comunidad** (tÃē), ya que n
Por ejemplo, podrÃas querer probar:
-* Speakeasy
+* Speakeasy
* Stainless
* liblab
diff --git a/docs/es/docs/deployment/concepts.md b/docs/es/docs/deployment/concepts.md
index f5725c5dc..bcc7948bc 100644
--- a/docs/es/docs/deployment/concepts.md
+++ b/docs/es/docs/deployment/concepts.md
@@ -216,7 +216,7 @@ Este Proceso Administrador probablemente serÃa el que escuche en el **puerto**
Esos worker processes serÃan los que ejecutan tu aplicaciÃŗn, realizarÃan los cÃĄlculos principales para recibir un **request** y devolver un **response**, y cargarÃan cualquier cosa que pongas en variables en RAM.
-
+
Y por supuesto, la misma mÃĄquina probablemente tendrÃa **otros procesos** ejecutÃĄndose tambiÊn, aparte de tu aplicaciÃŗn.
diff --git a/docs/es/docs/deployment/docker.md b/docs/es/docs/deployment/docker.md
index ff204f078..3a39d3661 100644
--- a/docs/es/docs/deployment/docker.md
+++ b/docs/es/docs/deployment/docker.md
@@ -6,7 +6,7 @@ Usar contenedores de Linux tiene varias ventajas, incluyendo **seguridad**, **re
/// tip | Consejo
-ÂŋTienes prisa y ya conoces esto? Salta al [`Dockerfile` mÃĄs abajo đ](#build-a-docker-image-for-fastapi).
+ÂŋTienes prisa y ya conoces esto? Salta al [`Dockerfile` mÃĄs abajo đ](#construir-una-imagen-de-docker-para-fastapi).
///
diff --git a/docs/es/docs/deployment/https.md b/docs/es/docs/deployment/https.md
index f2871ac03..3ccb5dc47 100644
--- a/docs/es/docs/deployment/https.md
+++ b/docs/es/docs/deployment/https.md
@@ -85,7 +85,7 @@ Primero, el navegador consultarÃa con los **servidores DNS** cuÃĄl es la **IP d
Los servidores DNS le dirÃan al navegador que use una **direcciÃŗn IP** especÃfica. Esa serÃa la direcciÃŗn IP pÃēblica utilizada por tu servidor, que configuraste en los servidores DNS.
-
+
### Inicio del Handshake TLS
@@ -93,7 +93,7 @@ El navegador luego se comunicarÃa con esa direcciÃŗn IP en el **puerto 443** (e
La primera parte de la comunicaciÃŗn es solo para establecer la conexiÃŗn entre el cliente y el servidor y decidir las claves criptogrÃĄficas que usarÃĄn, etc.
-
+
Esta interacciÃŗn entre el cliente y el servidor para establecer la conexiÃŗn TLS se llama **handshake TLS**.
@@ -111,7 +111,7 @@ Usando la **extensiÃŗn SNI** discutida anteriormente, el TLS Termination Proxy v
En este caso, usarÃa el certificado para `someapp.example.com`.
-
+
El cliente ya **confÃa** en la entidad que generÃŗ ese certificado TLS (en este caso Let's Encrypt, pero lo veremos mÃĄs adelante), por lo que puede **verificar** que el certificado sea vÃĄlido.
@@ -133,19 +133,19 @@ Ahora que el cliente y el servidor (especÃficamente el navegador y el TLS Termi
Asà que, el cliente envÃa un **request HTTPS**. Esto es simplemente un request HTTP a travÊs de una conexiÃŗn TLS encriptada.
-
+
### Desencriptar el Request
El TLS Termination Proxy usarÃa la encriptaciÃŗn acordada para **desencriptar el request**, y transmitirÃa el **request HTTP simple (desencriptado)** al proceso que ejecuta la aplicaciÃŗn (por ejemplo, un proceso con Uvicorn ejecutando la aplicaciÃŗn FastAPI).
-
+
### Response HTTP
La aplicaciÃŗn procesarÃa el request y enviarÃa un **response HTTP simple (sin encriptar)** al TLS Termination Proxy.
-
+
### Response HTTPS
@@ -153,7 +153,7 @@ El TLS Termination Proxy entonces **encriptarÃa el response** usando la criptog
Luego, el navegador verificarÃa que el response sea vÃĄlido y encriptado con la clave criptogrÃĄfica correcta, etc. Entonces **desencriptarÃa el response** y lo procesarÃa.
-
+
El cliente (navegador) sabrÃĄ que el response proviene del servidor correcto porque estÃĄ utilizando la criptografÃa que acordaron usando el **certificado HTTPS** anteriormente.
@@ -163,7 +163,7 @@ En el mismo servidor (o servidores), podrÃan haber **mÃēltiples aplicaciones**,
Solo un proceso puede estar gestionando la IP y puerto especÃfica (el TLS Termination Proxy en nuestro ejemplo) pero las otras aplicaciones/procesos pueden estar ejecutÃĄndose en el/los servidor(es) tambiÊn, siempre y cuando no intenten usar la misma **combinaciÃŗn de IP pÃēblica y puerto**.
-
+
De esa manera, el TLS Termination Proxy podrÃa gestionar HTTPS y certificados para **mÃēltiples dominios**, para mÃēltiples aplicaciones, y luego transmitir los requests a la aplicaciÃŗn correcta en cada caso.
@@ -173,7 +173,7 @@ En algÃēn momento en el futuro, cada certificado **expirarÃa** (alrededor de 3
Y entonces, habrÃa otro programa (en algunos casos es otro programa, en algunos casos podrÃa ser el mismo TLS Termination Proxy) que hablarÃa con Let's Encrypt y renovarÃa el/los certificado(s).
-
+
Los **certificados TLS** estÃĄn **asociados con un nombre de dominio**, no con una direcciÃŗn IP.
diff --git a/docs/es/docs/how-to/custom-docs-ui-assets.md b/docs/es/docs/how-to/custom-docs-ui-assets.md
index 444cf167e..0a03ff330 100644
--- a/docs/es/docs/how-to/custom-docs-ui-assets.md
+++ b/docs/es/docs/how-to/custom-docs-ui-assets.md
@@ -98,7 +98,7 @@ Probablemente puedas hacer clic derecho en cada enlace y seleccionar una opciÃŗn
Y **ReDoc** utiliza el archivo:
-* `redoc.standalone.js`
+* `redoc.standalone.js`
DespuÊs de eso, tu estructura de archivos podrÃa verse asÃ:
@@ -129,14 +129,8 @@ DeberÃas ver un archivo JavaScript muy largo de **ReDoc**.
PodrÃa comenzar con algo como:
```JavaScript
-/*!
- * ReDoc - OpenAPI/Swagger-generated API Reference Documentation
- * -------------------------------------------------------------
- * Version: "2.0.0-rc.18"
- * Repo: https://github.com/Redocly/redoc
- */
-!function(e,t){"object"==typeof exports&&"object"==typeof m
-
+/*! For license information please see redoc.standalone.js.LICENSE.txt */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("null")):
...
```
diff --git a/docs/es/docs/tutorial/bigger-applications.md b/docs/es/docs/tutorial/bigger-applications.md
index 78165ef05..c3d8f0686 100644
--- a/docs/es/docs/tutorial/bigger-applications.md
+++ b/docs/es/docs/tutorial/bigger-applications.md
@@ -52,7 +52,7 @@ from app.routers import items
* TambiÊn hay un subdirectorio `app/internal/` con otro archivo `__init__.py`, por lo que es otro "subpaquete de Python": `app.internal`.
* Y el archivo `app/internal/admin.py` es otro submÃŗdulo: `app.internal.admin`.
-
+
La misma estructura de archivos con comentarios:
@@ -270,7 +270,7 @@ Pero ese archivo no existe, nuestras dependencias estÃĄn en un archivo en `app/d
Recuerda cÃŗmo se ve nuestra estructura de aplicaciÃŗn/archivo:
-
+
---
diff --git a/docs/es/llm-prompt.md b/docs/es/llm-prompt.md
index 3340dbc99..936ed9bba 100644
--- a/docs/es/llm-prompt.md
+++ b/docs/es/llm-prompt.md
@@ -4,56 +4,6 @@ Use the informal grammar (use "tÃē" instead of "usted").
For instructions or titles in imperative, keep them in imperative, for example "Edit it" to "EdÃtalo".
-There are special blocks of notes, tips and others that look like:
-
-/// note
-
-To translate it, keep the same line and add the translation after a vertical bar:
-
-/// note | Nota
-
-Some examples:
-
-Source:
-
-/// tip
-
-Result:
-
-/// tip | Consejo
-
-Source:
-
-/// details | Preview
-
-Result:
-
-/// details | Vista previa
-
-Source:
-
-/// warning
-
-Result:
-
-/// warning | Advertencia
-
-Source:
-
-/// info
-
-Result:
-
-/// info | InformaciÃŗn
-
-Source:
-
-/// note | Technical Details
-
-Result:
-
-/// note | Detalles TÊcnicos
-
---
For the next terms, use the following translations:
diff --git a/docs/fa/docs/async.md b/docs/fa/docs/async.md
new file mode 100644
index 000000000..e07374862
--- /dev/null
+++ b/docs/fa/docs/async.md
@@ -0,0 +1,444 @@
+# ŲŲ
âØ˛Ų
اŲÛ Ų async / await
+
+ØŦØ˛ØĻÛØ§ØĒ Ø¯Øą Ų
بਝ ØŗÛŲØĒÚŠØŗ `async def` Ø¨ØąØ§Û *ØĒŲØ§Ø¨Øš ØšŲ
ŲÛØ§ØĒ Ų
ØŗÛØą* Ų ÛŲ ÚŠŲ
ŲžÛØ´âØ˛Ų
ÛŲŲ Ø¯Øą Ų
بਝ ڊد ŲØ§ŲŲ
âØ˛Ų
Ø§ŲØ ŲŲ
âØ˛Ų
اŲÛ Ų Ų
ŲØ§Ø˛ÛâØŗØ§Ø˛Û.
+
+## ØšØŦŲŲ Ø¯Ø§ØąÛØ
+
+TL;DR:
+
+Ø§Ú¯Ų Ø§Ø˛ ÚŠØĒاب؎ŲŲŲâŲØ§Û ØŗŲŲ
âØ´ØŽØĩÛ Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲÛ ÚŠŲ Ø¨ŲØĒ Ų
ÛâÚ¯Ų Ø¨Ø§ `await` ØĩداشŲŲ ÚŠŲÛØ Ų
ØĢŲ:
+
+```Python
+results = await some_library()
+```
+
+اŲŲ ŲŲØĒØ *ØĒŲØ§Ø¨Øš ØšŲ
ŲÛØ§ØĒ Ų
ØŗÛØąØĒ* ØąŲ Ø¨Ø§ `async def` ØĒØšØąÛŲ ÚŠŲØ اÛŲØŦŲØąÛ:
+
+```Python hl_lines="2"
+@app.get('/')
+async def read_results():
+ results = await some_library()
+ return results
+```
+
+/// note
+
+ŲŲØˇ ØĒŲÛ ØĒŲØ§Ø¨ØšÛ ÚŠŲ Ø¨Ø§ `async def` ØŗØ§ØŽØĒŲ Ø´Ø¯Ų Ų
ÛâØĒŲŲÛ Ø§Ø˛ `await` Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ.
+
+///
+
+---
+
+Ø§Ú¯Ų Ø§Ø˛ ÛŲ ÚŠØĒاب؎ŲŲŲ ØŗŲŲ
âØ´ØŽØĩ Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲÛ ÚŠŲ Ø¨Ø§ ÛŲ ÚÛØ˛Û (Ų
ØĢŲ Ø¯ÛØĒØ§Ø¨ÛØŗØ APIØ ØŗÛØŗØĒŲ
ŲØ§ÛŲ Ų ØēÛØąŲ) Ø§ØąØĒØ¨Ø§Øˇ Ø¯Ø§ØąŲ Ų Ø§Ø˛ `await` ŲžØ´ØĒÛØ¨Ø§ŲÛ ŲŲ
ÛâÚŠŲŲ (ÚŠŲ Ø§ŲØ§Ų Ø¨ØąØ§Û Ø¨ÛØ´ØĒØą ÚŠØĒاب؎ŲŲŲâŲØ§Û Ø¯ÛØĒØ§Ø¨ÛØŗ اÛŲØŦŲØąÛŲ)Ø Ø§ŲŲ ŲŲØĒ *ØĒŲØ§Ø¨Øš ØšŲ
ŲÛØ§ØĒ Ų
ØŗÛØąØĒ* ØąŲ ØšØ§Ø¯ÛØ ŲŲØˇ با `def` ØĒØšØąÛŲ ÚŠŲØ اÛŲØŦŲØąÛ:
+
+```Python hl_lines="2"
+@app.get('/')
+def results():
+ results = some_library()
+ return results
+```
+
+---
+
+Ø§Ú¯Ų Ø¨ØąŲØ§Ų
ŲâØ§ØĒ (Ø¨Ų ŲØą Ø¯ŲÛŲÛ) ŲØ§Ø˛Ų
ŲÛØŗØĒ با ÚÛØ˛ دÛÚ¯ŲâØ§Û Ø§ØąØĒØ¨Ø§Øˇ Ø¨ØąŲØąØ§Øą ÚŠŲŲ Ų Ų
ŲØĒØ¸Øą ØŦŲØ§Ø¨Ø´ بŲ
ŲŲŲØ Ø§Ø˛ `async def` Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲ.
+
+---
+
+Ø§Ú¯Ų ŲŲ
ÛâØ¯ŲŲÛ ÚÛÚŠØ§Øą ÚŠŲÛØ Ø§Ø˛ `def` Ų
ØšŲ
ŲŲÛ Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲ.
+
+---
+
+**ØĒŲØŦŲ**: Ų
ÛâØĒŲŲÛ ØĒŲÛ *ØĒŲØ§Ø¨Øš ØšŲ
ŲÛØ§ØĒ Ų
ØŗÛØąØĒ* ŲØą ÚŲØ¯Øą ÚŠŲ ŲØ§Ø˛Ų
Ø¯Ø§ØąÛ `def` Ų `async def` ØąŲ ŲØ§ØˇÛ ÚŠŲÛ Ų ŲØą ڊدŲŲ
ØąŲ Ø¨Ø§ Ø¨ŲØĒØąÛŲ Ú¯Ø˛ÛŲŲ Ø¨ØąØ§ØĒ ØĒØšØąÛŲ ÚŠŲÛ. FastAPI ØŽŲØ¯Ø´ ÚŠØ§Øą Ø¯ØąØŗØĒ ØąŲ Ø¨Ø§ŲØ§Ø´ŲŲ Ø§ŲØŦاŲ
Ų
ÛâØ¯Ų.
+
+Ø¨Ų ŲØą ØØ§ŲØ ØĒŲÛ ŲØą ڊدŲŲ
Ø§Ø˛ Ų
ŲŲØšÛØĒâŲØ§Û Ø¨Ø§ŲØ§Ø FastAPI ŲŲŲØ˛ ŲØ§ŲŲ
âØ˛Ų
Ø§Ų ÚŠØ§Øą Ų
ÛâÚŠŲŲ Ų ØŽÛŲÛ ØŽÛŲÛ ØŗØąÛØš ŲØŗØĒ.
+
+ŲŲÛ Ø¨Ø§ Ø¯ŲØ¨Ø§Ų ÚŠØąØ¯Ų Ų
ØąØ§ØŲ Ø¨Ø§ŲØ§Ø Ų
ÛâØĒŲŲŲ ÛŲ ØŗØąÛ Ø¨ŲÛŲŲâØŗØ§Ø˛Û ØšŲ
ŲÚŠØąØ¯ ŲŲ
بڊŲŲ.
+
+## ØŦØ˛ØĻÛØ§ØĒ ŲŲÛ
+
+ŲØŗØŽŲâŲØ§Û Ų
Ø¯ØąŲ ŲžØ§ÛØĒŲŲ Ø§Ø˛ **"ڊد ŲØ§ŲŲ
âØ˛Ų
اŲ"** با ÚÛØ˛Û ÚŠŲ Ø¨ŲØ´ **"ÚŠØąŲØĒÛŲ"** Ų
ÛâÚ¯Ų ŲžØ´ØĒÛØ¨Ø§ŲÛ Ų
ÛâÚŠŲŲØ با ØŗÛŲØĒÚŠØŗ **`async` Ų `await`**.
+
+Ø¨ÛØ§Ûد اÛŲ ØŦŲ
ŲŲ ØąŲ ØĒÚŠŲâØĒÚŠŲ ØĒŲÛ Ø¨ØŽØ´âŲØ§Û Ø˛ÛØą Ø¨Ø¨ÛŲÛŲ
:
+
+* **ڊد ŲØ§ŲŲ
âØ˛Ų
اŲ**
+* **`async` Ų `await`**
+* **ÚŠØąŲØĒÛŲâŲØ§**
+
+## ڊد ŲØ§ŲŲ
âØ˛Ų
اŲ
+
+ڊد ŲØ§ŲŲ
âØ˛Ų
Ø§Ų ÛØšŲÛ Ø˛Ø¨ŲŲ đŦ ÛŲ ØąØ§ŲÛ Ø¯Ø§ØąŲ ÚŠŲ Ø¨Ų ÚŠØ§Ų
ŲžÛŲØĒØą / Ø¨ØąŲØ§Ų
Ų đ¤ Ø¨Ú¯Ų ØĒŲÛ ÛŲ ØŦØ§Û ÚŠØ¯Ø Ø¨Ø§ÛØ¯ Ų
ŲØĒØ¸Øą بŲ
ŲŲŲ ØĒا *ÛŲ ÚÛØ˛ دÛÚ¯Ų* ÛŲ ØŦØ§Û Ø¯ÛÚ¯Ų ØĒŲ
ŲŲ
بشŲ. ŲØąØļ ÚŠŲ Ø§ŲŲ *ÛŲ ÚÛØ˛ دÛÚ¯Ų* Ø§ØŗŲ
Ø´ "ŲØ§ÛŲ-ØĸØąŲŲ
" đ Ø¨Ø§Ø´Ų.
+
+ŲžØŗØ ØĒŲÛ Ø§ŲŲ Ų
دØĒØ ÚŠØ§Ų
ŲžÛŲØĒØą Ų
ÛâØĒŲŲŲ Ø¨ØąŲ ÛŲ ÚŠØ§Øą دÛÚ¯Ų Ø¨ÚŠŲŲØ ØĒا ŲŲØĒÛ "ŲØ§ÛŲ-ØĸØąŲŲ
" đ ØĒŲ
ŲŲ
بشŲ.
+
+بؚدش ڊاŲ
ŲžÛŲØĒØą / Ø¨ØąŲØ§Ų
Ų đ¤ ŲØą ŲŲØĒ ŲØąØĩØĒÛ Ø¯Ø§Ø´ØĒŲ Ø¨Ø§Ø´Ų Ø¨ØąŲ
ÛâÚ¯ØąØ¯ŲØ ÚŲŲ Ø¯ŲØ¨Ø§ØąŲ Ų
ŲØĒØ¸ØąŲØ ÛØ§ ŲØą ŲŲØĒ ŲŲ
Ų ÚŠØ§ØąÛ ÚŠŲ Ø§ŲŲ ŲØØ¸Ų Ø¯Ø§Ø´ØĒŲ ØĒŲ
ŲŲ
ÚŠØąØ¯Ų. Ų Ų
ÛâØ¨ÛŲŲ ØĸÛØ§ ÚŠØ§ØąØ§ÛÛ ÚŠŲ Ų
ŲØĒØ¸ØąØ´ŲŲ Ø¨ŲØ¯Ų ØĒŲ
ŲŲ
Ø´Ø¯Ų ÛØ§ ŲŲØ Ų ŲØą ÚŠØ§ØąÛ ÚŠŲ Ø¨Ø§ÛØ¯ بڊŲŲ ØąŲ Ø§ŲØŦاŲ
Ų
ÛâØ¯Ų.
+
+Ø¨ØšØ¯Ø Ø§ŲŲ đ¤ Ø§ŲŲÛŲ ÚŠØ§ØąÛ ÚŠŲ ØĒŲ
ŲŲ
Ø´Ø¯Ų (Ų
ØĢŲØ§Ų "ŲØ§ÛŲ-ØĸØąŲŲ
" đ Ų
ا) ØąŲ Ø¨ØąŲ
ÛâØ¯Ø§ØąŲ Ų ŲØą ÚŠØ§ØąÛ ÚŠŲ Ø¨Ø§ÛØ¯ Ø¨Ø§ŲØ§Ø´ بڊŲŲ ØąŲ Ø§Ø¯Ø§Ų
Ų Ų
ÛâØ¯Ų.
+
+اÛŲ "Ų
ŲØĒØ¸Øą ÛŲ ÚÛØ˛ دÛÚ¯Ų Ø¨ŲØ¯Ų" Ų
ØšŲ
ŲŲØ§Ų Ø¨Ų ØšŲ
ŲÛØ§ØĒ I/O Ø§Ø´Ø§ØąŲ Ø¯Ø§ØąŲ ÚŠŲ ŲØŗØ¨ØĒØ§Ų "ØĸØąŲŲ
" ŲØŗØĒŲ (ŲØŗØ¨ØĒ Ø¨Ų ØŗØąØšØĒ ŲžØąØ¯Ø§Ø˛ŲØ¯Ų Ų ØØ§ŲØ¸Ų RAM)Ø Ų
ØĢŲ Ų
ŲØĒØ¸Øą Ų
ŲŲØ¯Ų Ø¨ØąØ§Û:
+
+* دادŲâŲØ§ÛÛ ÚŠŲ Ø§Ø˛ ÚŠŲØ§ÛŲØĒ Ø§Ø˛ ØˇØąÛŲ Ø´Ø¨ÚŠŲ ŲØąØŗØĒØ§Ø¯Ų Ų
ÛâØ´Ų
+* دادŲâŲØ§ÛÛ ÚŠŲ Ø¨ØąŲØ§Ų
ŲâØ§ØĒ ب਺ØĒØ§Ø¯Ų ØĒا Ø§Ø˛ ØˇØąÛŲ Ø´Ø¨ÚŠŲ Ø¨Ų ÚŠŲØ§ÛŲØĒ Ø¨ØąØŗŲ
+* Ų
ØØĒŲØ§Û ÛŲ ŲØ§ÛŲ ØĒŲÛ Ø¯ÛØŗÚŠ ÚŠŲ ØŗÛØŗØĒŲ
ب؎ŲŲØ¯Ø´ Ų Ø¨Ų Ø¨ØąŲØ§Ų
ŲâØ§ØĒ بدŲ
+* Ų
ØØĒŲØ§ÛÛ ÚŠŲ Ø¨ØąŲØ§Ų
ŲâØ§ØĒ Ø¨Ų ØŗÛØŗØĒŲ
Ø¯Ø§Ø¯Ų ØĒا ØĒŲÛ Ø¯ÛØŗÚŠ Ø¨ŲŲÛØŗŲ
+* ÛŲ ØšŲ
ŲÛØ§ØĒ API Ø§Ø˛ ØąØ§Ų Ø¯ŲØą
+* ÛŲ ØšŲ
ŲÛØ§ØĒ Ø¯ÛØĒØ§Ø¨ÛØŗ ÚŠŲ ØĒŲ
ŲŲ
بشŲ
+* ÛŲ ÚŠŲØĻØąÛ Ø¯ÛØĒØ§Ø¨ÛØŗ ÚŠŲ ŲØĒØ§ÛØŦØ´ Ø¨ØąÚ¯ØąØ¯Ų
+* Ų ØēÛØąŲ.
+
+ÚŲŲ Ø˛Ų
Ø§Ų Ø§ØŦØąØ§ Ø¨ÛØ´ØĒØą ØĩØąŲ Ø§ŲØĒØ¸Ø§Øą Ø¨ØąØ§Û ØšŲ
ŲÛØ§ØĒ I/O Ų
ÛâØ´ŲØ Ø¨ŲØ´ŲŲ Ų
ÛâÚ¯Ų ØšŲ
ŲÛØ§ØĒ "I/O bound".
+
+Ø¨ŲØ´ "ŲØ§ŲŲ
âØ˛Ų
اŲ" Ų
ÛâÚ¯Ų ÚŲŲ ÚŠØ§Ų
ŲžÛŲØĒØą / Ø¨ØąŲØ§Ų
Ų ŲØ§Ø˛Ų
ŲÛØŗØĒ با ÚŠØ§Øą ØĸØąŲŲ
"ŲŲ
âØ˛Ų
اŲ" Ø¨Ø§Ø´ŲØ Ų
ŲØĒØ¸Øą ŲØØ¸Ų Ø¯ŲÛŲ ØĒŲ
ŲŲ
Ø´Ø¯Ų ÚŠØ§Øą بŲ
ŲŲŲØ Ø¯Øą ØØ§ŲÛ ÚŠŲ ŲÛÚ ÚŠØ§ØąÛ ŲŲ
ÛâÚŠŲŲØ ØĒا ŲØĒÛØŦŲ ØąŲ Ø¨Ú¯ÛØąŲ Ų ÚŠØ§ØąØ´ ØąŲ Ø§Ø¯Ø§Ų
Ų Ø¨Ø¯Ų.
+
+Ø¨Ų ØŦØ§Ø´Ø ÚŲŲ ÛŲ ØŗÛØŗØĒŲ
"ŲØ§ŲŲ
âØ˛Ų
اŲ" ŲØŗØĒØ ŲŲØĒÛ ÚŠØ§Øą ØĒŲ
ŲŲ
Ø´Ø¯Ø Ų
ÛâØĒŲŲŲ ÛŲ ÚŠŲ
ØĒŲÛ ØĩŲ Ų
ŲØĒØ¸Øą بŲ
ŲŲŲ (ÚŲØ¯ Ų
ÛÚŠØąŲØĢØ§ŲÛŲ) ØĒا ڊاŲ
ŲžÛŲØĒØą / Ø¨ØąŲØ§Ų
Ų ŲØą ÚŠØ§ØąÛ ÚŠŲ ØąŲØĒŲ Ø¨ÚŠŲŲ ØąŲ ØĒŲ
ŲŲ
ÚŠŲŲØ Ų Ø¨ØšØ¯ Ø¨ØąÚ¯ØąØ¯Ų ŲØĒÛØŦŲ ØąŲ Ø¨Ú¯ÛØąŲ Ų Ø¨Ø§ŲØ§Ø´ ÚŠØ§Øą ÚŠŲŲ.
+
+Ø¨ØąØ§Û "ŲŲ
âØ˛Ų
اŲ" (Ø¨ØąØŽŲØ§Ų "ŲØ§ŲŲ
âØ˛Ų
اŲ") Ų
ØšŲ
ŲŲØ§Ų Ø§Ø˛ اØĩØˇŲØ§Ø "ØĒØąØĒÛØ¨Û" ŲŲ
Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲŲØ ÚŲŲ ÚŠØ§Ų
ŲžÛŲØĒØą / Ø¨ØąŲØ§Ų
Ų ŲŲ
Ų Ų
ØąØ§ØŲ ØąŲ Ø¨Ų ØĒØąØĒÛØ¨ Ø¯ŲØ¨Ø§Ų Ų
ÛâÚŠŲŲ ŲØ¨Ų Ø§Ø˛ اÛŲÚŠŲ Ø¨ØąŲ ØŗØąØ§Øē ÛŲ ÚŠØ§Øą دÛÚ¯ŲØ ØØĒÛ Ø§Ú¯Ų Ø§ŲŲ Ų
ØąØ§ØŲ شاŲ
Ų Ø§ŲØĒØ¸Ø§Øą باشŲ.
+
+### ŲŲ
âØ˛Ų
اŲÛ Ų Ø¨ØąÚ¯ØąŲØ§
+
+اÛŲ Ø§ÛØ¯Ų **ŲØ§ŲŲ
âØ˛Ų
اŲ** ÚŠŲ Ø¨Ø§ŲØ§ ØĒŲØļÛØ دادŲ
گاŲÛ Ø¨ŲØ´ **"ŲŲ
âØ˛Ų
اŲÛ"** ŲŲ
Ų
ÛâÚ¯Ų. با **"Ų
ŲØ§Ø˛ÛâØŗØ§Ø˛Û"** ŲØąŲ Ø¯Ø§ØąŲ.
+
+**ŲŲ
âØ˛Ų
اŲÛ** Ų **Ų
ŲØ§Ø˛ÛâØŗØ§Ø˛Û** ŲØą Ø¯Ų Ø¨Ų "اØĒŲØ§Ų Ø§ŲØĒØ§Ø¯Ų ÚÛØ˛Ø§Û Ų
ØŽØĒŲŲ ÚŠŲ
âŲØ¨ÛØ´ ŲŲ
Ø˛Ų
اŲ" ØąØ¨Øˇ Ø¯Ø§ØąŲ.
+
+ŲŲÛ ØŦØ˛ØĻÛØ§ØĒ بÛŲ *ŲŲ
âØ˛Ų
اŲÛ* Ų *Ų
ŲØ§Ø˛ÛâØŗØ§Ø˛Û* ØŽÛŲÛ Ų
ØĒŲØ§ŲØĒŲ.
+
+Ø¨ØąØ§Û Ø¯ÛØ¯Ų ŲØąŲØ´Ø Ø§ÛŲ Ø¯Ø§ØŗØĒØ§Ų Ø¯Øą Ų
بਝ Ø¨ØąÚ¯ØąŲØ§ ØąŲ ØĒØĩŲØą ÚŠŲ:
+
+### Ø¨ØąÚ¯ØąŲØ§Û ŲŲ
âØ˛Ų
اŲ
+
+با ØšØ´ŲØĒ Ų
ÛâØąÛ ŲØŗØĒâŲŲØ¯ Ø¨Ú¯ÛØąÛŲØ ØĒŲÛ ØĩŲ ŲØ§ÛŲ
ÛØŗØĒÛ Ø¯Øą ØØ§ŲÛ ÚŠŲ ØĩŲØ¯ŲŲØ¯Ø§Øą ØŗŲØ§ØąØ´ ØĸدŲ
Ø§Û ØŦŲŲÛ ØĒŲ ØąŲ Ų
ÛâÚ¯ÛØąŲ. đ
+
+
+
+بؚد ŲŲØ¨ØĒ ØĒŲ Ų
ÛâØ´ŲØ ØŗŲØ§ØąØ´ Ø¯Ų ØĒا Ø¨ØąÚ¯Øą ØŽÛŲÛ Ø´ÛÚŠ Ø¨ØąØ§Û ØŽŲØ¯ØĒ Ų ØšØ´ŲØĒ Ų
ÛâØ¯Û. đđ
+
+
+
+ØĩŲØ¯ŲŲØ¯Ø§Øą ÛŲ ÚÛØ˛Û Ø¨Ų ØĸØ´ŲžØ˛ ØĒŲÛ ØĸØ´ŲžØ˛ØŽŲŲŲ Ų
ÛâÚ¯Ų ØĒا بدŲŲŲ Ø¨Ø§ÛØ¯ Ø¨ØąÚ¯ØąŲØ§Û ØĒŲ ØąŲ ØĸŲ
Ø§Ø¯Ų ÚŠŲŲ (Ú¯ØąÚŲ Ø§ŲØ§Ų Ø¯Ø§ØąŲ Ø¨ØąÚ¯ØąŲØ§Û Ų
Ø´ØĒØąÛØ§Û ŲØ¨ŲÛ ØąŲ Ø¯ØąØŗØĒ Ų
ÛâÚŠŲŲ).
+
+
+
+ŲžŲŲ ØąŲ Ų
ÛâØ¯Û. đ¸
+
+ØĩŲØ¯ŲŲØ¯Ø§Øą Ø´Ų
Ø§ØąŲ ŲŲØ¨ØĒØĒ ØąŲ Ø¨ŲØĒ Ų
ÛâØ¯Ų.
+
+
+
+ŲŲØĒÛ Ų
ŲØĒØ¸ØąÛØ Ø¨Ø§ ØšØ´ŲØĒ Ų
ÛâØąÛ ÛŲ Ų
ÛØ˛ Ø§ŲØĒØŽØ§Ø¨ Ų
ÛâÚŠŲÛØ Ų
ÛâØ´ÛŲÛ Ų ÚŠŲÛ Ø¨Ø§ ØšØ´ŲØĒ ØØąŲ Ų
ÛâØ˛ŲÛ (ÚŲŲ Ø¨ØąÚ¯ØąŲØ§ØĒ ØŽÛŲÛ Ø´ÛÚŠŲ Ų ØĸŲ
Ø§Ø¯Ų ÚŠØąØ¯ŲØ´ŲŲ ÛŲ ÚŠŲ
ØˇŲŲ Ų
ÛâÚŠØ´Ų).
+
+ŲŲØĒÛ ŲžØ´ØĒ Ų
ÛØ˛ با ØšØ´ŲØĒ ŲØ´ØŗØĒÛØ Ø¯Øą ØØ§ŲÛ ÚŠŲ Ų
ŲØĒØ¸Øą Ø¨ØąÚ¯ØąŲØ§ÛÛØ Ų
ÛâØĒŲŲÛ Ø§ŲŲ Ø˛Ų
Ø§Ų ØąŲ ØĩØąŲ ØĒØØŗÛŲ Ø§ÛŲ ÚŠŲÛ ÚŠŲ ØšØ´ŲØĒ ÚŲØ¯Øą Ø¨Ø§ØØ§ŲØ ŲØ§Ø˛ Ų Ø¨Ø§ŲŲØ´Ų â¨đâ¨.
+
+
+
+ŲŲØĒÛ Ų
ŲØĒØ¸ØąÛ Ų Ø¨Ø§ ØšØ´ŲØĒ ØØąŲ Ų
ÛâØ˛ŲÛØ ŲØą Ø§Ø˛ گاŲÛ Ø´Ų
Ø§ØąŲâØ§Û ÚŠŲ ØąŲ ŲžÛØ´ØŽŲŲ ŲØ´ŲŲ Ø¯Ø§Ø¯Ų Ų
ÛâØ´Ų ØąŲ ÚÚŠ Ų
ÛâÚŠŲÛ ÚŠŲ Ø¨Ø¨ÛŲÛ ŲŲØ¨ØĒØĒ Ø´Ø¯Ų ÛØ§ ŲŲ.
+
+بؚد ÛŲ ØŦاÛÛ Ø¨Ø§ŲØ§ØŽØąŲ ŲŲØ¨ØĒØĒ Ų
ÛâØ´Ų. Ų
ÛâØąÛ ŲžÛØ´ØŽŲŲØ Ø¨ØąÚ¯ØąŲØ§ØĒ ØąŲ Ų
ÛâÚ¯ÛØąÛ Ų Ø¨ØąŲ
ÛâÚ¯ØąØ¯Û ØŗØą Ų
ÛØ˛.
+
+
+
+ØĒŲ Ų ØšØ´ŲØĒ Ø¨ØąÚ¯ØąŲØ§ ØąŲ Ų
ÛâØŽŲØąÛŲ Ų ÛŲ ŲŲØĒ ØŽŲØ¨ باŲŲ
Ø¯Ø§ØąÛŲ. â¨
+
+
+
+/// info
+
+ØĒØĩاŲÛØą ŲØ´ŲÚ¯ Ø§Ø˛ ÚŠØĒØąÛŲØ§ ØĒاŲ
ŲžØŗŲŲ . đ¨
+
+///
+
+---
+
+ØĒØĩŲØą ÚŠŲ ØĒŲ ØĒŲÛ Ø§ÛŲ Ø¯Ø§ØŗØĒØ§Ų ÚŠØ§Ų
ŲžÛŲØĒØą / Ø¨ØąŲØ§Ų
Ų đ¤ ŲØŗØĒÛ.
+
+ŲŲØĒÛ ØĒŲÛ ØĩŲ ŲØŗØĒÛØ ŲŲØˇ بÛÚŠØ§ØąÛ đ´Ø Ų
ŲØĒØ¸Øą ŲŲØ¨ØĒØĒ ŲØŗØĒÛØ ÚŠØ§Øą ØŽÛŲÛ "Ų
ŲÛØ¯Û" ŲŲ
ÛâÚŠŲÛ. ŲŲÛ ØĩŲ ØŗØąÛØš ŲžÛØ´ Ų
ÛâØąŲ ÚŲŲ ØĩŲØ¯ŲŲØ¯Ø§Øą ŲŲØˇ ØŗŲØ§ØąØ´ Ų
ÛâÚ¯ÛØąŲ (ØĸŲ
ادشŲŲ ŲŲ
ÛâÚŠŲŲ)Ø ŲžØŗ اÛŲ ØŽŲØ¨Ų.
+
+Ø¨ØšØ¯Ø ŲŲØĒÛ ŲŲØ¨ØĒØĒ Ų
ÛâØ´ŲØ ÚŠØ§Øą "Ų
ŲÛØ¯" ŲØ§ŲØšÛ Ų
ÛâÚŠŲÛØ Ų
ŲŲ ØąŲ ŲžØąØ¯Ø§Ø˛Ø´ Ų
ÛâÚŠŲÛØ ØĒØĩŲ
ÛŲ
Ų
ÛâÚ¯ÛØąÛ ÚÛ Ų
ÛâØŽŲØ§ÛØ Ø§ŲØĒØŽØ§Ø¨ ØšØ´ŲØĒ ØąŲ Ų
ÛâÚ¯ÛØąÛØ ŲžŲŲ Ų
ÛâØ¯ÛØ ÚÚŠ Ų
ÛâÚŠŲÛ Ø§ØŗÚŠŲØ§Øŗ ÛØ§ ÚŠØ§ØąØĒ Ø¯ØąØŗØĒ ØąŲ Ø¯Ø§Ø¯ÛØ ÚÚŠ Ų
ÛâÚŠŲÛ Ø¯ØąØŗØĒ ØØŗØ§Ø¨ Ø´Ø¯ŲØ ÚÚŠ Ų
ÛâÚŠŲÛ ØŗŲØ§ØąØ´ ØĸÛØĒŲ
Ø§Û Ø¯ØąØŗØĒ ØąŲ Ø¯Ø§ØąŲ Ų ØēÛØąŲ.
+
+ŲŲÛ Ø¨ØšØ¯Ø Ú¯ØąÚŲ ŲŲŲØ˛ Ø¨ØąÚ¯ØąŲØ§ØĒ ØąŲ ŲØ¯Ø§ØąÛØ ÚŠØ§ØąØĒ با ØĩŲØ¯ŲŲØ¯Ø§Øą "Ų
ŲŲØĒØ§Ų Ų
ØĒŲŲŲ" ⸠Ų
ÛâØ´ŲØ ÚŲŲ Ø¨Ø§ÛØ¯ Ų
ŲØĒØ¸Øą بŲ
ŲŲÛ đ ØĒا Ø¨ØąÚ¯ØąŲØ§ØĒ ØĸŲ
Ø§Ø¯Ų Ø¨Ø´Ų.
+
+ŲŲÛ ŲŲØĒÛ Ø§Ø˛ ŲžÛØ´ØŽŲŲ Ø¯ŲØą Ų
ÛâØ´Û Ų Ø¨Ø§ Ø´Ų
Ø§ØąŲ ŲŲØ¨ØĒØĒ ØŗØą Ų
ÛØ˛ Ų
ÛâØ´ÛŲÛØ Ų
ÛâØĒŲŲÛ ØĒŲØŦŲØĒ ØąŲ đ Ø¨Ų ØšØ´ŲØĒ Ø¨Ø¯Û Ų "ÚŠØ§Øą" â¯ đ¤ ØąŲ اŲŲ Ø¨ÚŠŲÛ. بؚدش Ø¯ŲØ¨Ø§ØąŲ Ø¯Ø§ØąÛ ÛŲ ÚÛØ˛ ØŽÛŲÛ "Ų
ŲÛØ¯" Ø§ŲØŦاŲ
Ų
ÛâØ¯ÛØ Ų
ØĢŲ ŲØ§Øŗ Ø˛Ø¯Ų Ø¨Ø§ ØšØ´ŲØĒ đ.
+
+بؚد ØĩŲØ¯ŲŲØ¯Ø§Øą đ Ø¨Ø§ گذاشØĒŲ Ø´Ų
Ø§ØąŲâØ§ØĒ ØąŲ ŲŲ
Ø§ÛØ´Ú¯Øą ŲžÛØ´ØŽŲŲ Ų
ÛâÚ¯Ų "Ų
Ų Ø¨Ø§ Ø¯ØąØŗØĒ ÚŠØąØ¯Ų Ø¨ØąÚ¯ØąŲØ§ ØĒŲ
ŲŲ
ÚŠØąØ¯Ų
"Ø ŲŲÛ ØĒŲ Ų
ØĢŲ Ø¯ÛŲŲŲŲâŲØ§ ŲŲØĒÛ Ø´Ų
Ø§ØąŲâØ§ØĒ ØąŲ ŲŲ
Ø§ÛØ´Ú¯Øą Ų
ÛØ§Ø¯ ŲŲØąÛ ŲŲ
ÛâŲžØąÛ. Ų
ÛâØ¯ŲŲÛ ÚŠØŗÛ Ø¨ØąÚ¯ØąŲØ§ØĒ ØąŲ ŲŲ
ÛâØ¯Ø˛Ø¯Ų ÚŲŲ Ø´Ų
Ø§ØąŲ ŲŲØ¨ØĒØĒ ØąŲ Ø¯Ø§ØąÛØ Ų Ø§ŲŲØ§ ŲŲ
Ų
Ø§Ų ØŽŲØ¯Ø´ŲŲ ØąŲ Ø¯Ø§ØąŲ.
+
+ŲžØŗ Ų
ŲØĒØ¸Øą Ų
ÛâŲ
ŲŲÛ ØĒا ØšØ´ŲØĒ Ø¯Ø§ØŗØĒØ§ŲØ´ ØąŲ ØĒŲ
ŲŲ
ÚŠŲŲ (ÚŠØ§Øą ŲØšŲÛ â¯ / ŲØ¸ÛŲŲâØ§Û ÚŠŲ Ø¯Ø§ØąŲ ŲžØąØ¯Ø§Ø˛Ø´ Ų
ÛâØ´Ų đ¤)Ø ØĸØąŲŲ
ŲØ¨ØŽŲد Ų
ÛâØ˛ŲÛ Ų Ų
ÛâÚ¯Û ÚŠŲ Ų
ÛâØąÛ Ø¨ØąÚ¯ØąŲØ§ ØąŲ Ø¨ÛØ§ØąÛ â¸.
+
+بؚد Ų
ÛâØąÛ ŲžÛØ´ØŽŲŲ đØ Ø¨Ų ÚŠØ§Øą اŲŲÛŲ ÚŠŲ ØØ§Ųا ØĒŲ
ŲŲ
Ø´Ø¯Ų â¯Ø Ø¨ØąÚ¯ØąŲØ§ ØąŲ Ų
ÛâÚ¯ÛØąÛØ ØĒØ´ÚŠØą Ų
ÛâÚŠŲÛ Ų Ų
ÛâØ¨ØąØ´ŲŲ ØŗØą Ų
ÛØ˛. اÛŲ Ų
ØąØŲŲ / ŲØ¸ÛŲŲ ØĒؚاŲ
Ų Ø¨Ø§ ŲžÛØ´ØŽŲŲ ØąŲ ØĒŲ
ŲŲ
Ų
ÛâÚŠŲŲ âš. اÛŲ Ø¨Ų ŲŲØ¨Ų ØŽŲØ¯Ø´ ÛŲ ŲØ¸ÛŲŲ ØŦØ¯ÛØ¯Ø "ØŽŲØąØ¯Ų Ø¨ØąÚ¯ØąŲØ§" đ â¯Ø Ų
ÛâØŗØ§Ø˛ŲØ ŲŲÛ Ø§ŲŲ ŲØ¨ŲÛ ÚŠŲ "Ú¯ØąŲØĒŲ Ø¨ØąÚ¯ØąŲØ§" Ø¨ŲØ¯ ØĒŲ
ŲŲ
Ø´Ø¯Ų âš.
+
+### Ø¨ØąÚ¯ØąŲØ§Û Ų
ŲØ§Ø˛Û
+
+ØØ§Ųا ŲØąØļ ÚŠŲ Ø§ÛŲØ§ "Ø¨ØąÚ¯ØąŲØ§Û ŲŲ
âØ˛Ų
اŲ" ŲÛØŗØĒŲØ بŲÚŠŲ "Ø¨ØąÚ¯ØąŲØ§Û Ų
ŲØ§Ø˛Û" ŲØŗØĒŲ.
+
+با ØšØ´ŲØĒ Ų
ÛâØąÛ ŲØŗØĒâŲŲØ¯ Ų
ŲØ§Ø˛Û Ø¨Ú¯ÛØąÛ.
+
+ØĒŲÛ ØĩŲ ŲØ§ÛŲ
ÛØŗØĒÛ Ø¯Øą ØØ§ŲÛ ÚŠŲ ÚŲØ¯ ØĒا (Ų
ØĢŲØ§Ų 8 ØĒا) ØĩŲØ¯ŲŲØ¯Ø§Øą ÚŠŲ ŲŲ
Ø˛Ų
Ø§Ų ØĸØ´ŲžØ˛ ŲŲ
ŲØŗØĒŲ ØŗŲØ§ØąØ´ ØĸدŲ
Ø§Û ØŦŲŲÛ ØĒŲ ØąŲ Ų
ÛâÚ¯ÛØąŲ.
+
+ŲŲ
Ų ŲØ¨Ų ØĒŲ Ų
ŲØĒØ¸ØąŲ Ø¨ØąÚ¯ØąŲØ§Ø´ŲŲ ØĸŲ
Ø§Ø¯Ų Ø¨Ø´Ų ŲØ¨Ų Ø§Ø˛ اÛŲÚŠŲ ŲžÛØ´ØŽŲŲ ØąŲ ØĒØąÚŠ ÚŠŲŲØ ÚŲŲ ŲØą ڊدŲŲ
Ø§Ø˛ 8 ØĒا ØĩŲØ¯ŲŲØ¯Ø§Øą Ų
ÛâØąŲ Ų Ø¨ØąÚ¯Øą ØąŲ ŲŲ
ŲŲ Ų
ŲŲØš Ø¯ØąØŗØĒ Ų
ÛâÚŠŲŲ ŲØ¨Ų Ø§Ø˛ اÛŲÚŠŲ ØŗŲØ§ØąØ´ Ø¨ØšØ¯Û ØąŲ Ø¨Ú¯ÛØąŲ.
+
+
+
+Ø¨Ø§ŲØ§ØŽØąŲ ŲŲØ¨ØĒ ØĒŲ Ų
ÛâØ´ŲØ ØŗŲØ§ØąØ´ Ø¯Ų ØĒا Ø¨ØąÚ¯Øą ØŽÛŲÛ Ø´ÛÚŠ Ø¨ØąØ§Û ØŽŲØ¯ØĒ Ų ØšØ´ŲØĒ Ų
ÛâØ¯Û.
+
+ŲžŲŲ ØąŲ Ų
ÛâØ¯Û đ¸.
+
+
+
+ØĩŲØ¯ŲŲØ¯Ø§Øą Ų
ÛâØąŲ ØĸØ´ŲžØ˛ØŽŲŲŲ.
+
+Ų
ŲØĒØ¸Øą Ų
ÛâŲ
ŲŲÛØ ØŦŲŲÛ ŲžÛØ´ØŽŲŲ ŲØ§ÛØŗØĒØ§Ø¯Û đØ ÚŠŲ ÚŠØŗÛ ŲØ¨Ų Ø§Ø˛ ØĒŲ Ø¨ØąÚ¯ØąŲØ§ØĒ ØąŲ ŲÚ¯ÛØąŲØ ÚŲŲ Ø´Ų
Ø§ØąŲ ŲŲØ¨ØĒ ŲÛØŗØĒ.
+
+
+
+ÚŲŲ ØĒŲ Ų ØšØ´ŲØĒ Ų
Ø´ØēŲŲ Ø§ÛŲ ŲØŗØĒÛŲ ÚŠŲ ŲØ°Ø§ØąÛŲ ÚŠØŗÛ ØŦŲŲØĒŲŲ Ø¨ÛØ§Ø¯ Ų ŲØą ŲŲØĒ Ø¨ØąÚ¯ØąŲØ§ ØąØŗÛØ¯Ų اŲŲØ§ ØąŲ Ø¨Ú¯ÛØąŲØ ŲŲ
ÛâØĒŲŲÛ Ø¨Ų ØšØ´ŲØĒ ØĒŲØŦŲ ÚŠŲÛ. đ
+
+اÛŲ ÚŠØ§Øą "ŲŲ
âØ˛Ų
اŲ" ŲØŗØĒØ ØĒŲ Ø¨Ø§ ØĩŲØ¯ŲŲØ¯Ø§Øą/ØĸØ´ŲžØ˛ đ¨âđŗ "ŲŲ
âØ˛Ų
اŲ" ŲØŗØĒÛ. Ø¨Ø§ÛØ¯ Ų
ŲØĒØ¸Øą بŲ
ŲŲÛ đ Ų Ø¯ØąØŗØĒ ŲŲ
ŲŲ ŲØØ¸Ų ÚŠŲ ØĩŲØ¯ŲŲØ¯Ø§Øą/ØĸØ´ŲžØ˛ đ¨âđŗ Ø¨ØąÚ¯ØąŲا ØąŲ ØĒŲ
ŲŲ
Ų
ÛâÚŠŲŲ Ų Ø¨ŲØĒ Ų
ÛâØ¯Ų Ø§ŲŲØŦا Ø¨Ø§Ø´ÛØ ŲÚ¯ØąŲŲ Ų
Ų
ÚŠŲŲ ÛÚŠÛ Ø¯ÛÚ¯Ų Ø§ŲŲØ§ ØąŲ Ø¨Ú¯ÛØąŲ.
+
+
+
+بؚد ØĩŲØ¯ŲŲØ¯Ø§Øą/ØĸØ´ŲžØ˛ØĒ đ¨âđŗ Ø¨Ø§ŲØ§ØŽØąŲ Ø¨ØšØ¯ Ø§Ø˛ ÛŲ Ų
دØĒ ØˇŲŲØ§ŲÛ Ø§ŲØĒØ¸Ø§Øą đ ØŦŲŲÛ ŲžÛØ´ØŽŲŲ Ø¨Ø§ Ø¨ØąÚ¯ØąŲØ§ØĒ Ø¨ØąŲ
ÛâÚ¯ØąØ¯Ų.
+
+
+
+Ø¨ØąÚ¯ØąŲØ§ØĒ ØąŲ Ų
ÛâÚ¯ÛØąÛ Ų Ø¨Ø§ ØšØ´ŲØĒ Ų
ÛâØąÛ ØŗØą Ų
ÛØ˛.
+
+ŲŲØˇ Ų
ÛâØŽŲØąÛŲØ´ŲŲØ Ų ØĒŲ
ŲŲ
Ų. âš
+
+
+
+ØØąŲ Ø˛Ø¯Ų ÛØ§ ŲØ§Øŗ Ø˛Ø¯Ų Ø˛ÛØ§Ø¯ ŲØ¨Ųد ÚŲŲ Ø¨ÛØ´ØĒØą ŲŲØĒ ØĩØąŲ Ø§ŲØĒØ¸Ø§Øą đ ØŦŲŲÛ ŲžÛØ´ØŽŲŲ Ø´Ø¯. đ
+
+/// info
+
+ØĒØĩاŲÛØą ŲØ´ŲÚ¯ Ø§Ø˛ ÚŠØĒØąÛŲØ§ ØĒاŲ
ŲžØŗŲŲ . đ¨
+
+///
+
+---
+
+ØĒŲÛ Ø§ÛŲ ØŗŲØ§ØąÛŲÛ Ø¨ØąÚ¯ØąŲØ§Û Ų
ŲØ§Ø˛ÛØ ØĒŲ ÛŲ ÚŠØ§Ų
ŲžÛŲØĒØą / Ø¨ØąŲØ§Ų
Ų đ¤ Ø¨Ø§ Ø¯Ų ØĒا ŲžØąØ¯Ø§Ø˛ŲØ¯Ų (ØĒŲ Ų ØšØ´ŲØĒ) ŲØŗØĒÛØ ŲØą Ø¯Ų Ų
ŲØĒØ¸Øą đ Ų ØĒŲØŦŲØ´ŲŲ â¯ ØąŲ Ø¨ØąØ§Û Ų
دØĒ ØˇŲŲØ§ŲÛ "Ø§ŲØĒØ¸Ø§Øą ØŦŲŲÛ ŲžÛØ´ØŽŲŲ" đ گذاشØĒŲ.
+
+ŲØŗØĒâŲŲØ¯ 8 ØĒا ŲžØąØ¯Ø§Ø˛ŲØ¯Ų (ØĩŲØ¯ŲŲØ¯Ø§Øą/ØĸØ´ŲžØ˛) Ø¯Ø§ØąŲ. Ø¯Øą ØØ§ŲÛ ÚŠŲ ŲØŗØĒâŲŲØ¯ Ø¨ØąÚ¯ØąŲØ§Û ŲŲ
âØ˛Ų
Ø§Ų Ø´Ø§ÛØ¯ ŲŲØˇ 2 ØĒا داشØĒŲ (ÛŲ ØĩŲØ¯ŲŲØ¯Ø§Øą Ų ÛŲ ØĸØ´ŲžØ˛).
+
+ŲŲÛ Ø¨Ø§ اÛŲ ØØ§ŲØ ØĒØŦØąØ¨Ų ŲŲØ§ÛÛ Ø¨ŲØĒØąÛŲ ŲÛØŗØĒ. đ
+
+---
+
+اÛŲ Ų
ØšØ§Ø¯Ų Ų
ŲØ§Ø˛Û Ø¯Ø§ØŗØĒØ§Ų Ø¨ØąÚ¯ØąŲØ§ Ø¨ŲØ¯. đ
+
+Ø¨ØąØ§Û ÛŲ Ų
ØĢØ§Ų "ŲØ§ŲØšÛâØĒØą" Ø§Ø˛ Ø˛ŲØ¯Ú¯ÛØ ÛŲ Ø¨Ø§ŲÚŠ ØąŲ ØĒØĩŲØą ÚŠŲ.
+
+ØĒا ŲŲ
ÛŲ ÚŲØ¯ ŲŲØĒ ŲžÛØ´Ø Ø¨ÛØ´ØĒØą باŲÚŠâŲØ§ ÚŲØ¯ ØĒا ØĩŲØ¯ŲŲØ¯Ø§Øą đ¨âđŧđ¨âđŧđ¨âđŧđ¨âđŧ داشØĒŲ Ų ÛŲ ØĩŲ Ø¨Ø˛ØąÚ¯ đđđđđđđđ.
+
+ŲŲ
Ų ØĩŲØ¯ŲŲØ¯Ø§ØąŲا ÚŠØ§Øą ØąŲ Ø¨Ø§ ÛŲ Ų
Ø´ØĒØąÛ Ø¨ØšØ¯ Ø§Ø˛ اŲŲ ÛÚŠÛ đ¨âđŧâ¯ Ø§ŲØŦاŲ
Ų
ÛâØ¯Ø§Ø¯Ų.
+
+Ų Ø¨Ø§ÛØ¯ ØĒŲÛ ØĩŲ đ Ų
دØĒ Ø˛ÛØ§Ø¯Û Ų
ŲØĒØ¸Øą بŲ
ŲŲÛ ŲÚ¯ØąŲŲ ŲŲØ¨ØĒØĒ ØąŲ Ø§Ø˛ Ø¯ØŗØĒ Ų
ÛâØ¯Û.
+
+Ø§ØØĒŲ
Ø§ŲØ§Ų ŲŲ
ÛâØŽŲØ§Û ØšØ´ŲØĒ đ ØąŲ Ø¨Ø§ ØŽŲØ¯ØĒ Ø¨Ø¨ØąÛ Ø¨Ø§ŲÚŠ đĻ Ø¨ØąØ§Û ÚŠØ§ØąØ§Û ØąŲØ˛Ų
ØąŲ.
+
+### ŲØĒÛØŦŲâÚ¯ÛØąÛ Ø¨ØąÚ¯ØąŲØ§
+
+ØĒŲÛ Ø§ÛŲ ØŗŲØ§ØąÛŲÛ "Ø¨ØąÚ¯ØąŲØ§Û ŲØŗØĒâŲŲØ¯ با ØšØ´ŲØĒ"Ø ÚŲŲ ÚŠŲÛ Ø§ŲØĒØ¸Ø§Øą đ ŲØŗØĒØ ØŽÛŲÛ Ų
ŲØˇŲÛâØĒØąŲ ÚŠŲ ÛŲ ØŗÛØŗØĒŲ
ŲŲ
âØ˛Ų
Ø§Ų â¸đ⯠داشØĒŲ Ø¨Ø§Ø´Û.
+
+اÛŲ Ø¨ØąØ§Û Ø¨ÛØ´ØĒØą Ø¨ØąŲØ§Ų
ŲâŲØ§Û ŲØ¨ ŲŲ
ØĩØ¯Ų Ų
ÛâÚŠŲŲ.
+
+ØŽÛŲÛ ØŽÛŲÛ ÚŠØ§ØąØ¨ØąØ ŲŲÛ ØŗØąŲØąØĒ Ų
ŲØĒØ¸Øą đ Ø§ØĒØĩØ§Ų ŲŲâÚŲØ¯Ø§Ų ØŽŲØ¨Ø´ŲŲ ŲØŗØĒ ØĒا Ø¯ØąØŽŲØ§ØŗØĒâŲØ§Ø´ŲŲ ØąŲ Ø¨ŲØąØŗØĒŲ.
+
+Ų Ø¨ØšØ¯ Ø¯ŲØ¨Ø§ØąŲ Ų
ŲØĒØ¸Øą đ ÚŠŲ ØŦŲØ§Ø¨âŲØ§ Ø¨ØąÚ¯ØąØ¯Ų.
+
+اÛŲ "Ø§ŲØĒØ¸Ø§Øą" đ ØĒŲÛ Ų
ÛÚŠØąŲØĢØ§ŲÛŲâŲØ§ Ø§ŲØ¯Ø§Ø˛ŲâÚ¯ÛØąÛ Ų
ÛâØ´ŲØ ŲŲÛ Ø¨Ø§ اÛŲ ØØ§ŲØ ØŦŲ
ؚش ÚŠŲ Ø¨ÚŠŲÛ ØĸØŽØąØ´ ÚŠŲÛ Ø§ŲØĒØ¸Ø§Øą Ų
ÛâØ´Ų.
+
+Ø¨ØąØ§Û ŲŲ
ÛŲ Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ ڊد ŲØ§ŲŲ
âØ˛Ų
Ø§Ų â¸đâ¯ Ø¨ØąØ§Û APIŲØ§Û ŲØ¨ ØŽÛŲÛ Ų
ŲØˇŲÛŲ.
+
+اÛŲ ŲŲØš ŲØ§ŲŲ
âØ˛Ų
اŲÛ ÚÛØ˛ÛŲ ÚŠŲ NodeJS ØąŲ Ų
ØØ¨Ųب ÚŠØąØ¯ (Ú¯ØąÚŲ NodeJS Ų
ŲØ§Ø˛Û ŲÛØŗØĒ) Ų ŲŲØˇŲ ŲŲØĒ Go بŲâØšŲŲØ§Ų ÛŲ Ø˛Ø¨ŲŲ Ø¨ØąŲØ§Ų
ŲâŲŲÛØŗÛŲ.
+
+Ų ŲŲ
ŲŲ ØŗØˇØ ØšŲ
ŲÚŠØąØ¯Û ŲØŗØĒ ÚŠŲ Ø¨Ø§ **FastAPI** Ų
ÛâÚ¯ÛØąÛ.
+
+Ų ÚŲŲ Ų
ÛâØĒŲŲÛ ŲŲ
âØ˛Ų
اŲÛ Ų Ų
ŲØ§Ø˛ÛâØŗØ§Ø˛Û ØąŲ ŲŲ
Ø˛Ų
Ø§Ų Ø¯Ø§Ø´ØĒŲ Ø¨Ø§Ø´ÛØ ØšŲ
ŲÚŠØąØ¯ Ø¨Ø§ŲØ§ØĒØąÛ Ø§Ø˛ Ø¨ÛØ´ØĒØą ŲØąÛŲ
âŲØąÚŠâŲØ§Û ØĒØŗØĒâØ´Ø¯Ų NodeJS Ų
ÛâÚ¯ÛØąÛ Ų ŲŲ
âØĒØąØ§Ø˛ با GoØ ÚŠŲ ÛŲ Ø˛Ø¨ŲŲ ÚŠØ§Ų
ŲžØ§ÛŲâØ´Ø¯Ų ŲØ˛Ø¯ÛÚŠ Ø¨Ų C ŲØŗØĒ (ŲŲ
Ų Ø§ÛŲØ§ Ø¨Ų ŲØˇŲ Starlette) .
+
+### ØĸÛØ§ ŲŲ
âØ˛Ų
اŲÛ Ø§Ø˛ Ų
ŲØ§Ø˛ÛâØŗØ§Ø˛Û Ø¨ŲØĒØąŲØ
+
+ŲŲ! اÛŲ ŲØĒÛØŦŲ Ø¯Ø§ØŗØĒØ§Ų ŲÛØŗØĒ.
+
+ŲŲ
âØ˛Ų
اŲÛ Ø¨Ø§ Ų
ŲØ§Ø˛ÛâØŗØ§Ø˛Û ŲØąŲ Ø¯Ø§ØąŲ. Ų ØĒŲÛ **ØŗŲØ§ØąÛŲŲØ§Û ؎اØĩ** ÚŠŲ ÚŠŲÛ Ø§ŲØĒØ¸Ø§Øą Ø¯Ø§ØąŲ Ø¨ŲØĒØąŲ. Ø¨Ų ŲŲ
ÛŲ ØŽØ§ØˇØąØ Ų
ØšŲ
ŲŲØ§Ų Ø¨ØąØ§Û ØĒŲØŗØšŲ Ø¨ØąŲØ§Ų
ŲâŲØ§Û ŲØ¨ ØŽÛŲÛ Ø§Ø˛ Ų
ŲØ§Ø˛ÛâØŗØ§Ø˛Û Ø¨ŲØĒØąŲ. ŲŲÛ ŲŲ Ø¨ØąØ§Û ŲŲ
ŲâÚÛØ˛.
+
+Ø¨ØąØ§Û Ø§ÛŲÚŠŲ ÛŲ ØĒØšØ§Ø¯Ų Ø¨Ø°Ø§ØąÛŲ
Ø Ø§ÛŲ Ø¯Ø§ØŗØĒØ§Ų ÚŠŲØĒØ§Ų ØąŲ ØĒØĩŲØą ÚŠŲ:
+
+> Ø¨Ø§ÛØ¯ ÛŲ ØŽŲŲŲ Ø¨Ø˛ØąÚ¯ Ų ÚŠØĢÛŲ ØąŲ ØĒŲ
ÛØ˛ ÚŠŲÛ.
+
+*ØĸØąŲØ ÚŠŲ Ø¯Ø§ØŗØĒØ§Ų ŲŲ
ÛŲŲ*.
+
+---
+
+ŲÛÚ Ø§ŲØĒØ¸Ø§ØąÛ đ Ø§ŲŲØŦا ŲÛØŗØĒØ ŲŲØˇ ÚŠŲÛ ÚŠØ§Øą Ø¨ØąØ§Û Ø§ŲØŦاŲ
Ø¯Ø§Ø¯Ų ØĒŲÛ ØŦØ§ŲØ§Û Ų
ØŽØĒŲŲ ØŽŲŲŲ.
+
+Ų
ÛâØĒŲŲÛ Ų
ØĢŲ Ų
ØĢØ§Ų Ø¨ØąÚ¯ØąŲØ§ ŲŲØ¨ØĒ Ø¨Ø°Ø§ØąÛØ اŲŲ ŲžØ°ÛØąØ§ÛÛØ بؚد ØĸØ´ŲžØ˛ØŽŲŲŲØ ŲŲÛ ÚŲŲ Ų
ŲØĒØ¸Øą ÚÛØ˛Û ŲÛØŗØĒÛ đØ ŲŲØˇ Ø¯Ø§ØąÛ ØĒŲ
ÛØ˛ Ų
ÛâÚŠŲÛ Ų ØĒŲ
ÛØ˛ Ų
ÛâÚŠŲÛØ ŲŲØ¨ØĒâŲØ§ ŲÛÚ ØĒØŖØĢÛØąÛ ŲØ¯Ø§ØąŲ.
+
+با ŲŲØ¨ØĒ ÛØ§ بدŲŲ ŲŲØ¨ØĒ (ŲŲ
âØ˛Ų
اŲÛ) ŲŲ
ŲŲ ŲØ¯Øą ØˇŲŲ Ų
ÛâÚŠØ´Ų ØĒا ØĒŲ
ŲŲ
Ø´ ÚŠŲÛ Ų ŲŲ
ŲŲ Ų
ŲØ¯Ø§Øą ÚŠØ§Øą ØąŲ ÚŠØąØ¯Û.
+
+ŲŲÛ ØĒŲÛ Ø§ÛŲ Ų
ŲŲØšÛØĒØ Ø§Ú¯Ų Ø¨ØĒŲŲÛ Ø§ŲŲ 8 ØĒا ØĩŲØ¯ŲŲØ¯Ø§Øą/ØĸØ´ŲžØ˛/ØØ§Ųا-ØĒŲ
ÛØ˛ÚŠØ§Øą ØąŲ Ø¨ÛØ§ØąÛØ Ų ŲØą ڊدŲŲ
Ø´ŲŲ (بŲâØšŲØ§ŲŲ ØŽŲØ¯ØĒ) ÛŲ ŲØŗŲ
ØĒ Ø§Ø˛ ØŽŲŲŲ ØąŲ ØĒŲ
ÛØ˛ ÚŠŲŲØ Ų
ÛâØĒŲŲÛ ŲŲ
Ų ÚŠØ§Øą ØąŲ **Ų
ŲØ§Ø˛Û** Ø§ŲØŦاŲ
Ø¨Ø¯ÛØ با ÚŠŲ
ÚŠ اØļاŲÛØ Ų ØŽÛŲÛ Ø˛ŲØ¯ØĒØą ØĒŲ
ŲŲ
Ø´ ÚŠŲÛ.
+
+ØĒŲÛ Ø§ÛŲ ØŗŲØ§ØąÛŲØ ŲØą ڊدŲŲ
Ø§Ø˛ ØĒŲ
ÛØ˛ÚŠØ§ØąŲا (Ø§Ø˛ ØŦŲ
ŲŲ ØŽŲØ¯ØĒ) ÛŲ ŲžØąØ¯Ø§Ø˛ŲØ¯ŲâØŗØĒ ÚŠŲ ÚŠØ§Øą ØŽŲØ¯Ø´ ØąŲ Ų
ÛâÚŠŲŲ.
+
+Ų ÚŲŲ Ø¨ÛØ´ØĒØą Ø˛Ų
Ø§Ų Ø§ØŦØąØ§ ØĩØąŲ ÚŠØ§Øą ŲØ§ŲØšÛ Ų
ÛâØ´Ų (Ø¨Ų ØŦØ§Û Ø§ŲØĒØ¸Ø§Øą)Ø Ų ÚŠØ§Øą ØĒŲÛ ÚŠØ§Ų
ŲžÛŲØĒØą Ø¨Ø§ CPU Ø§ŲØŦاŲ
Ų
ÛâØ´ŲØ Ø¨Ų Ø§ÛŲ Ų
Ø´ÚŠŲØ§ØĒ Ų
ÛâÚ¯Ų "CPU bound".
+
+---
+
+Ų
ØĢاŲâŲØ§Û ØąØ§ÛØŦ ØšŲ
ŲÛØ§ØĒ CPU bound ÚÛØ˛Ø§ÛÛ ŲØŗØĒŲ ÚŠŲ ŲÛØ§Ø˛ Ø¨Ų ŲžØąØ¯Ø§Ø˛Ø´ ØąÛØ§ØļÛ ŲžÛÚÛØ¯Ų Ø¯Ø§ØąŲ.
+
+Ų
ØĢŲØ§Ų:
+
+* ŲžØąØ¯Ø§Ø˛Ø´ **Øĩدا** ÛØ§ **ØĒØĩŲÛØą**.
+* **بÛŲØ§ÛÛ ÚŠØ§Ų
ŲžÛŲØĒØąÛ**: ÛŲ ØĒØĩŲÛØą Ø§Ø˛ Ų
ÛŲÛŲŲâŲØ§ ŲžÛÚŠØŗŲ ØĒØ´ÚŠÛŲ Ø´Ø¯ŲØ ŲØą ŲžÛÚŠØŗŲ 3 ØĒا Ų
ŲØ¯Ø§Øą / ØąŲÚ¯ Ø¯Ø§ØąŲØ ŲžØąØ¯Ø§Ø˛Ø´Ø´ Ų
ØšŲ
ŲŲØ§Ų ŲÛØ§Ø˛ Ø¯Ø§ØąŲ ÚÛØ˛Û ØąŲ ØąŲ Ø§ŲŲ ŲžÛÚŠØŗŲâŲØ§ ŲŲ
Ø˛Ų
Ø§Ų ØØŗØ§Ø¨ ÚŠŲÛ.
+* **ÛØ§Ø¯Ú¯ÛØąÛ Ų
اشÛŲ**: Ų
ØšŲ
ŲŲØ§Ų ÚŠŲÛ ØļØąØ¨ "Ų
اØĒØąÛØŗ" Ų "Ø¨ØąØ¯Ø§Øą" ŲØ§Ø˛Ų
Ø¯Ø§ØąŲ. ÛŲ ØŦدŲŲ Ø¨Ø˛ØąÚ¯ ŲžØą Ø§Ø˛ ؚدد ØąŲ ØĒØĩŲØą ÚŠŲ ÚŠŲ ŲŲ
ŲâØ´ŲŲ ØąŲ ŲŲ
Ø˛Ų
Ø§Ų ØļØąØ¨ Ų
ÛâÚŠŲÛ.
+* **ÛØ§Ø¯Ú¯ÛØąÛ ØšŲ
ÛŲ**: اÛŲ ÛŲ Ø˛ÛØąØ´Ø§ØŽŲ Ø§Ø˛ ÛØ§Ø¯Ú¯ÛØąÛ Ų
اشÛŲŲØ ŲžØŗ ŲŲ
ŲŲ ŲØļÛŲ ØĩØ¯Ų Ų
ÛâÚŠŲŲ. ŲŲØˇ اÛŲ ÚŠŲ ÛŲ ØŦدŲŲ ØšØ¯Ø¯ Ø¨ØąØ§Û ØļØąØ¨ ÚŠØąØ¯Ų ŲÛØŗØĒØ Ø¨ŲÚŠŲ ÛŲ Ų
ØŦŲ
ŲØšŲ Ø¨Ø˛ØąÚ¯ Ø§Ø˛ اŲŲØ§ ŲØŗØĒØ Ų ØĒŲÛ ØŽÛŲÛ Ų
ŲØ§ØąØ¯ Ø§Ø˛ ÛŲ ŲžØąØ¯Ø§Ø˛ŲØ¯Ų ؎اØĩ Ø¨ØąØ§Û ØŗØ§ØŽØĒ Ų / ÛØ§ Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ اÛŲ Ų
دŲâŲØ§ Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲÛ.
+
+### ŲŲ
âØ˛Ų
اŲÛ + Ų
ŲØ§Ø˛ÛâØŗØ§Ø˛Û: ŲØ¨ + ÛØ§Ø¯Ú¯ÛØąÛ Ų
اشÛŲ
+
+با **FastAPI** Ų
ÛâØĒŲŲÛ Ø§Ø˛ ŲŲ
âØ˛Ų
اŲÛ ÚŠŲ Ø¨ØąØ§Û ØĒŲØŗØšŲ ŲØ¨ ØŽÛŲÛ ØąØ§ÛØŦŲ (ŲŲ
ŲŲ ØŦØ°Ø§Ø¨ÛØĒ Ø§ØĩŲÛ NodeJS) Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ.
+
+ŲŲÛ Ų
ÛâØĒŲŲÛ Ø§Ø˛ ŲŲØ§Ûد Ų
ŲØ§Ø˛ÛâØŗØ§Ø˛Û Ų ÚŲØ¯ŲžØąØ¯Ø§Ø˛Ø´Û (اØŦØąØ§Û ÚŲØ¯ ŲžØąŲØŗŲ بŲâØĩŲØąØĒ Ų
ŲØ§Ø˛Û) Ø¨ØąØ§Û ÚŠØ§ØąØ§Û **CPU bound** Ų
ØĢŲ ØŗÛØŗØĒŲ
âŲØ§Û ÛØ§Ø¯Ú¯ÛØąÛ Ų
اشÛŲ ŲŲ
Ø¨ŲØąŲ Ø¨Ø¨ØąÛ.
+
+اÛŲØ بŲâØšŲØ§ŲŲ Ø§ÛŲ ŲØ§ŲØšÛØĒ ØŗØ§Ø¯Ų ÚŠŲ ŲžØ§ÛØĒŲŲ Ø˛Ø¨ŲŲ Ø§ØĩŲÛ Ø¨ØąØ§Û **ØšŲŲ
دادŲ**Ø ÛØ§Ø¯Ú¯ÛØąÛ Ų
اشÛŲ Ų Ø¨ŲâØŽØĩŲØĩ ÛØ§Ø¯Ú¯ÛØąÛ ØšŲ
ÛŲŲØ باؚØĢ Ų
ÛâØ´Ų FastAPI ÛŲ Ø§ŲØĒØŽØ§Ø¨ ØŽÛŲÛ ØŽŲØ¨ Ø¨ØąØ§Û APIŲØ§ Ų Ø¨ØąŲØ§Ų
ŲâŲØ§Û ŲØ¨ ØšŲŲ
Ø¯Ø§Ø¯Ų / ÛØ§Ø¯Ú¯ÛØąÛ Ų
اشÛŲ Ø¨Ø§Ø´Ų (بÛŲ ØŽÛŲÛ ÚÛØ˛Ø§Û دÛÚ¯Ų).
+
+Ø¨ØąØ§Û Ø¯ÛØ¯Ų اÛŲÚŠŲ ÚØˇŲØą ØĒŲÛ Ų
ØÛØˇ ŲØ§ŲØšÛ Ø¨Ų Ø§ÛŲ Ų
ŲØ§Ø˛ÛâØŗØ§Ø˛Û Ø¨ØąØŗÛØ ب؎ش [Ø§ØŗØĒŲØąØ§Øą](deployment/index.md){.internal-link target=_blank} ØąŲ Ø¨Ø¨ÛŲ.
+
+## `async` Ų `await`
+
+ŲØŗØŽŲâŲØ§Û Ų
Ø¯ØąŲ ŲžØ§ÛØĒŲŲ ÛŲ ØąØ§Ų ØŽÛŲÛ ØŗØ§Ø¯Ų Ų ŲØ§Ø¨ŲâŲŲŲ
Ø¨ØąØ§Û ØĒØšØąÛŲ ÚŠØ¯ ŲØ§ŲŲ
âØ˛Ų
Ø§Ų Ø¯Ø§ØąŲ. اÛŲ Ø¨Ø§ØšØĢ Ų
ÛâØ´Ų Ų
ØĢŲ ÚŠØ¯ "ØĒØąØĒÛØ¨Û" Ų
ØšŲ
ŲŲÛ Ø¨Ų ŲØ¸Øą Ø¨ÛØ§Ø¯ Ų ØĒŲÛ ŲØØ¸ŲâŲØ§Û Ø¯ØąØŗØĒ "Ø§ŲØĒØ¸Ø§Øą" ØąŲ Ø¨ØąØ§ØĒ Ø§ŲØŦاŲ
بدŲ.
+
+ŲŲØĒÛ ÛŲ ØšŲ
ŲÛØ§ØĒÛ ŲØŗØĒ ÚŠŲ ŲØ¨Ų Ø§Ø˛ Ø¯Ø§Ø¯Ų ŲØĒÛØŦŲâŲØ§ ŲÛØ§Ø˛ Ø¨Ų Ø§ŲØĒØ¸Ø§Øą Ø¯Ø§ØąŲ Ų Ø§Ø˛ اÛŲ ŲØ§Ø¨ŲÛØĒâŲØ§Û ØŦØ¯ÛØ¯ ŲžØ§ÛØĒŲŲ ŲžØ´ØĒÛØ¨Ø§ŲÛ Ų
ÛâÚŠŲŲØ Ų
ÛâØĒŲŲÛ Ø§ÛŲØŦŲØąÛ ڊدŲŲÛØŗÛØ´ ÚŠŲÛ:
+
+```Python
+burgers = await get_burgers(2)
+```
+
+ŲÚŠØĒŲ ÚŠŲÛØ¯Û اÛŲØŦا `await` ŲØŗØĒ. Ø¨Ų ŲžØ§ÛØĒŲŲ Ų
ÛâÚ¯Ų ÚŠŲ Ø¨Ø§ÛØ¯ ⸠Ų
ŲØĒØ¸Øą بŲ
ŲŲŲ ØĒا `get_burgers(2)` ÚŠØ§ØąØ´ đ ØĒŲ
ŲŲ
Ø¨Ø´Ų ŲØ¨Ų Ø§Ø˛ اÛŲÚŠŲ ŲØĒÛØŦŲâŲØ§ ØąŲ ØĒŲÛ `burgers` Ø°ØŽÛØąŲ ÚŠŲŲ. با اÛŲØ ŲžØ§ÛØĒŲŲ Ų
ÛâØ¯ŲŲŲ ÚŠŲ Ų
ÛâØĒŲŲŲ Ø¨ØąŲ ÛŲ ÚŠØ§Øą دÛÚ¯Ų đ ⯠ØĒŲÛ Ø§ÛŲ Ų
دØĒ بڊŲŲ (Ų
ØĢŲ Ú¯ØąŲØĒŲ ÛŲ Ø¯ØąØŽŲØ§ØŗØĒ دÛÚ¯Ų).
+
+Ø¨ØąØ§Û Ø§ÛŲÚŠŲ `await` ÚŠØ§Øą ÚŠŲŲØ Ø¨Ø§ÛØ¯ ØĒŲÛ ÛŲ ØĒابؚ Ø¨Ø§Ø´Ų ÚŠŲ Ø§Ø˛ اÛŲ ŲØ§ŲŲ
âØ˛Ų
اŲÛ ŲžØ´ØĒÛØ¨Ø§ŲÛ ÚŠŲŲ. Ø¨ØąØ§Û Ø§ÛŲ ÚŠØ§ØąØ ŲŲØˇ با `async def` ØĒØšØąÛŲØ´ Ų
ÛâÚŠŲÛ:
+
+```Python hl_lines="1"
+async def get_burgers(number: int):
+ # ÛŲ ØŗØąÛ ÚŠØ§Øą ŲØ§ŲŲ
âØ˛Ų
Ø§Ų Ø¨ØąØ§Û ØŗØ§ØŽØĒŲ Ø¨ØąÚ¯ØąŲØ§ Ø§ŲØŦاŲ
بدŲ
+ return burgers
+```
+
+...Ø¨Ų ØŦØ§Û `def`:
+
+```Python hl_lines="2"
+# اÛŲ ŲØ§ŲŲ
âØ˛Ų
Ø§Ų ŲÛØŗØĒ
+def get_sequential_burgers(number: int):
+ # ÛŲ ØŗØąÛ ÚŠØ§Øą ØĒØąØĒÛØ¨Û Ø¨ØąØ§Û ØŗØ§ØŽØĒŲ Ø¨ØąÚ¯ØąŲØ§ Ø§ŲØŦاŲ
بدŲ
+ return burgers
+```
+
+با `async def`Ø ŲžØ§ÛØĒŲŲ Ų
ÛâØ¯ŲŲŲ ÚŠŲ ØĒŲÛ Ø§ŲŲ ØĒابؚ Ø¨Ø§ÛØ¯ ØŲØ§ØŗØ´ Ø¨Ų ØšØ¨Ø§ØąØĒâŲØ§Û `await` Ø¨Ø§Ø´ŲØ Ų Ų
ÛâØĒŲŲŲ Ø§ØŦØąØ§Û Ø§ŲŲ ØĒابؚ ØąŲ "Ų
ŲŲØĒØ§Ų Ų
ØĒŲŲŲ" ⸠ڊŲŲ Ų Ø¨ØąŲ ÛŲ ÚŠØ§Øą دÛÚ¯Ų đ ŲØ¨Ų Ø§Ø˛ Ø¨ØąÚ¯Ø´ØĒŲ Ø¨ÚŠŲŲ.
+
+ŲŲØĒÛ Ų
ÛâØŽŲØ§Û ÛŲ ØĒابؚ `async def` ØąŲ Øĩدا ÚŠŲÛØ Ø¨Ø§ÛØ¯ "Ų
ŲØĒØ¸ØąØ´" بŲ
ŲŲÛ. ŲžØŗ اÛŲ ÚŠØ§Øą ŲŲ
ÛâÚŠŲŲ:
+
+```Python
+# اÛŲ ÚŠØ§Øą ŲŲ
ÛâÚŠŲŲØ ÚŲŲ get_burgers با async def ØĒØšØąÛŲ Ø´Ø¯Ų
+burgers = get_burgers(2)
+```
+
+---
+
+ŲžØŗØ Ø§Ú¯Ų Ø§Ø˛ ÛŲ ÚŠØĒاب؎ŲŲŲ Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲÛ ÚŠŲ Ø¨ŲØĒ Ų
ÛâÚ¯Ų Ų
ÛâØĒŲŲÛ Ø¨Ø§ `await` Øĩداش ÚŠŲÛØ Ø¨Ø§ÛØ¯ *ØĒŲØ§Ø¨Øš ØšŲ
ŲÛØ§ØĒ Ų
ØŗÛØąØĒ* ÚŠŲ Ø§Ø˛Ø´ Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲŲ ØąŲ Ø¨Ø§ `async def` Ø¨ØŗØ§Ø˛ÛØ Ų
ØĢŲ:
+
+```Python hl_lines="2-3"
+@app.get('/burgers')
+async def read_burgers():
+ burgers = await get_burgers(2)
+ return burgers
+```
+
+### ØŦØ˛ØĻÛØ§ØĒ ŲŲÛâØĒØą
+
+Ø´Ø§ÛØ¯ Ų
ØĒŲØŦŲ Ø´Ø¯Ų Ø¨Ø§Ø´Û ÚŠŲ `await` ŲŲØˇ ØĒŲÛ ØĒŲØ§Ø¨ØšÛ ÚŠŲ Ø¨Ø§ `async def` ØĒØšØąÛŲ Ø´Ø¯Ų Ų
ÛâØĒŲŲŲ Ø§ØŗØĒŲØ§Ø¯Ų بشŲ.
+
+ŲŲÛ Ø¯Øą ØšÛŲ ØØ§ŲØ ØĒŲØ§Ø¨ØšÛ ÚŠŲ Ø¨Ø§ `async def` ØĒØšØąÛŲ Ø´Ø¯Ų Ø¨Ø§ÛØ¯ "Ų
ŲØĒØ¸Øą"Ø´ŲŲ Ø¨Ų
ŲŲÛ. ŲžØŗ ØĒŲØ§Ø¨Øš با `async def` ŲŲØˇ ØĒŲÛ ØĒŲØ§Ø¨ØšÛ ÚŠŲ Ø¨Ø§ `async def` ØĒØšØąÛŲ Ø´Ø¯Ų Ų
ÛâØĒŲŲŲ Øĩدا Ø˛Ø¯Ų Ø¨Ø´Ų.
+
+ØØ§ŲØ§Ø ŲØļÛŲ Ų
ØąØē Ų ØĒØŽŲ
âŲ
ØąØē ÚÛŲØ ÚØˇŲØą اŲŲÛŲ ØĒابؚ `async` ØąŲ Øĩدا Ų
ÛâÚŠŲÛØ
+
+Ø§Ú¯Ų Ø¨Ø§ **FastAPI** ÚŠØ§Øą Ų
ÛâÚŠŲÛØ ŲØ§Ø˛Ų
ŲÛØŗØĒ ŲÚ¯ØąØ§Ų Ø§ÛŲ Ø¨Ø§Ø´ÛØ ÚŲŲ Ø§ŲŲ "اŲŲÛŲ" ØĒØ§Ø¨ØšØ *ØĒابؚ ØšŲ
ŲÛØ§ØĒ Ų
ØŗÛØąØĒ* ŲØŗØĒØ Ų FastAPI Ų
ÛâØ¯ŲŲŲ ÚØˇŲØą ÚŠØ§Øą Ø¯ØąØŗØĒ ØąŲ Ø¨ÚŠŲŲ.
+
+ŲŲÛ Ø§Ú¯Ų Ø¨ØŽŲØ§Û بدŲŲ FastAPI Ø§Ø˛ `async` / `await` Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛØ اÛŲŲ
Ų
Ų
ÚŠŲŲ.
+
+### ڊد ŲØ§ŲŲ
âØ˛Ų
Ø§Ų ØŽŲØ¯ØĒ ØąŲ Ø¨ŲŲÛØŗ
+
+Starlette (Ų **FastAPI**) Ø¨Øą ŲžØ§ÛŲ AnyIO ŲØŗØĒŲØ ÚŠŲ Ø¨Ø§ØšØĢ Ų
ÛâØ´Ų Ø¨Ø§ ÚŠØĒاب؎ŲŲŲ Ø§ØŗØĒØ§ŲØ¯Ø§ØąØ¯ ŲžØ§ÛØĒŲŲ asyncio Ų Trio ØŗØ§Ø˛Ú¯Ø§Øą باشŲ.
+
+بŲâØŽØĩŲØĩØ Ų
ÛâØĒŲŲÛ Ų
ØŗØĒŲÛŲ
Ø§Ų Ø§Ø˛ AnyIO Ø¨ØąØ§Û Ų
ŲØ§ØąØ¯ Ø§ØŗØĒŲØ§Ø¯Ų ŲžÛØ´ØąŲØĒŲ ŲŲ
âØ˛Ų
اŲÛ ÚŠŲ ŲÛØ§Ø˛ Ø¨Ų Ø§ŲÚ¯ŲŲØ§Û ŲžÛÚÛØ¯ŲâØĒØą ØĒŲÛ ÚŠØ¯ ØŽŲØ¯ØĒ Ø¯Ø§ØąŲ Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ.
+
+Ų ØØĒÛ Ø§Ú¯Ų Ø§Ø˛ FastAPI Ø§ØŗØĒŲØ§Ø¯Ų ŲÚŠŲÛØ Ų
ÛâØĒŲŲÛ Ø¨ØąŲØ§Ų
ŲâŲØ§Û ŲØ§ŲŲ
âØ˛Ų
Ø§Ų ØŽŲØ¯ØĒ ØąŲ Ø¨Ø§ AnyIO بŲŲÛØŗÛ ØĒا ØŽÛŲÛ ØŗØ§Ø˛Ú¯Ø§Øą Ø¨Ø§Ø´Ų Ų ŲŲØ§Ûدش ØąŲ Ø¨Ú¯ÛØąÛ (Ų
ØĢŲ *ŲŲ
âØ˛Ų
اŲÛ ØŗØ§ØŽØĒØ§ØąÛØ§ŲØĒŲ*).
+
+Ų
Ų ÛŲ ÚŠØĒاب؎ŲŲŲ Ø¯ÛÚ¯Ų ØąŲÛ AnyIO ØŗØ§ØŽØĒŲ
Ø ÛŲ ŲØ§ÛŲ ŲØ§Ø˛ÚŠ ØąŲØ´Ø ØĒا ÛŲ ÚŠŲ
annotationŲØ§Û ŲŲØš ØąŲ Ø¨ŲØĒØą ÚŠŲŲ
Ų **ØĒÚŠŲ
ÛŲ ØŽŲØ¯ÚŠØ§Øą** Ø¨ŲØĒØąØ **ØŽØˇØ§ŲØ§Û Ø¯ØąŲŲâØŽØˇÛ** Ų ØēÛØąŲ Ø¨Ú¯ÛØąŲ
. ÛŲ Ų
ŲØ¯Ų
Ų Ų ØĸŲ
ŲØ˛Ø´ ØŗØ§Ø¯Ų ŲŲ
Ø¯Ø§ØąŲ ÚŠŲ Ø¨ŲØĒ ÚŠŲ
ÚŠ Ų
ÛâÚŠŲŲ **بŲŲŲ
Û** Ų **ڊد ŲØ§ŲŲ
âØ˛Ų
Ø§Ų ØŽŲØ¯ØĒ ØąŲ Ø¨ŲŲÛØŗÛ**: Asyncer . Ø§Ú¯Ų Ø¨ØŽŲØ§Û **ڊد ŲØ§ŲŲ
âØ˛Ų
Ø§Ų ØąŲ Ø¨Ø§ ڊد Ų
ØšŲ
ŲŲÛ** (Ø¨ŲØ§ÚŠâÚŠŲŲØ¯Ų/ŲŲ
âØ˛Ų
اŲ) ØĒØąÚŠÛØ¨ ÚŠŲÛ ØŽÛŲÛ Ø¨ŲâØ¯ØąØ¯ØĒ Ų
ÛâØŽŲØąŲ.
+
+### Ø´ÚŠŲâŲØ§Û دÛÚ¯Ų ÚŠØ¯ ŲØ§ŲŲ
âØ˛Ų
اŲ
+
+اÛŲ ØŗØ¨ÚŠ Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ `async` Ų `await` ØĒŲÛ Ø˛Ø¨ŲŲ ŲØŗØ¨ØĒØ§Ų ØŦØ¯ÛØ¯Ų.
+
+ŲŲÛ ÚŠØ§Øą با ڊد ŲØ§ŲŲ
âØ˛Ų
Ø§Ų ØąŲ ØŽÛŲÛ ØŗØ§Ø¯ŲâØĒØą Ų
ÛâÚŠŲŲ.
+
+ŲŲ
ÛŲ ØŗÛŲØĒÚŠØŗ (ÛØ§ ØĒŲØąÛØ¨Ø§Ų ÛÚŠØŗØ§Ų) Ø§ØŽÛØąØ§Ų ØĒŲÛ ŲØŗØŽŲâŲØ§Û Ų
Ø¯ØąŲ ØŦØ§ŲØ§Ø§ØŗÚŠØąÛŲžØĒ (ØĒŲÛ Ų
ØąŲØąÚ¯Øą Ų NodeJS) ŲŲ
اØļاŲŲ Ø´Ø¯Ų.
+
+ŲŲÛ ŲØ¨Ų Ø§Ø˛ اŲŲØ Ų
Ø¯ÛØąÛØĒ ڊد ŲØ§ŲŲ
âØ˛Ų
Ø§Ų ØŽÛŲÛ ŲžÛÚÛØ¯ŲâØĒØą Ų ØŗØŽØĒâØĒØą Ø¨ŲØ¯.
+
+ØĒŲÛ ŲØŗØŽŲâŲØ§Û ŲØ¨ŲÛ ŲžØ§ÛØĒŲŲØ Ų
ÛâØĒŲŲØŗØĒÛ Ø§Ø˛ ŲØŽâŲØ§ ÛØ§ Gevent Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ. ŲŲÛ ÚŠØ¯ ØŽÛŲÛ ŲžÛÚÛØ¯ŲâØĒØą Ų
ÛâØ´Ų Ø¨ØąØ§Û ŲŲŲ
ÛØ¯ŲØ Ø¯ÛØ¨Ø§Ú¯ ÚŠØąØ¯Ų Ų ŲÚŠØą ÚŠØąØ¯Ų Ø¨ŲØ´.
+
+ØĒŲÛ ŲØŗØŽŲâŲØ§Û ŲØ¨ŲÛ NodeJS / ØŦØ§ŲØ§Ø§ØŗÚŠØąÛŲžØĒ Ų
ØąŲØąÚ¯ØąØ Ø§Ø˛ "ڊاŲâØ¨ÚŠâŲØ§" Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠØąØ¯Û. ÚŠŲ Ų
ÛâØąØŗÛØ¯ Ø¨Ų ØŦŲØ§Ų ڊاŲâØ¨ÚŠâŲØ§ .
+
+## ÚŠØąŲØĒÛŲâŲØ§
+
+**ÚŠØąŲØĒÛŲ** ŲŲØˇ ÛŲ Ø§ØĩØˇŲØ§Ø ØŽÛŲÛ Ø´ÛÚŠ Ø¨ØąØ§Û ÚÛØ˛ÛŲ ÚŠŲ ÛŲ ØĒابؚ `async def` Ø¨ØąŲ
ÛâÚ¯ØąØ¯ŲŲŲ. ŲžØ§ÛØĒŲŲ Ų
ÛâØ¯ŲŲŲ ÚŠŲ Ø§ÛŲ ÛŲ ÚÛØ˛Û Ų
ØĢŲ ØĒابؚ ŲØŗØĒØ Ų
ÛâØĒŲŲŲ Ø´ØąŲØš Ø¨Ø´Ų Ų ÛŲ ØŦاÛÛ ØĒŲ
ŲŲ
Ø¨Ø´ŲØ ŲŲÛ Ų
Ų
ÚŠŲŲ Ø¯Ø§ØŽŲØ´ ŲŲ
Ų
ŲŲŲ â¸ Ø¨Ø´ŲØ ŲØą ŲŲØĒ ÛŲ `await` ØĒŲØ´ باشŲ.
+
+ŲŲÛ ŲŲ
Ų Ø§ÛŲ ŲØ§Ø¨ŲÛØĒ Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ ڊد ŲØ§ŲŲ
âØ˛Ų
Ø§Ų Ø¨Ø§ `async` Ų `await` ØŽÛŲÛ ŲŲØĒØ§ ØŽŲØ§ØĩŲ Ų
ÛâØ´Ų Ø¨Ų Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ "ÚŠØąŲØĒÛŲâŲØ§". اÛŲ ŲØ§Ø¨Ų Ų
ŲØ§ÛØŗŲ Ø¨Ø§ ŲÛÚÚ¯Û Ø§ØĩŲÛ GoØ ÛØšŲÛ "GoroutineŲØ§" ŲØŗØĒ.
+
+## ŲØĒÛØŦŲâÚ¯ÛØąÛ
+
+Ø¨ÛØ§Ûد ŲŲ
ŲŲ ØŦŲ
ŲŲ Ø§Ø˛ Ø¨Ø§ŲØ§ ØąŲ Ø¨Ø¨ÛŲÛŲ
:
+
+> ŲØŗØŽŲâŲØ§Û Ų
Ø¯ØąŲ ŲžØ§ÛØĒŲŲ Ø§Ø˛ **"ڊد ŲØ§ŲŲ
âØ˛Ų
اŲ"** با ÚÛØ˛Û ÚŠŲ Ø¨ŲØ´ **"ÚŠØąŲØĒÛŲ"** Ų
ÛâÚ¯Ų ŲžØ´ØĒÛØ¨Ø§ŲÛ Ų
ÛâÚŠŲŲØ با ØŗÛŲØĒÚŠØŗ **`async` Ų `await`**.
+
+ØØ§Ųا Ø¨Ø§ÛØ¯ Ø¨ÛØ´ØĒØą Ø¨ØąØ§ØĒ Ų
ØšŲÛ Ø¨Ø¯Ų. â¨
+
+ŲŲ
Ų Ø§ÛŲØ§ ÚÛØ˛ÛŲ ÚŠŲ Ø¨Ų FastAPI (Ø§Ø˛ ØˇØąÛŲ Starlette) ŲØ¯ØąØĒ Ų
ÛâØ¯Ų Ų Ø¨Ø§ØšØĢ Ų
ÛâØ´Ų ØšŲ
ŲÚŠØąØ¯ ÚØ´Ų
Ú¯ÛØąÛ داشØĒŲ Ø¨Ø§Ø´Ų.
+
+## ØŦØ˛ØĻÛØ§ØĒ ØŽÛŲÛ ŲŲÛ
+
+/// warning
+
+Ø§ØØĒŲ
Ø§ŲØ§Ų Ų
ÛâØĒŲŲÛ Ø§ÛŲŲ ØąØ¯ ÚŠŲÛ.
+
+اÛŲØ§ ØŦØ˛ØĻÛØ§ØĒ ØŽÛŲÛ ŲŲÛ Ø§Ø˛ ŲØŲŲ ÚŠØ§Øą **FastAPI** Ø˛ÛØą ŲžŲØŗØĒŲâØŗØĒ.
+
+Ø§Ú¯Ų ÛŲ ÚŠŲ
Ø¯Ø§ŲØ´ ŲŲÛ (ÚŠØąŲØĒÛŲâŲØ§Ø ŲØŽâŲØ§Ø Ø¨ŲØ§ÚŠ ÚŠØąØ¯Ų Ų ØēÛØąŲ) Ø¯Ø§ØąÛ Ų ÚŠŲØŦڊاŲÛ ÚŠŲ FastAPI ÚØˇŲØą `async def` ØąŲ Ø¯Øą Ų
ŲØ§Ø¨Ų `def` Ų
ØšŲ
ŲŲÛ Ų
Ø¯ÛØąÛØĒ Ų
ÛâÚŠŲŲØ اداŲ
Ų Ø¨Ø¯Ų.
+
+///
+
+### ØĒŲØ§Ø¨Øš ØšŲ
ŲÛØ§ØĒ Ų
ØŗÛØą
+
+ŲŲØĒÛ ÛŲ *ØĒابؚ ØšŲ
ŲÛØ§ØĒ Ų
ØŗÛØą* ØąŲ Ø¨Ø§ `def` Ų
ØšŲ
ŲŲÛ Ø¨Ų ØŦØ§Û `async def` ØĒØšØąÛŲ Ų
ÛâÚŠŲÛØ ØĒŲÛ ÛŲ Ø§ØŗØĒØŽØą ŲØŽ ØŽØ§ØąØŦÛ Ø§ØŦØąØ§ Ų
ÛâØ´Ų ÚŠŲ Ø¨ØšØ¯Ø´ Ų
ŲØĒØ¸ØąØ´ Ų
ÛâŲ
ŲŲŲØ Ø¨Ų ØŦØ§Û Ø§ÛŲÚŠŲ Ų
ØŗØĒŲÛŲ
Øĩداش ÚŠŲŲ (ÚŲŲ ØŗØąŲØą ØąŲ Ø¨ŲØ§ÚŠ Ų
ÛâÚŠŲŲ).
+
+Ø§Ú¯Ų Ø§Ø˛ ÛŲ ŲØąÛŲ
âŲØąÚŠ ŲØ§ŲŲ
âØ˛Ų
Ø§Ų Ø¯ÛÚ¯Ų Ų
ÛØ§Û ÚŠŲ Ø¨Ų ØąŲØ´ Ø¨Ø§ŲØ§ ÚŠØ§Øą ŲŲ
ÛâÚŠŲŲ Ų ØšØ§Ø¯ØĒ Ø¯Ø§ØąÛ *ØĒŲØ§Ø¨Øš ØšŲ
ŲÛØ§ØĒ Ų
ØŗÛØą* ØŗØ§Ø¯Ų ŲŲØˇ Ų
ØØ§ØŗØ¨Ø§ØĒÛ ØąŲ Ø¨Ø§ `def` Ų
ØšŲ
ŲŲÛ Ø¨ØąØ§Û ÛŲ ØŗŲØ¯ ÚŠŲÚÛÚŠ ØšŲ
ŲÚŠØąØ¯ (ØØ¯Ųد 100 ŲØ§ŲŲØĢØ§ŲÛŲ) ØĒØšØąÛŲ ÚŠŲÛØ ØĒŲØŦŲ ÚŠŲ ÚŠŲ ØĒŲÛ **FastAPI** اØĢØąØ´ ڊاŲ
ŲØ§Ų Ø¨ØąØšÚŠØŗŲ. ØĒŲÛ Ø§ÛŲ Ų
ŲØ§ØąØ¯Ø Ø¨ŲØĒØąŲ Ø§Ø˛ `async def` Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ Ų
Ú¯Ų Ø§ÛŲÚŠŲ *ØĒŲØ§Ø¨Øš ØšŲ
ŲÛØ§ØĒ Ų
ØŗÛØąØĒ* ÚŠØ¯Û Ø¯Ø§Ø´ØĒŲ Ø¨Ø§Ø´Ų ÚŠŲ ØšŲ
ŲÛØ§ØĒ I/O Ø¨ŲØ§ÚŠâÚŠŲŲØ¯Ų Ø§ŲØŦاŲ
بدŲ.
+
+با اÛŲ ØØ§ŲØ ØĒŲÛ ŲØą Ø¯Ų Ų
ŲŲØšÛØĒØ Ø§ØØĒŲ
Ø§ŲØ´ Ø˛ÛØ§Ø¯Ų ÚŠŲ **FastAPI** ŲŲŲØ˛ [ØŗØąÛØšâØĒØą](index.md#performance){.internal-link target=_blank} Ø§Ø˛ ŲØąÛŲ
âŲØąÚŠ ŲØ¨ŲÛâØ§ØĒ Ø¨Ø§Ø´Ų (ÛØ§ ØØ¯Ø§ŲŲ ŲØ§Ø¨Ų Ų
ŲØ§ÛØŗŲ Ø¨Ø§ŲØ§Ø´).
+
+### ŲØ§Ø¨ØŗØĒÚ¯ÛâŲØ§
+
+ŲŲ
ÛŲ Ø¨ØąØ§Û [ŲØ§Ø¨ØŗØĒÚ¯ÛâŲØ§](tutorial/dependencies/index.md){.internal-link target=_blank} ŲŲ
ØĩØ¯Ų Ų
ÛâÚŠŲŲ. Ø§Ú¯Ų ÛŲ ŲØ§Ø¨ØŗØĒÚ¯Û ÛŲ ØĒابؚ `def` Ų
ØšŲ
ŲŲÛ Ø¨Ų ØŦØ§Û `async def` Ø¨Ø§Ø´ŲØ ØĒŲÛ Ø§ØŗØĒØŽØą ŲØŽ ØŽØ§ØąØŦÛ Ø§ØŦØąØ§ Ų
ÛâØ´Ų.
+
+### Ø˛ÛØąŲØ§Ø¨ØŗØĒÚ¯ÛâŲØ§
+
+Ų
ÛâØĒŲŲÛ ÚŲØ¯ ØĒا ŲØ§Ø¨ØŗØĒÚ¯Û Ų [Ø˛ÛØąŲØ§Ø¨ØŗØĒÚ¯Û](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank} داشØĒŲ Ø¨Ø§Ø´Û ÚŠŲ ŲŲ
دÛÚ¯Ų ØąŲ ŲÛØ§Ø˛ Ø¯Ø§ØąŲ (بŲâØšŲŲØ§Ų ŲžØ§ØąØ§Ų
ØĒØąŲØ§Û ØĒØšØąÛŲ ØĒابؚ)Ø Ø¨ØšØļÛâŲØ§Ø´ŲŲ Ų
Ų
ÚŠŲŲ Ø¨Ø§ `async def` ØŗØ§ØŽØĒŲ Ø¨Ø´Ų Ų Ø¨ØšØļÛâŲØ§ با `def` Ų
ØšŲ
ŲŲÛ. Ø¨Ø§Ø˛Ų
ÚŠØ§Øą Ų
ÛâÚŠŲŲØ Ų Ø§ŲŲØ§ÛÛ ÚŠŲ Ø¨Ø§ `def` Ų
ØšŲ
ŲŲÛ ØŗØ§ØŽØĒŲ Ø´Ø¯Ų ØĒŲÛ ÛŲ ŲØŽ ØŽØ§ØąØŦÛ (Ø§Ø˛ Ø§ØŗØĒØŽØą ŲØŽ) Øĩدا Ø˛Ø¯Ų Ų
ÛâØ´Ų Ø¨Ų ØŦØ§Û Ø§ÛŲÚŠŲ "Ų
ŲØĒØ¸ØąØ´ŲŲ" بŲ
ŲŲŲ.
+
+### ØĒŲØ§Ø¨Øš ÚŠØ§ØąØ¨ØąØ¯Û Ø¯ÛÚ¯Ų
+
+ŲØą ØĒØ§Ø¨Øš ÚŠØ§ØąØ¨ØąØ¯Û Ø¯ÛÚ¯ŲâØ§Û ÚŠŲ Ų
ØŗØĒŲÛŲ
ØŽŲØ¯ØĒ Øĩداش Ų
ÛâÚŠŲÛ Ų
ÛâØĒŲŲŲ Ø¨Ø§ `def` Ų
ØšŲ
ŲŲÛ ÛØ§ `async def` ØŗØ§ØŽØĒŲ Ø¨Ø´Ų Ų FastAPI ØąŲ ŲØŲŲ ØĩØ¯Ø§Ø˛Ø¯ŲØ´ ØĒØŖØĢÛØą ŲŲ
ÛâØ°Ø§ØąŲ.
+
+اÛŲ Ø¨ØąØŽŲØ§Ų ØĒŲØ§Ø¨ØšÛ ŲØŗØĒ ÚŠŲ FastAPI Ø¨ØąØ§ØĒ ØĩداشŲŲ Ų
ÛâÚŠŲŲ: *ØĒŲØ§Ø¨Øš ØšŲ
ŲÛØ§ØĒ Ų
ØŗÛØą* Ų ŲØ§Ø¨ØŗØĒÚ¯ÛâŲØ§.
+
+Ø§Ú¯Ų ØĒابؚ ÚŠØ§ØąØ¨ØąØ¯ÛØĒ ÛŲ ØĒابؚ Ų
ØšŲ
ŲŲÛ Ø¨Ø§ `def` Ø¨Ø§Ø´ŲØ Ų
ØŗØĒŲÛŲ
Øĩداش Ų
ÛâÚŠŲŲ (ŲŲ
ŲŲâØˇŲØą ÚŠŲ ØĒŲÛ ÚŠØ¯ØĒ ŲŲØ´ØĒÛ)Ø ŲŲ ØĒŲÛ Ø§ØŗØĒØŽØą ŲØŽØ Ø§Ú¯Ų ØĒابؚ با `async def` ØŗØ§ØŽØĒŲ Ø´Ø¯Ų Ø¨Ø§Ø´ŲØ Ø¨Ø§ÛØ¯ ŲŲØĒÛ ØĒŲÛ ÚŠØ¯ØĒ Øĩداش Ų
ÛâÚŠŲÛ `await`Ø´ ÚŠŲÛ.
+
+---
+
+Ø¯ŲØ¨Ø§ØąŲØ Ø§ÛŲØ§ ØŦØ˛ØĻÛØ§ØĒ ØŽÛŲÛ ŲŲÛ ŲØŗØĒŲ ÚŠŲ Ø§ØØĒŲ
Ø§ŲØ§Ų Ø§Ú¯Ų Ø¯ŲØ¨Ø§ŲØ´ŲŲ Ø§ŲŲ
Ø¯Ų Ø¨Ø§Ø´Û Ø¨ØąØ§ØĒ Ų
ŲÛØ¯ باشŲ.
+
+ŲÚ¯ØąŲŲØ با ØąØ§ŲŲŲ
اÛÛâŲØ§Û ب؎ش Ø¨Ø§ŲØ§ Ø¨Ø§ÛØ¯ ØŽŲØ¨ باشÛ: ØšØŦŲŲ Ø¯Ø§ØąÛØ .
diff --git a/docs/fa/docs/environment-variables.md b/docs/fa/docs/environment-variables.md
new file mode 100644
index 000000000..75309ce1f
--- /dev/null
+++ b/docs/fa/docs/environment-variables.md
@@ -0,0 +1,298 @@
+# Ų
ØĒØēÛØąŲØ§Û Ų
ØÛØˇÛ
+
+/// tip
+
+Ø§Ú¯Ų Ø§Ø˛ ŲØ¨Ų Ų
ÛâØ¯ŲŲÛ Ų
ØĒØēÛØąŲØ§Û Ų
ØÛØˇÛ ÚÛ ŲØŗØĒŲ Ų ÚØˇŲØą Ø§Ø˛Ø´ŲŲ Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâØ´ŲØ Ų
ÛâØĒŲŲÛ Ø§ÛŲ Ø¨ØŽØ´ ØąŲ ØąØ¯ ÚŠŲÛ.
+
+///
+
+ÛŲ Ų
ØĒØēÛØą Ų
ØÛØˇÛ (ÚŠŲ Ø¨ŲØ´ "**env var**" ŲŲ
Ų
ÛâÚ¯Ų) ÛŲ Ų
ØĒØēÛØąÛŲ ÚŠŲ **ØŽØ§ØąØŦ** Ø§Ø˛ ڊد ŲžØ§ÛØĒŲŲØ ØĒŲÛ **ØŗÛØŗØĒŲ
âØšØ§Ų
Ų** Ø˛ŲØ¯Ú¯Û Ų
ÛâÚŠŲŲ Ų Ų
ÛâØĒŲŲŲ ØĒŲØŗØˇ ڊد ŲžØ§ÛØĒŲŲØĒ (ÛØ§ Ø¨ØąŲØ§Ų
ŲâŲØ§Û دÛÚ¯Ų) ØŽŲŲØ¯Ų بشŲ.
+
+Ų
ØĒØēÛØąŲØ§Û Ų
ØÛØˇÛ Ų
ÛâØĒŲŲŲ Ø¨ØąØ§Û Ų
Ø¯ÛØąÛØĒ **ØĒŲØ¸ÛŲ
اØĒ** Ø¨ØąŲØ§Ų
ŲØ بŲâØšŲŲØ§Ų Ø¨ØŽØ´Û Ø§Ø˛ **ŲØĩب** ŲžØ§ÛØĒŲŲ Ų ØēÛØąŲ Ų
ŲÛØ¯ باشŲ.
+
+## ØŗØ§ØŽØĒ Ų Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ Ų
ØĒØēÛØąŲØ§Û Ų
ØÛØˇÛ
+
+Ų
ÛâØĒŲŲÛ Ų
ØĒØēÛØąŲØ§Û Ų
ØÛØˇÛ ØąŲ ØĒŲÛ **Ø´Ų (ØĒØąŲ
ÛŲØ§Ų)** **Ø¨ØŗØ§Ø˛Û** Ų Ø§Ø˛Ø´ŲŲ Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛØ بدŲŲ Ø§ÛŲÚŠŲ Ø¨Ų ŲžØ§ÛØĒŲŲ ŲÛØ§Ø˛ داشØĒŲ Ø¨Ø§Ø´Û:
+
+//// tab | ŲÛŲŲÚŠØŗØ Ų
ÚŠâØ§ŲØ§ØŗØ ŲÛŲØ¯ŲØ˛ بش
+
+
+
+```console
+// Ų
ÛâØĒŲŲÛ ÛŲ Ų
ØĒØēÛØą Ų
ØÛØˇÛ Ø¨Ų Ø§ØŗŲ
MY_NAME Ø¨ØŗØ§Ø˛Û Ø¨Ø§
+$ export MY_NAME="Wade Wilson"
+
+// بؚد Ų
ÛâØĒŲŲÛ Ø¨Ø§ Ø¨ØąŲØ§Ų
ŲâŲØ§Û دÛÚ¯Ų Ø§Ø˛Ø´ Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛØ Ų
ØĢŲ
+$ echo "Hello $MY_NAME"
+
+Hello Wade Wilson
+```
+
+
+
+////
+
+//// tab | ŲÛŲØ¯ŲØ˛ ŲžØ§ŲØąØ´Ų
+
+
+
+```console
+// ÛŲ Ų
ØĒØēÛØą Ų
ØÛØˇÛ Ø¨Ų Ø§ØŗŲ
MY_NAME Ø¨ØŗØ§Ø˛
+$ $Env:MY_NAME = "Wade Wilson"
+
+// با Ø¨ØąŲØ§Ų
ŲâŲØ§Û دÛÚ¯Ų Ø§Ø˛Ø´ Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲØ Ų
ØĢŲ
+$ echo "Hello $Env:MY_NAME"
+
+Hello Wade Wilson
+```
+
+
+
+////
+
+## ØŽŲŲØ¯Ų Ų
ØĒØēÛØąŲØ§Û Ų
ØÛØˇÛ ØĒŲÛ ŲžØ§ÛØĒŲŲ
+
+Ų
ÛâØĒŲŲÛ Ų
ØĒØēÛØąŲØ§Û Ų
ØÛØˇÛ ØąŲ **ØŽØ§ØąØŦ** Ø§Ø˛ ŲžØ§ÛØĒŲŲØ ØĒŲÛ ØĒØąŲ
ÛŲØ§Ų (ÛØ§ با ŲØą ØąŲØ´ دÛÚ¯Ų) Ø¨ØŗØ§Ø˛ÛØ Ų Ø¨ØšØ¯ ØĒŲÛ **ŲžØ§ÛØĒŲŲ** اŲŲØ§ ØąŲ Ø¨ØŽŲŲÛ.
+
+Ų
ØĢŲØ§Ų Ų
ÛâØĒŲŲÛ ÛŲ ŲØ§ÛŲ `main.py` داشØĒŲ Ø¨Ø§Ø´Û Ø¨Ø§:
+
+```Python hl_lines="3"
+import os
+
+name = os.getenv("MY_NAME", "World")
+print(f"Hello {name} from Python")
+```
+
+/// tip
+
+ØĸØąÚ¯ŲŲ
Ø§Ų Ø¯ŲŲ
`os.getenv()` Ų
ŲØ¯Ø§Øą ŲžÛØ´âŲØąØļÛŲ ÚŠŲ Ø¨ØąŲ
ÛâÚ¯ØąØ¯ŲŲŲ.
+
+Ø§Ú¯Ų ŲØ¯ÛØ Ø¨ŲâØĩŲØąØĒ ŲžÛØ´âŲØąØļ `None` ŲØŗØĒØ Ø§ÛŲØŦا Ų
ا `"World"` ØąŲ Ø¨ŲâØšŲŲØ§Ų Ų
ŲØ¯Ø§Øą ŲžÛØ´âŲØąØļ گذاشØĒÛŲ
.
+
+///
+
+بؚد Ų
ÛâØĒŲŲÛ Ø§ŲŲ Ø¨ØąŲØ§Ų
Ų ŲžØ§ÛØĒŲŲ ØąŲ Øĩدا ÚŠŲÛ:
+
+//// tab | ŲÛŲŲÚŠØŗØ Ų
ÚŠâØ§ŲØ§ØŗØ ŲÛŲØ¯ŲØ˛ بش
+
+
+
+```console
+// اÛŲØŦا ŲŲŲØ˛ Ų
ØĒØēÛØą Ų
ØÛØˇÛ ØąŲ ØĒŲØ¸ÛŲ
ŲÚŠØąØ¯ÛŲ
+$ python main.py
+
+// ÚŲŲ Ų
ØĒØēÛØą Ų
ØÛØˇÛ ØąŲ ØĒŲØ¸ÛŲ
ŲÚŠØąØ¯ÛŲ
Ø Ų
ŲØ¯Ø§Øą ŲžÛØ´âŲØąØļ ØąŲ Ų
ÛâÚ¯ÛØąÛŲ
+
+Hello World from Python
+
+// ŲŲÛ Ø§Ú¯Ų Ø§ŲŲ ÛŲ Ų
ØĒØēÛØą Ų
ØÛØˇÛ Ø¨ØŗØ§Ø˛ÛŲ
+$ export MY_NAME="Wade Wilson"
+
+// Ų Ø¨ØšØ¯ Ø¯ŲØ¨Ø§ØąŲ Ø¨ØąŲØ§Ų
Ų ØąŲ Øĩدا ÚŠŲÛŲ
+$ python main.py
+
+// ØØ§Ųا Ų
ÛâØĒŲŲŲ Ų
ØĒØēÛØą Ų
ØÛØˇÛ ØąŲ Ø¨ØŽŲŲŲ
+
+Hello Wade Wilson from Python
+```
+
+
+
+////
+
+//// tab | ŲÛŲØ¯ŲØ˛ ŲžØ§ŲØąØ´Ų
+
+
+
+```console
+// اÛŲØŦا ŲŲŲØ˛ Ų
ØĒØēÛØą Ų
ØÛØˇÛ ØąŲ ØĒŲØ¸ÛŲ
ŲÚŠØąØ¯ÛŲ
+$ python main.py
+
+// ÚŲŲ Ų
ØĒØēÛØą Ų
ØÛØˇÛ ØąŲ ØĒŲØ¸ÛŲ
ŲÚŠØąØ¯ÛŲ
Ø Ų
ŲØ¯Ø§Øą ŲžÛØ´âŲØąØļ ØąŲ Ų
ÛâÚ¯ÛØąÛŲ
+
+Hello World from Python
+
+// ŲŲÛ Ø§Ú¯Ų Ø§ŲŲ ÛŲ Ų
ØĒØēÛØą Ų
ØÛØˇÛ Ø¨ØŗØ§Ø˛ÛŲ
+$ $Env:MY_NAME = "Wade Wilson"
+
+// Ų Ø¨ØšØ¯ Ø¯ŲØ¨Ø§ØąŲ Ø¨ØąŲØ§Ų
Ų ØąŲ Øĩدا ÚŠŲÛŲ
+$ python main.py
+
+// ØØ§Ųا Ų
ÛâØĒŲŲŲ Ų
ØĒØēÛØą Ų
ØÛØˇÛ ØąŲ Ø¨ØŽŲŲŲ
+
+Hello Wade Wilson from Python
+```
+
+
+
+////
+
+ÚŲŲ Ų
ØĒØēÛØąŲØ§Û Ų
ØÛØˇÛ Ų
ÛâØĒŲŲŲ ØŽØ§ØąØŦ Ø§Ø˛ ڊد ØĒŲØ¸ÛŲ
Ø¨Ø´ŲØ ŲŲÛ ÚŠØ¯ Ų
ÛâØĒŲŲŲ Ø§ŲŲØ§ ØąŲ Ø¨ØŽŲŲŲØ Ų ŲØ§Ø˛Ų
ŲÛØŗØĒ با بŲÛŲ ŲØ§ÛŲâŲØ§ Ø°ØŽÛØąŲ (ÚŠŲ
ÛØĒÛ Ø¨Ų `git`) Ø¨Ø´ŲØ Ų
ØšŲ
ŲŲØ§Ų Ø¨ØąØ§Û ŲžÛÚŠØąØ¨ŲØ¯Û ÛØ§ **ØĒŲØ¸ÛŲ
اØĒ** Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâØ´Ų.
+
+ŲŲ
ÚŲÛŲ Ų
ÛâØĒŲŲÛ ÛŲ Ų
ØĒØēÛØą Ų
ØÛØˇÛ ØąŲ ŲŲØˇ Ø¨ØąØ§Û **ÛŲ Ø§ØŦØąØ§Û ØŽØ§Øĩ Ø¨ØąŲØ§Ų
Ų** Ø¨ØŗØ§Ø˛ÛØ ÚŠŲ ŲŲØˇ Ø¨ØąØ§Û Ø§ŲŲ Ø¨ØąŲØ§Ų
Ų Ų ŲŲØˇ Ø¨ØąØ§Û Ų
دØĒ Ø˛Ų
Ø§Ų Ø§ØŦØąØ§Ø´ Ø¯Øą Ø¯ØŗØĒØąØŗŲ.
+
+Ø¨ØąØ§Û Ø§ÛŲ ÚŠØ§ØąØ Ø¯ØąØŗØĒ ŲØ¨Ų Ø§Ø˛ ØŽŲØ¯ Ø¨ØąŲØ§Ų
ŲØ ØĒŲÛ ŲŲ
ŲŲ ØŽØˇ Ø¨ØŗØ§Ø˛Ø´:
+
+
+
+```console
+// ÛŲ Ų
ØĒØēÛØą Ų
ØÛØˇÛ MY_NAME ØąŲ ØĒŲÛ ØŽØˇ Ø¨ØąØ§Û Ø§ÛŲ Ø§ØŦØąØ§Û Ø¨ØąŲØ§Ų
Ų Ø¨ØŗØ§Ø˛
+$ MY_NAME="Wade Wilson" python main.py
+
+// ØØ§Ųا Ų
ÛâØĒŲŲŲ Ų
ØĒØēÛØą Ų
ØÛØˇÛ ØąŲ Ø¨ØŽŲŲŲ
+
+Hello Wade Wilson from Python
+
+// Ų
ØĒØēÛØą Ų
ØÛØˇÛ Ø¨ØšØ¯Ø´ دÛÚ¯Ų ŲØŦŲØ¯ ŲØ¯Ø§ØąŲ
+$ python main.py
+
+Hello World from Python
+```
+
+
+
+/// tip
+
+Ų
ÛâØĒŲŲÛ Ø¨ÛØ´ØĒØą Ø¯Øą Ų
ŲØąØ¯Ø´ ØĒŲÛ Ø¨ØąŲØ§Ų
Ų Ø¯ŲØ§Ø˛Ø¯ŲâŲØ§ÚŠØĒŲØąÛ: ŲžÛÚŠØąØ¨ŲØ¯Û ب؎ŲŲÛ.
+
+///
+
+## ŲŲØšâŲØ§ Ų Ø§ØšØĒØ¨Ø§ØąØŗŲØŦÛ
+
+اÛŲ Ų
ØĒØēÛØąŲØ§Û Ų
ØÛØˇÛ ŲŲØˇ Ų
ÛâØĒŲŲŲ **ØąØ´ØĒŲâŲØ§Û Ų
ØĒŲÛ** ØąŲ ŲÚ¯Ų Ø¯Ø§ØąŲØ ÚŲŲ ØŽØ§ØąØŦ Ø§Ø˛ ŲžØ§ÛØĒŲŲ ŲØŗØĒŲ Ų Ø¨Ø§ÛØ¯ با Ø¨ØąŲØ§Ų
ŲâŲØ§Û دÛÚ¯Ų Ų Ø¨ŲÛŲ ØŗÛØŗØĒŲ
(Ų ØØĒÛ ØŗÛØŗØĒŲ
âØšØ§Ų
ŲâŲØ§Û Ų
ØŽØĒŲŲ Ų
ØĢŲ ŲÛŲŲÚŠØŗØ ŲÛŲØ¯ŲØ˛Ø Ų
ÚŠâØ§ŲØ§Øŗ) ØŗØ§Ø˛Ú¯Ø§Øą باشŲ.
+
+ÛØšŲÛ **ŲØą Ų
ŲØ¯Ø§ØąÛ** ÚŠŲ ØĒŲÛ ŲžØ§ÛØĒŲŲ Ø§Ø˛ ÛŲ Ų
ØĒØēÛØą Ų
ØÛØˇÛ ØŽŲŲØ¯Ų Ų
ÛâØ´Ų ÛŲ `str` ŲØŗØĒØ Ų ŲØą ØĒØ¨Ø¯ÛŲ Ø¨Ų Ųب𠨝ÛÚ¯Ų ÛØ§ ŲØą Ø§ØšØĒØ¨Ø§ØąØŗŲØŦÛ Ø¨Ø§ÛØ¯ ØĒŲÛ ÚŠØ¯ Ø§ŲØŦاŲ
بشŲ.
+
+ØĒŲÛ [ØąØ§ŲŲŲ
Ø§Û ÚŠØ§ØąØ¨Øą ŲžÛØ´ØąŲØĒŲ - ØĒŲØ¸ÛŲ
اØĒ Ų Ų
ØĒØēÛØąŲØ§Û Ų
ØÛØˇÛ](./advanced/settings.md){.internal-link target=_blank} Ø¨ÛØ´ØĒØą Ø¯Øą Ų
بਝ Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ Ų
ØĒØēÛØąŲØ§Û Ų
ØÛØˇÛ Ø¨ØąØ§Û Ų
Ø¯ÛØąÛØĒ **ØĒŲØ¸ÛŲ
اØĒ Ø¨ØąŲØ§Ų
Ų** ÛØ§Ø¯ Ų
ÛâÚ¯ÛØąÛ.
+
+## Ų
ØĒØēÛØą Ų
ØÛØˇÛ `PATH`
+
+ÛŲ Ų
ØĒØēÛØą Ų
ØÛØˇÛ **؎اØĩ** Ø¨Ų Ø§ØŗŲ
**`PATH`** ŲØŦŲØ¯ Ø¯Ø§ØąŲ ÚŠŲ ØŗÛØŗØĒŲ
âØšØ§Ų
ŲâŲØ§ (ŲÛŲŲÚŠØŗØ Ų
ÚŠâØ§ŲØ§ØŗØ ŲÛŲØ¯ŲØ˛) Ø§Ø˛Ø´ Ø¨ØąØ§Û ŲžÛØ¯Ø§ ÚŠØąØ¯Ų Ø¨ØąŲØ§Ų
ŲâŲØ§ÛÛ ÚŠŲ ŲØąØ§ØąŲ Ø§ØŦØąØ§ Ø¨Ø´Ų Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲŲ.
+
+Ų
ŲØ¯Ø§Øą Ų
ØĒØēÛØą `PATH` ÛŲ ØąØ´ØĒŲ ØˇŲŲØ§ŲÛ Ø§Ø˛ ŲžŲØ´ŲâŲØ§ØŗØĒ ÚŠŲ ØĒŲÛ ŲÛŲŲÚŠØŗ Ų Ų
ÚŠâØ§ŲØ§Øŗ با دŲŲŲØˇŲ `:` Ų ØĒŲÛ ŲÛŲØ¯ŲØ˛ با ŲŲØˇŲâŲÛØąÚ¯ŲŲ `;` Ø§Ø˛ ŲŲ
ØŦدا شدŲ.
+
+Ų
ØĢŲØ§ŲØ Ų
ØĒØēÛØą Ų
ØÛØˇÛ `PATH` Ų
ÛâØĒŲŲŲ Ø§ÛŲØŦŲØąÛ باشŲ:
+
+//// tab | ŲÛŲŲÚŠØŗØ Ų
ÚŠâØ§ŲØ§Øŗ
+
+```plaintext
+/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
+```
+
+ÛØšŲÛ ØŗÛØŗØĒŲ
Ø¨Ø§ÛØ¯ Ø¯ŲØ¨Ø§Ų Ø¨ØąŲØ§Ų
ŲâŲØ§ ØĒŲÛ Ø§ÛŲ ŲžŲØ´ŲâŲØ§ Ø¨Ú¯ØąØ¯Ų:
+
+* `/usr/local/bin`
+* `/usr/bin`
+* `/bin`
+* `/usr/sbin`
+* `/sbin`
+
+////
+
+//// tab | ŲÛŲØ¯ŲØ˛
+
+```plaintext
+C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32
+```
+
+ÛØšŲÛ ØŗÛØŗØĒŲ
Ø¨Ø§ÛØ¯ Ø¯ŲØ¨Ø§Ų Ø¨ØąŲØ§Ų
ŲâŲØ§ ØĒŲÛ Ø§ÛŲ ŲžŲØ´ŲâŲØ§ Ø¨Ú¯ØąØ¯Ų:
+
+* `C:\Program Files\Python312\Scripts`
+* `C:\Program Files\Python312`
+* `C:\Windows\System32`
+
+////
+
+ŲŲØĒÛ ÛŲ **Ø¯ØŗØĒŲØą** ØĒŲÛ ØĒØąŲ
ÛŲØ§Ų ØĒاÛŲž Ų
ÛâÚŠŲÛØ ØŗÛØŗØĒŲ
âØšØ§Ų
Ų **Ø¯ŲØ¨Ø§Ų** Ø¨ØąŲØ§Ų
Ų ØĒŲÛ **ŲØą ڊدŲŲ
Ø§Ø˛ اÛŲ ŲžŲØ´ŲâŲØ§** ÚŠŲ ØĒŲÛ Ų
ØĒØēÛØą Ų
ØÛØˇÛ `PATH` ŲÛØŗØĒ Ø´Ø¯Ų Ų
ÛâÚ¯ØąØ¯Ų.
+
+Ų
ØĢŲØ§ŲØ ŲŲØĒÛ ØĒŲÛ ØĒØąŲ
ÛŲØ§Ų `python` ØĒاÛŲž Ų
ÛâÚŠŲÛØ ØŗÛØŗØĒŲ
âØšØ§Ų
Ų Ø¯ŲØ¨Ø§Ų ÛŲ Ø¨ØąŲØ§Ų
Ų Ø¨Ų Ø§ØŗŲ
`python` ØĒŲÛ **اŲŲÛŲ ŲžŲØ´Ų** ØĒŲÛ Ø§ŲŲ ŲÛØŗØĒ Ų
ÛâÚ¯ØąØ¯Ų.
+
+Ø§Ú¯Ų ŲžÛØ¯Ø§Ø´ ÚŠŲŲØ **Ø§ØŗØĒŲØ§Ø¯ŲâØ´ Ų
ÛâÚŠŲŲ**. ŲÚ¯ØąŲŲ ØĒŲÛ **ŲžŲØ´ŲâŲØ§Û بؚدÛ** Ø¯ŲØ¨Ø§ŲØ´ Ų
ÛâÚ¯ØąØ¯Ų.
+
+### ŲØĩب ŲžØ§ÛØĒŲŲ Ų Ø¨ŲâØąŲØ˛ØąØŗØ§ŲÛ `PATH`
+
+ŲŲØĒÛ ŲžØ§ÛØĒŲŲ ØąŲ ŲØĩب Ų
ÛâÚŠŲÛØ Ų
Ų
ÚŠŲŲ Ø§Ø˛ØĒ Ø¨ŲžØąØŗŲ ØĸÛØ§ Ų
ÛâØŽŲØ§Û Ų
ØĒØēÛØą Ų
ØÛØˇÛ `PATH` ØąŲ Ø¨ŲâØąŲØ˛ØąØŗØ§ŲÛ ÚŠŲÛ.
+
+//// tab | ŲÛŲŲÚŠØŗØ Ų
ÚŠâØ§ŲØ§Øŗ
+
+ŲØąØļ ÚŠŲ ŲžØ§ÛØĒŲŲ ØąŲ ŲØĩب ÚŠØąØ¯Û Ų ØĒŲÛ ÛŲ ŲžŲØ´Ų `/opt/custompython/bin` ŲØąØ§Øą Ú¯ØąŲØĒŲ.
+
+Ø§Ú¯Ų Ø¨Ú¯Û Ø¨ŲŲ Ø¨ØąØ§Û Ø¨ŲâØąŲØ˛ØąØŗØ§ŲÛ Ų
ØĒØēÛØą Ų
ØÛØˇÛ `PATH`Ø ŲØĩاب `/opt/custompython/bin` ØąŲ Ø¨Ų Ų
ØĒØēÛØą Ų
ØÛØˇÛ `PATH` اØļاŲŲ Ų
ÛâÚŠŲŲ.
+
+Ų
Ų
ÚŠŲŲ Ø§ÛŲØŦŲØąÛ بشŲ:
+
+```plaintext
+/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/custompython/bin
+```
+
+اÛŲâØŦŲØąÛØ ŲŲØĒÛ ØĒŲÛ ØĒØąŲ
ÛŲØ§Ų `python` ØĒاÛŲž Ų
ÛâÚŠŲÛØ ØŗÛØŗØĒŲ
Ø¨ØąŲØ§Ų
Ų ŲžØ§ÛØĒŲŲ ØąŲ ØĒŲÛ `/opt/custompython/bin` (ØĸØŽØąÛŲ ŲžŲØ´Ų) ŲžÛØ¯Ø§ Ų
ÛâÚŠŲŲ Ų Ø§Ø˛ اŲŲ Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲŲ.
+
+////
+
+//// tab | ŲÛŲØ¯ŲØ˛
+
+ŲØąØļ ÚŠŲ ŲžØ§ÛØĒŲŲ ØąŲ ŲØĩب ÚŠØąØ¯Û Ų ØĒŲÛ ÛŲ ŲžŲØ´Ų `C:\opt\custompython\bin` ŲØąØ§Øą Ú¯ØąŲØĒŲ.
+
+Ø§Ú¯Ų Ø¨Ú¯Û Ø¨ŲŲ Ø¨ØąØ§Û Ø¨ŲâØąŲØ˛ØąØŗØ§ŲÛ Ų
ØĒØēÛØą Ų
ØÛØˇÛ `PATH`Ø ŲØĩاب `C:\opt\custompython\bin` ØąŲ Ø¨Ų Ų
ØĒØēÛØą Ų
ØÛØˇÛ `PATH` اØļاŲŲ Ų
ÛâÚŠŲŲ.
+
+```plaintext
+C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System32;C:\opt\custompython\bin
+```
+
+اÛŲâØŦŲØąÛØ ŲŲØĒÛ ØĒŲÛ ØĒØąŲ
ÛŲØ§Ų `python` ØĒاÛŲž Ų
ÛâÚŠŲÛØ ØŗÛØŗØĒŲ
Ø¨ØąŲØ§Ų
Ų ŲžØ§ÛØĒŲŲ ØąŲ ØĒŲÛ `C:\opt\custompython\bin` (ØĸØŽØąÛŲ ŲžŲØ´Ų) ŲžÛØ¯Ø§ Ų
ÛâÚŠŲŲ Ų Ø§Ø˛ اŲŲ Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲŲ.
+
+////
+
+ŲžØŗØ Ø§Ú¯Ų ØĒاÛŲž ÚŠŲÛ:
+
+
+
+```console
+$ python
+```
+
+
+
+//// tab | ŲÛŲŲÚŠØŗØ Ų
ÚŠâØ§ŲØ§Øŗ
+
+ØŗÛØŗØĒŲ
Ø¨ØąŲØ§Ų
Ų `python` ØąŲ ØĒŲÛ `/opt/custompython/bin` **ŲžÛØ¯Ø§** Ų
ÛâÚŠŲŲ Ų Ø§ØŦØąØ§Ø´ Ų
ÛâÚŠŲŲ.
+
+ØĒŲØąÛØ¨Ø§Ų Ų
ØšØ§Ø¯Ų Ø§ÛŲŲ ÚŠŲ ØĒاÛŲž ÚŠŲÛ:
+
+
+
+```console
+$ /opt/custompython/bin/python
+```
+
+
+
+////
+
+//// tab | ŲÛŲØ¯ŲØ˛
+
+ØŗÛØŗØĒŲ
Ø¨ØąŲØ§Ų
Ų `python` ØąŲ ØĒŲÛ `C:\opt\custompython\bin\python` **ŲžÛØ¯Ø§** Ų
ÛâÚŠŲŲ Ų Ø§ØŦØąØ§Ø´ Ų
ÛâÚŠŲŲ.
+
+ØĒŲØąÛØ¨Ø§Ų Ų
ØšØ§Ø¯Ų Ø§ÛŲŲ ÚŠŲ ØĒاÛŲž ÚŠŲÛ:
+
+
+
+```console
+$ C:\opt\custompython\bin\python
+```
+
+
+
+////
+
+اÛŲ Ø§ØˇŲØ§ØšØ§ØĒ ŲŲØĒÛ Ø¯Øą Ų
بਝ [Ų
ØÛØˇâŲØ§Û Ų
ØŦØ§Ø˛Û](virtual-environments.md){.internal-link target=_blank} ÛØ§Ø¯ Ų
ÛâÚ¯ÛØąÛ بŲâØ¯ØąØ¯ØĒ Ų
ÛâØŽŲØąŲ.
+
+## ŲØĒÛØŦŲâÚ¯ÛØąÛ
+
+با اÛŲ Ø¨Ø§ÛØ¯ ÛŲ Ø¯ØąÚŠ ŲžØ§ÛŲâØ§Û Ø§Ø˛ **Ų
ØĒØēÛØąŲØ§Û Ų
ØÛØˇÛ** Ų ŲØŲŲ Ø§ØŗØĒŲØ§Ø¯ŲâØ´ŲŲ ØĒŲÛ ŲžØ§ÛØĒŲŲ Ø¯Ø§Ø´ØĒŲ Ø¨Ø§Ø´Û.
+
+Ų
ÛâØĒŲŲÛ Ø¨ÛØ´ØĒØą Ø¯Øą Ų
ŲØąØ¯Ø´ŲŲ ØĒŲÛ ŲÛÚŠÛâŲžØ¯ÛØ§ Ø¨ØąØ§Û Ų
ØĒØēÛØą Ų
ØÛØˇÛ Ø¨ØŽŲŲÛ.
+
+ØĒŲÛ ØŽÛŲÛ Ų
ŲØ§ØąØ¯ Ų
Ø´ØŽØĩ ŲÛØŗØĒ ÚŠŲ Ų
ØĒØēÛØąŲØ§Û Ų
ØÛØˇÛ ÚØˇŲØą Ų
ÛâØĒŲŲŲ ŲŲØąÛ Ų
ŲÛØ¯ Ų ÚŠØ§ØąØ¨ØąØ¯Û Ø¨Ø§Ø´Ų. ŲŲÛ ØĒŲÛ Ų
ŲŲØšÛØĒâŲØ§Û Ų
ØŽØĒŲŲ ØĒŲØŗØšŲ Ų
داŲ
ŲžÛØ¯Ø§Ø´ŲŲ Ų
ÛâØ´ŲØ ŲžØŗ ØŽŲØ¨Ų ÚŠŲ Ø¯Øą Ų
ŲØąØ¯Ø´ŲŲ Ø¨Ø¯ŲŲÛ.
+
+Ų
ØĢŲØ§ŲØ ØĒŲÛ Ø¨ØŽØ´ Ø¨ØšØ¯Û Ø¯Øą Ų
بਝ [Ų
ØÛØˇâŲØ§Û Ų
ØŦØ§Ø˛Û](virtual-environments.md) Ø¨Ų Ø§ÛŲ Ø§ØˇŲØ§ØšØ§ØĒ ŲÛØ§Ø˛ Ø¯Ø§ØąÛ.
diff --git a/docs/fa/docs/learn/index.md b/docs/fa/docs/learn/index.md
new file mode 100644
index 000000000..06aa7f00e
--- /dev/null
+++ b/docs/fa/docs/learn/index.md
@@ -0,0 +1,5 @@
+# ÛØ§Ø¯Ú¯ÛØąÛ
+
+اÛŲØŦا ب؎شâŲØ§Û Ų
ŲØ¯Ų
اØĒÛ Ų ØĸŲ
ŲØ˛Ø´âŲØ§ÛÛ ŲØŗØĒŲ ÚŠŲ Ø¨ØąØ§Û ÛØ§Ø¯Ú¯ÛØąÛ **FastAPI** Ø¨ŲØĒ ÚŠŲ
ÚŠ Ų
ÛâÚŠŲŲ.
+
+Ų
ÛâØĒŲŲÛ Ø§ÛŲŲ ÛŲ **ÚŠØĒاب**Ø ÛŲ **Ø¯ŲØąŲ ØĸŲ
ŲØ˛Ø´Û**Ø ÛØ§ ØąØ§Ų **ØąØŗŲ
Û** Ų ŲžÛØ´ŲŲØ§Ø¯Û Ø¨ØąØ§Û ÛØ§Ø¯Ú¯ÛØąÛ FastAPI Ø¯Øą ŲØ¸Øą Ø¨Ú¯ÛØąÛ. đ
diff --git a/docs/fa/docs/python-types.md b/docs/fa/docs/python-types.md
new file mode 100644
index 000000000..c428acbf7
--- /dev/null
+++ b/docs/fa/docs/python-types.md
@@ -0,0 +1,578 @@
+# Ų
ŲØ¯Ų
ŲâØ§Û Ø¨Øą اŲŲØ§Øš ŲŲØš Ø¯Øą ŲžØ§ÛØĒŲŲ
+
+ŲžØ§ÛØĒŲŲ Ø§Ø˛ "ŲŲØšâŲŲ
ا"ŲØ§Û ا؎ØĒÛØ§ØąÛ (ÚŠŲ Ø¨ŲØ´ŲŲ "type hints" ÛØ§ "type annotations" ŲŲ
Ų
ÛâÚ¯Ų) ŲžØ´ØĒÛØ¨Ø§ŲÛ Ų
ÛâÚŠŲŲ.
+
+اÛŲ **"ŲŲØšâŲŲ
Ø§ŲØ§"** ÛØ§ annotationŲØ§ ÛŲ ØŗÛŲØĒÚŠØŗ ؎اØĩ ŲØŗØĒŲ ÚŠŲ Ø¨ŲØĒ Ø§ØŦØ§Ø˛Ų Ų
ÛâØ¯Ų ŲŲØš ÛŲ Ų
ØĒØēÛØą ØąŲ Ų
Ø´ØŽØĩ ÚŠŲÛ.
+
+با Ų
Ø´ØŽØĩ ÚŠØąØ¯Ų ŲŲØš Ų
ØĒØēÛØąŲØ§Ø ŲÛØąØ§ÛØ´Ú¯ØąŲا Ų Ø§Ø¨Ø˛Ø§ØąŲØ§ Ų
ÛâØĒŲŲŲ ŲžØ´ØĒÛØ¨Ø§ŲÛ Ø¨ŲØĒØąÛ Ø¨ŲØĒ Ø¨Ø¯Ų.
+
+اÛŲ ŲŲØˇ ÛŲ **ØĸŲ
ŲØ˛Ø´ ØŗØąÛØš / ÛØ§Ø¯ØĸŲØąÛ** Ø¯Øą Ų
بਝ ŲŲØšâŲŲ
Ø§ŲØ§Û ŲžØ§ÛØĒŲŲŲ. ŲŲØˇ ØØ¯Ø§ŲŲ ÚÛØ˛Ø§ÛÛ ÚŠŲ Ø¨ØąØ§Û Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛Ø´ŲŲ Ø¨Ø§ **FastAPI** ŲØ§Ø˛Ų
Ų ØąŲ ŲžŲØ´Ø´ Ų
ÛâØ¯Ų... ÚŠŲ Ø¯Øą ŲØ§ŲØš ØŽÛŲÛ ÚŠŲ
Ų.
+
+**FastAPI** ڊاŲ
ŲØ§Ų Ø¨Øą ŲžØ§ÛŲ Ø§ÛŲ ŲŲØšâŲŲ
Ø§ŲØ§ØŗØĒ Ų Ø§ÛŲ Ø¨ŲØ´ ÚŠŲÛ Ų
Ø˛ÛØĒ Ų ŲØ§ÛØ¯Ų Ų
ÛâØ¯Ų.
+
+ŲŲÛ ØØĒÛ Ø§Ú¯Ų ŲÛÚâŲŲØĒ Ø§Ø˛ **FastAPI** Ø§ØŗØĒŲØ§Ø¯Ų ŲÚŠŲÛØ Ø¨Ø§Ø˛Ų
ÛØ§Ø¯Ú¯ÛØąÛ ÛŲ ÚŠŲ
Ø¯Øą Ų
ŲØąØ¯Ø´ŲŲ Ø¨Ų ŲŲØšØĒŲ.
+
+/// note
+
+Ø§Ú¯Ų ØØąŲŲâØ§Û ŲžØ§ÛØĒŲŲÛ Ų ŲŲ
ŲâÚÛØ˛ ØąŲ Ø¯Øą Ų
بਝ ŲŲØšâŲŲ
Ø§ŲØ§ Ų
ÛâØ¯ŲŲÛØ Ø¨ØąŲ ØŗØąØ§Øē ŲØĩŲ Ø¨ØšØ¯Û.
+
+///
+
+## اŲÚ¯ÛØ˛Ų
+
+Ø¨ÛØ§Ûد با ÛŲ Ų
ØĢØ§Ų ØŗØ§Ø¯Ų Ø´ØąŲØš ÚŠŲÛŲ
:
+
+{* ../../docs_src/python_types/tutorial001.py *}
+
+ŲŲØĒÛ Ø§ÛŲ Ø¨ØąŲØ§Ų
Ų ØąŲ Ø§ØŦØąØ§ ÚŠŲÛØ ØŽØąŲØŦÛ Ø§ÛŲŲ:
+
+```
+John Doe
+```
+
+اÛŲ ØĒابؚ اÛŲ ÚŠØ§ØąØ§ ØąŲ Ų
ÛâÚŠŲŲ:
+
+* ÛŲ `first_name` Ų `last_name` Ų
ÛâÚ¯ÛØąŲ.
+* ØØąŲ اŲŲ ŲØą ڊدŲŲ
ØąŲ Ø¨Ø§ `title()` Ø¨Ø˛ØąÚ¯ Ų
ÛâÚŠŲŲ.
+* ØĒØąÚŠÛØ¨Ø´ŲŲ Ų
ÛâÚŠŲŲ Ø¨Ø§ ÛŲ ŲØ§ØĩŲŲ ŲØŗØˇØ´ŲŲ.
+
+{* ../../docs_src/python_types/tutorial001.py hl[2] *}
+
+### ŲÛØąØ§ÛØ´Ø´ ÚŠŲ
+
+اÛŲ ÛŲ Ø¨ØąŲØ§Ų
Ų ØŽÛŲÛ ØŗØ§Ø¯ŲâØŗØĒ.
+
+ŲŲÛ ØØ§Ųا ØĒØĩŲØą ÚŠŲ Ø¯Ø§ØąÛ Ø§Ø˛ ØĩŲØą Ų
ÛâŲŲÛØŗÛØ´.
+
+ÛŲ ØŦاÛÛ Ø´ØąŲØš ÚŠØąØ¯Û Ø¨Ų ØĒØšØąÛŲ ØĒØ§Ø¨ØšØ ŲžØ§ØąØ§Ų
ØĒØąŲØ§ØĒ ØĸŲ
ادŲâØŗØĒ...
+
+ŲŲÛ Ø¨ØšØ¯ Ø¨Ø§ÛØ¯ "اŲŲ Ų
ØĒØ¯Û ÚŠŲ ØØąŲ اŲŲ ØąŲ Ø¨Ø˛ØąÚ¯ Ų
ÛâÚŠŲŲ" ØąŲ Øĩدا ÚŠŲÛ.
+
+ØĸÛØ§ Ø§ØŗŲ
Ø´ `upper` Ø¨ŲØ¯Ø ÛØ§ `uppercase`Ø Ø´Ø§ÛØ¯ `first_uppercase`Ø ÛØ§ `capitalize`Ø
+
+Ø¨ØšØ¯Ø Ø¨Ø§ Ø¯ŲØŗØĒ ŲØ¯ÛŲ
Û Ø¨ØąŲØ§Ų
ŲâŲŲÛØŗØ§Ø ØĒÚŠŲ
ÛŲ ØŽŲØ¯ÚŠØ§Øą ŲÛØąØ§ÛØ´Ú¯ØąØ اŲ
ØĒØØ§Ų Ų
ÛâÚŠŲÛ.
+
+ŲžØ§ØąØ§Ų
ØĒØą اŲŲ ØĒØ§Ø¨ØšØ `first_name` ØąŲ ØĒاÛŲž Ų
ÛâÚŠŲÛØ بؚد ÛŲ ŲŲØˇŲ (`.`) Ų
ÛâØ°Ø§ØąÛ Ų `Ctrl+Space` ØąŲ Ų
ÛâØ˛ŲÛ ØĒا ØĒÚŠŲ
ÛŲ ØŽŲØ¯ÚŠØ§Øą Ø¨ÛØ§Ø¯.
+
+ŲŲÛ Ų
ØĒØŖØŗŲØ§ŲŲØ ÚÛØ˛ Ų
ŲÛØ¯Û ŲŲ
ÛâÚ¯ÛØąÛ:
+
+
+
+### Ųب𠨧ØļاŲŲ ÚŠŲ
+
+Ø¨ÛØ§ ŲŲØˇ ÛŲ ØŽØˇ Ø§Ø˛ ŲØŗØŽŲ ŲØ¨ŲÛ ØąŲ ØĒØēÛÛØą Ø¨Ø¯ÛŲ
.
+
+دŲÛŲØ§Ų اÛŲ Ø¨ØŽØ´Ø ŲžØ§ØąØ§Ų
ØĒØąŲØ§Û ØĒابؚ ØąŲØ Ø§Ø˛:
+
+```Python
+ first_name, last_name
+```
+
+بŲ:
+
+```Python
+ first_name: str, last_name: str
+```
+
+ØšŲØļ Ų
ÛâÚŠŲÛŲ
.
+
+ŲŲ
ÛŲŲ.
+
+اÛŲØ§ ŲŲ
ŲŲ "ŲŲØšâŲŲ
Ø§ŲØ§" ŲØŗØĒŲ:
+
+{* ../../docs_src/python_types/tutorial002.py hl[1] *}
+
+اÛŲ Ø¨Ø§ ØĒØšØąÛŲ Ų
ŲØ¯Ø§Øą ŲžÛØ´âŲØąØļ ŲØąŲ Ø¯Ø§ØąŲØ Ų
ØĢŲ:
+
+```Python
+ first_name="john", last_name="doe"
+```
+
+ÛŲ ÚÛØ˛ Ų
ØĒŲØ§ŲØĒŲ.
+
+Ų
ا Ø§Ø˛ دŲŲŲØˇŲ (`:`) Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲÛŲ
Ø ŲŲ ØšŲØ§Ų
ØĒ Ų
ØŗØ§ŲÛ (`=`)â.
+
+Ų Ø§ØļاŲŲ ÚŠØąØ¯Ų ŲŲØšâŲŲ
Ø§ŲØ§ Ų
ØšŲ
ŲŲØ§Ų ÚÛØ˛Û ÚŠŲ Ø§ØĒŲØ§Ų Ų
ÛâØ§ŲØĒŲ ØąŲ Ø§Ø˛ ÚÛØ˛Û ÚŠŲ Ø¨Ø¯ŲŲ Ø§ŲŲØ§ Ų
ÛâØ§ŲØĒØ§Ø¯ ØĒØēÛÛØą ŲŲ
ÛâØ¯Ų.
+
+ŲŲÛ ØØ§ŲØ§Ø Ø¯ŲØ¨Ø§ØąŲ ØĒØĩŲØą ÚŠŲ ŲØŗØˇ ØŗØ§ØŽØĒŲ Ø§ŲŲ ØĒابؚ ŲØŗØĒÛØ ŲŲÛ Ø§ÛŲ Ø¨Ø§Øą با ŲŲØšâŲŲ
Ø§ŲØ§.
+
+ØĒŲÛ ŲŲ
ŲŲ ŲŲØˇŲØ ØŗØšÛ Ų
ÛâÚŠŲÛ ØĒÚŠŲ
ÛŲ ØŽŲØ¯ÚŠØ§Øą ØąŲ Ø¨Ø§ `Ctrl+Space` ŲØšØ§Ų ÚŠŲÛ Ų Ø§ÛŲŲ Ų
ÛâØ¨ÛŲÛ:
+
+
+
+با اÛŲØ Ų
ÛâØĒŲŲÛ Ø§ØŗÚŠØąŲŲ ÚŠŲÛØ Ú¯Ø˛ÛŲŲâŲØ§ ØąŲ Ø¨Ø¨ÛŲÛØ ØĒا ŲŲØĒÛ ÚŠŲ Ø§ŲŲ ÚÛØ˛Û ÚŠŲ "Ø¨Ų ŲØ¸ØąØĒ ØĸØ´ŲØ§ Ų
ÛØ§Ø¯" ØąŲ ŲžÛØ¯Ø§ ÚŠŲÛ:
+
+
+
+## اŲÚ¯ÛØ˛Ų Ø¨ÛØ´ØĒØą
+
+اÛŲ ØĒابؚ ØąŲ ÚÚŠ ÚŠŲØ Ø§ŲØ§Ų ŲŲØšâŲŲ
ا Ø¯Ø§ØąŲ:
+
+{* ../../docs_src/python_types/tutorial003.py hl[1] *}
+
+ÚŲŲ ŲÛØąØ§ÛØ´Ú¯Øą ŲŲØš Ų
ØĒØēÛØąŲا ØąŲ Ų
ÛâØ¯ŲŲŲØ ŲŲØˇ ØĒÚŠŲ
ÛŲ ØŽŲØ¯ÚŠØ§Øą ŲŲ
ÛâÚ¯ÛØąÛØ Ø¨ŲÚŠŲ ÚÚŠ ØŽØˇØ§ŲØ§ ŲŲ
Ø¯Ø§ØąÛ:
+
+
+
+ØØ§Ųا Ų
ÛâØ¯ŲŲÛ ÚŠŲ Ø¨Ø§ÛØ¯ Ø¯ØąØŗØĒØ´ ÚŠŲÛØ `age` ØąŲ Ø¨Ø§ `str(age)` Ø¨Ų ÛŲ ØąØ´ØĒŲ ØĒبدÛŲ ÚŠŲÛ:
+
+{* ../../docs_src/python_types/tutorial004.py hl[2] *}
+
+## ØĒØšØąÛŲ ŲŲØšâŲØ§
+
+ØĒØ§Ø˛Ų Ø§ØĩŲÛâØĒØąÛŲ ØŦا Ø¨ØąØ§Û ØĒØšØąÛŲ ŲŲØšâŲŲ
Ø§ŲØ§ ØąŲ Ø¯ÛØ¯Û. بŲâØšŲŲØ§Ų ŲžØ§ØąØ§Ų
ØĒØąŲØ§Û ØĒابؚ.
+
+اÛŲ ŲŲ
اØĩŲÛâØĒØąÛŲ ØŦاÛÛŲ ÚŠŲ Ø¨Ø§ **FastAPI** Ø§Ø˛Ø´ŲŲ Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲÛ.
+
+### ŲŲØšâŲØ§Û ØŗØ§Ø¯Ų
+
+Ų
ÛâØĒŲŲÛ ŲŲ
Ų ŲŲØšâŲØ§Û Ø§ØŗØĒØ§ŲØ¯Ø§ØąØ¯ ŲžØ§ÛØĒŲŲ ØąŲ ØĒØšØąÛŲ ÚŠŲÛØ ŲŲ ŲŲØˇ `str`.
+
+Ų
ØĢŲØ§Ų Ų
ÛâØĒŲŲÛ Ø§Ø˛ اÛŲØ§ Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ:
+
+* `int`
+* `float`
+* `bool`
+* `bytes`
+
+{* ../../docs_src/python_types/tutorial005.py hl[1] *}
+
+### ŲŲØšâŲØ§Û ØšŲ
ŲŲ
Û Ø¨Ø§ ŲžØ§ØąØ§Ų
ØĒØąŲØ§Û ŲŲØš
+
+ÛŲ ØŗØąÛ ØŗØ§ØŽØĒØ§Øą Ø¯Ø§Ø¯Ų ŲØŗØĒŲ ÚŠŲ Ų
ÛâØĒŲŲŲ Ų
ŲØ¯Ø§ØąŲØ§Û Ø¯ÛÚ¯Ų ØąŲ ŲÚ¯Ų Ø¯Ø§ØąŲØ Ų
ØĢŲ `dict`Ø `list`Ø `set` Ų `tuple`. Ų Ų
ŲØ¯Ø§ØąŲØ§Û Ø¯Ø§ØŽŲÛØ´ŲŲ ŲŲ
Ų
ÛâØĒŲŲŲ ŲŲØš ØŽŲØ¯Ø´ŲŲ ØąŲ Ø¯Ø§Ø´ØĒŲ Ø¨Ø§Ø´Ų.
+
+Ø¨Ų Ø§ÛŲ ŲŲØšâŲØ§ ÚŠŲ ŲŲØšâŲØ§Û دا؎ŲÛ Ø¯Ø§ØąŲ Ų
ÛâÚ¯Ų "**ØšŲ
ŲŲ
Û**" ÛØ§ "generic". Ų Ų
ÛâØ´Ų Ø§ŲŲØ§ ØąŲ ØĒØšØąÛŲ ÚŠØąØ¯Ø ØØĒÛ Ø¨Ø§ ŲŲØšâŲØ§Û دا؎ŲÛØ´ŲŲ.
+
+Ø¨ØąØ§Û ØĒØšØąÛŲ Ø§ÛŲ ŲŲØšâŲØ§ Ų ŲŲØšâŲØ§Û دا؎ŲÛØ´ŲŲØ Ų
ÛâØĒŲŲÛ Ø§Ø˛ Ų
اÚŲŲ Ø§ØŗØĒØ§ŲØ¯Ø§ØąØ¯ ŲžØ§ÛØĒŲŲ `typing` Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ. اÛŲ Ų
اÚŲŲ Ų
ØŽØĩŲØĩ ŲžØ´ØĒÛØ¨Ø§ŲÛ Ø§Ø˛ ŲŲØšâŲŲ
Ø§ŲØ§ØŗØĒ.
+
+#### ŲØŗØŽŲâŲØ§Û ØŦØ¯ÛØ¯ØĒØą ŲžØ§ÛØĒŲŲ
+
+ØŗÛŲØĒÚŠØŗ با Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ `typing` با ŲŲ
Ų ŲØŗØŽŲâŲØ§Ø Ø§Ø˛ ŲžØ§ÛØĒŲŲ 3.6 ØĒا ØŦØ¯ÛØ¯ØĒØąÛŲâŲØ§Ø Ø§Ø˛ ØŦŲ
ŲŲ ŲžØ§ÛØĒŲŲ 3.9Ø 3.10 Ų ØēÛØąŲ **ØŗØ§Ø˛Ú¯Ø§ØąŲ**.
+
+با ŲžÛØ´ØąŲØĒ ŲžØ§ÛØĒŲŲØ **ŲØŗØŽŲâŲØ§Û ØŦØ¯ÛØ¯ØĒØą** ŲžØ´ØĒÛØ¨Ø§ŲÛ Ø¨ŲØĒØąÛ Ø¨ØąØ§Û Ø§ÛŲ ŲŲØšâŲŲ
Ø§ŲØ§ Ø¯Ø§ØąŲ Ų ØĒŲÛ ØŽÛŲÛ Ų
ŲØ§ØąØ¯ ØØĒÛ ŲØ§Ø˛Ų
ŲÛØŗØĒ Ų
اÚŲŲ `typing` ØąŲ ŲØ§ØąØ¯ ÚŠŲÛ Ų Ø§Ø˛Ø´ Ø¨ØąØ§Û ØĒØšØąÛŲ ŲŲØšâŲŲ
Ø§ŲØ§ Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ.
+
+Ø§Ú¯Ų Ø¨ØĒŲŲÛ Ø¨ØąØ§Û ŲžØąŲÚŲâØ§ØĒ Ø§Ø˛ ÛŲ ŲØŗØŽŲ ØŦØ¯ÛØ¯ØĒØą ŲžØ§ÛØĒŲŲ Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛØ Ų
ÛâØĒŲŲÛ Ø§Ø˛ اÛŲ ØŗØ§Ø¯Ú¯Û Ø§ØļاŲŲ Ø¨ŲØąŲ Ø¨Ø¨ØąÛ.
+
+ØĒŲÛ ŲŲ
Ų Ų
ØŗØĒŲØ¯Ø§ØĒØ Ų
ØĢاŲâŲØ§ÛÛ ŲØŗØĒŲ ÚŠŲ Ø¨Ø§ ŲØą ŲØŗØŽŲ ŲžØ§ÛØĒŲŲ ØŗØ§Ø˛Ú¯Ø§ØąŲ (ŲŲØĒÛ ØĒŲØ§ŲØĒÛ ŲØŗØĒ).
+
+Ų
ØĢŲØ§Ų "**Python 3.6+**" ÛØšŲÛ Ø¨Ø§ ŲžØ§ÛØĒŲŲ 3.6 ÛØ§ Ø¨Ø§ŲØ§ØĒØą (Ų
ØĢŲ 3.7Ø 3.8Ø 3.9Ø 3.10 Ų ØēÛØąŲ) ØŗØ§Ø˛Ú¯Ø§ØąŲ. Ų "**Python 3.9+**" ÛØšŲÛ Ø¨Ø§ ŲžØ§ÛØĒŲŲ 3.9 ÛØ§ Ø¨Ø§ŲØ§ØĒØą (Ų
ØĢŲ 3.10 Ų ØēÛØąŲ) ØŗØ§Ø˛Ú¯Ø§ØąŲ.
+
+Ø§Ú¯Ų Ø¨ØĒŲŲÛ Ø§Ø˛ **ØŦØ¯ÛØ¯ØĒØąÛŲ ŲØŗØŽŲâŲØ§Û ŲžØ§ÛØĒŲŲ** Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛØ Ø§Ø˛ Ų
ØĢاŲâŲØ§Û ŲØŗØŽŲ ØĸØŽØą Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲØ ÚŲŲ Ø§ŲŲØ§ **Ø¨ŲØĒØąÛŲ Ų ØŗØ§Ø¯ŲâØĒØąÛŲ ØŗÛŲØĒÚŠØŗ** ØąŲ Ø¯Ø§ØąŲØ Ų
ØĢŲØ§Ų "**Python 3.10+**".
+
+#### ŲÛØŗØĒ
+
+Ų
ØĢŲØ§ŲØ Ø¨ÛØ§ÛŲ
ÛŲ Ų
ØĒØēÛØą ØĒØšØąÛŲ ÚŠŲÛŲ
ÚŠŲ ÛŲ `list` Ø§Ø˛ `str` باشŲ.
+
+//// tab | Python 3.9+
+
+Ų
ØĒØēÛØą ØąŲ با ŲŲ
ŲŲ ØŗÛŲØĒÚŠØŗ دŲŲŲØˇŲ (`:`) ØĒØšØąÛŲ ÚŠŲ.
+
+بŲâØšŲŲØ§Ų ŲŲØšØ `list` ØąŲ Ø¨Ø°Ø§Øą.
+
+ÚŲŲ ŲÛØŗØĒ ÛŲ ŲŲØšŲ ÚŠŲ ŲŲØšâŲØ§Û دا؎ŲÛ Ø¯Ø§ØąŲØ اŲŲØ§ ØąŲ ØĒŲÛ ÚŠØąŲØ´ŲâŲØ§ Ų
ÛâØ°Ø§ØąÛ:
+
+```Python hl_lines="1"
+{!> ../../docs_src/python_types/tutorial006_py39.py!}
+```
+
+////
+
+//// tab | Python 3.8+
+
+Ø§Ø˛ `typing`Ø `List` ØąŲ (با `L` Ø¨Ø˛ØąÚ¯) ŲØ§ØąØ¯ ÚŠŲ:
+
+```Python hl_lines="1"
+{!> ../../docs_src/python_types/tutorial006.py!}
+```
+
+Ų
ØĒØēÛØą ØąŲ با ŲŲ
ŲŲ ØŗÛŲØĒÚŠØŗ دŲŲŲØˇŲ (`:`) ØĒØšØąÛŲ ÚŠŲ.
+
+بŲâØšŲŲØ§Ų ŲŲØšØ `List` ØąŲ ÚŠŲ Ø§Ø˛ `typing` ŲØ§ØąØ¯ ÚŠØąØ¯Û Ø¨Ø°Ø§Øą.
+
+ÚŲŲ ŲÛØŗØĒ ÛŲ ŲŲØšŲ ÚŠŲ ŲŲØšâŲØ§Û دا؎ŲÛ Ø¯Ø§ØąŲØ اŲŲØ§ ØąŲ ØĒŲÛ ÚŠØąŲØ´ŲâŲØ§ Ų
ÛâØ°Ø§ØąÛ:
+
+```Python hl_lines="4"
+{!> ../../docs_src/python_types/tutorial006.py!}
+```
+
+////
+
+/// info
+
+اŲŲ ŲŲØšâŲØ§Û دا؎ŲÛ ØĒŲÛ ÚŠØąŲØ´ŲâŲØ§ Ø¨ŲØ´ŲŲ "ŲžØ§ØąØ§Ų
ØĒØąŲØ§Û ŲŲØš" Ų
ÛâÚ¯Ų.
+
+ØĒŲÛ Ø§ÛŲ Ų
ŲØąØ¯Ø `str` ŲžØ§ØąØ§Ų
ØĒØą ŲŲØšÛŲ ÚŠŲ Ø¨Ų `List` (ÛØ§ `list` ØĒŲÛ ŲžØ§ÛØĒŲŲ 3.9 Ų Ø¨Ø§ŲØ§ØĒØą) ŲžØ§Øŗ Ø¯Ø§Ø¯Ų Ø´Ø¯Ų.
+
+///
+
+ÛØšŲÛ: "Ų
ØĒØēÛØą `items` ÛŲ `list` ŲØŗØĒØ Ų ŲØą ڊدŲŲ
Ø§Ø˛ ØĸÛØĒŲ
âŲØ§Û اÛŲ ŲÛØŗØĒ ÛŲ `str` ŲØŗØĒŲ".
+
+/// tip
+
+Ø§Ú¯Ų Ø§Ø˛ ŲžØ§ÛØĒŲŲ 3.9 ÛØ§ Ø¨Ø§ŲØ§ØĒØą Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲÛØ ŲØ§Ø˛Ų
ŲÛØŗØĒ `List` ØąŲ Ø§Ø˛ `typing` ŲØ§ØąØ¯ ÚŠŲÛØ Ų
ÛâØĒŲŲÛ ŲŲ
ŲŲ ŲŲØš Ų
ØšŲ
ŲŲÛ `list` ØąŲ Ø¨Ų ØŦاش Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ.
+
+///
+
+با اÛŲ ÚŠØ§ØąØ ŲÛØąØ§ÛØ´Ú¯ØąØĒ ØØĒÛ ŲŲØĒÛ Ø¯Ø§ØąÛ ØĸÛØĒŲ
âŲØ§Û ŲÛØŗØĒ ØąŲ ŲžØąØ¯Ø§Ø˛Ø´ Ų
ÛâÚŠŲÛ Ø¨ŲØĒ ÚŠŲ
ÚŠ Ų
ÛâÚŠŲŲ:
+
+
+
+بدŲŲ ŲŲØšâŲØ§Ø ØąØŗÛØ¯Ų Ø¨Ų Ø§ÛŲ ØĒŲØąÛØ¨Ø§Ų ØēÛØąŲ
Ų
ÚŠŲŲ.
+
+ØĒŲØŦŲ ÚŠŲ ÚŠŲ Ų
ØĒØēÛØą `item` ÛÚŠÛ Ø§Ø˛ ØšŲØ§ØĩØą ØĒŲÛ ŲÛØŗØĒ `items` ŲØŗØĒ.
+
+Ų Ø¨Ø§ اÛŲ ØØ§ŲØ ŲÛØąØ§ÛØ´Ú¯Øą Ų
ÛâØ¯ŲŲŲ ÚŠŲ ÛŲ `str` ŲØŗØĒ Ų Ø¨ØąØ§Ø´ ŲžØ´ØĒÛØ¨Ø§ŲÛ Ų
ÛâØ¯Ų.
+
+#### ØĒØ§ŲžŲ Ų ØŗØĒ
+
+Ø¨ØąØ§Û ØĒØšØąÛŲ `tuple`ŲØ§ Ų `set`ŲØ§ ŲŲ
ŲŲ
ÛŲ ÚŠØ§Øą ØąŲ Ų
ÛâÚŠŲÛ:
+
+//// tab | Python 3.9+
+
+```Python hl_lines="1"
+{!> ../../docs_src/python_types/tutorial007_py39.py!}
+```
+
+////
+
+//// tab | Python 3.8+
+
+```Python hl_lines="1 4"
+{!> ../../docs_src/python_types/tutorial007.py!}
+```
+
+////
+
+ÛØšŲÛ:
+
+* Ų
ØĒØēÛØą `items_t` ÛŲ `tuple` با 3 ØĒا ØĸÛØĒŲ
ŲØ ÛŲ `int`Ø ÛŲ `int` دÛÚ¯ŲØ Ų ÛŲ `str`.
+* Ų
ØĒØēÛØą `items_s` ÛŲ `set` ŲØŗØĒØ Ų ŲØą ڊدŲŲ
Ø§Ø˛ ØĸÛØĒŲ
âŲØ§Ø´ Ø§Ø˛ ŲŲØš `bytes` ŲØŗØĒŲ.
+
+#### دÛÚŠØ´ŲØąÛ
+
+Ø¨ØąØ§Û ØĒØšØąÛŲ ÛŲ `dict`Ø 2 ØĒا ŲžØ§ØąØ§Ų
ØĒØą ŲŲØš Ų
ÛâØ¯ÛØ ÚŠŲ Ø¨Ø§ ڊاŲ
ا Ø§Ø˛ ŲŲ
ØŦدا شدŲ.
+
+ŲžØ§ØąØ§Ų
ØĒØą Ųب𠨧ŲŲ Ø¨ØąØ§Û ÚŠŲÛØ¯ŲØ§Û `dict` ŲØŗØĒ.
+
+ŲžØ§ØąØ§Ų
ØĒØą Ųب𠨝ŲŲ
Ø¨ØąØ§Û Ų
ŲØ¯Ø§ØąŲØ§Û `dict` ŲØŗØĒ:
+
+//// tab | Python 3.9+
+
+```Python hl_lines="1"
+{!> ../../docs_src/python_types/tutorial008_py39.py!}
+```
+
+////
+
+//// tab | Python 3.8+
+
+```Python hl_lines="1 4"
+{!> ../../docs_src/python_types/tutorial008.py!}
+```
+
+////
+
+ÛØšŲÛ:
+
+* Ų
ØĒØēÛØą `prices` ÛŲ `dict` ŲØŗØĒ:
+ * ÚŠŲÛØ¯ŲØ§Û Ø§ÛŲ `dict` Ø§Ø˛ ŲŲØš `str` ŲØŗØĒŲ (Ų
ØĢŲØ§Ų Ø§ØŗŲ
ŲØą ØĸÛØĒŲ
).
+ * Ų
ŲØ¯Ø§ØąŲØ§Û Ø§ÛŲ `dict` Ø§Ø˛ ŲŲØš `float` ŲØŗØĒŲ (Ų
ØĢŲØ§Ų ŲÛŲ
ØĒ ŲØą ØĸÛØĒŲ
).
+
+#### اØĒØØ§Ø¯ÛŲ
+
+Ų
ÛâØĒŲŲÛ ØĒØšØąÛŲ ÚŠŲÛ ÚŠŲ ÛŲ Ų
ØĒØēÛØą Ų
ÛâØĒŲŲŲ ŲØą ڊدŲŲ
Ø§Ø˛ **ÚŲØ¯ ØĒا ŲŲØš** Ø¨Ø§Ø´ŲØ Ų
ØĢŲØ§Ų ÛŲ `int` ÛØ§ ÛŲ `str`.
+
+ØĒŲÛ ŲžØ§ÛØĒŲŲ 3.6 Ų Ø¨Ø§ŲØ§ØĒØą (Ø§Ø˛ ØŦŲ
ŲŲ ŲžØ§ÛØĒŲŲ 3.10) Ų
ÛâØĒŲŲÛ Ø§Ø˛ ŲŲØš `Union` ØĒŲÛ `typing` Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ Ų ŲŲØšâŲØ§Û Ų
Ų
ÚŠŲ ØąŲ ØĒŲÛ ÚŠØąŲØ´ŲâŲØ§ Ø¨Ø°Ø§ØąÛ.
+
+ØĒŲÛ ŲžØ§ÛØĒŲŲ 3.10 ÛŲ **ØŗÛŲØĒÚŠØŗ ØŦØ¯ÛØ¯** ŲŲ
ŲØŗØĒ ÚŠŲ Ų
ÛâØĒŲŲÛ ŲŲØšâŲØ§Û Ų
Ų
ÚŠŲ ØąŲ Ø¨Ø§ ÛŲ ØŽØˇ ØšŲ
ŲØ¯Û (`|`) ØŦدا ÚŠŲÛ.
+
+//// tab | Python 3.10+
+
+```Python hl_lines="1"
+{!> ../../docs_src/python_types/tutorial008b_py310.py!}
+```
+
+////
+
+//// tab | Python 3.8+
+
+```Python hl_lines="1 4"
+{!> ../../docs_src/python_types/tutorial008b.py!}
+```
+
+////
+
+ØĒŲÛ ŲØą Ø¯Ų ØØ§ŲØĒ ÛØšŲÛ `item` Ų
ÛâØĒŲŲŲ ÛŲ `int` ÛØ§ ÛŲ `str` باشŲ.
+
+#### Ø´Ø§ÛØ¯ `None`
+
+Ų
ÛâØĒŲŲÛ ØĒØšØąÛŲ ÚŠŲÛ ÚŠŲ ÛŲ Ų
ŲØ¯Ø§Øą Ų
ÛâØĒŲŲŲ ÛŲ ŲŲØš Ø¨Ø§Ø´ŲØ Ų
ØĢŲØ§Ų `str`Ø ŲŲÛ Ų
ÛâØĒŲŲŲ `None` ŲŲ
باشŲ.
+
+ØĒŲÛ ŲžØ§ÛØĒŲŲ 3.6 Ų Ø¨Ø§ŲØ§ØĒØą (Ø§Ø˛ ØŦŲ
ŲŲ ŲžØ§ÛØĒŲŲ 3.10) Ų
ÛâØĒŲŲÛ Ø¨Ø§ ŲØ§ØąØ¯ ÚŠØąØ¯Ų Ų Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ `Optional` Ø§Ø˛ Ų
اÚŲŲ `typing` اÛŲŲ ØĒØšØąÛŲ ÚŠŲÛ.
+
+```Python hl_lines="1 4"
+{!../../docs_src/python_types/tutorial009.py!}
+```
+
+Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ `Optional[str]` Ø¨Ų ØŦØ§Û ŲŲØˇ `str` Ø¨Ų ŲÛØąØ§ÛØ´Ú¯Øą ÚŠŲ
ÚŠ Ų
ÛâÚŠŲŲ ØŽØˇØ§ŲØ§ÛÛ ÚŠŲ Ų
Ų
ÚŠŲŲ ŲÚŠØą ÚŠŲÛ ÛŲ Ų
ŲØ¯Ø§Øą ŲŲ
ÛØ´Ų `str` ŲØŗØĒ ØąŲ ŲžÛØ¯Ø§ ÚŠŲŲØ Ø¯Øą ØØ§ŲÛ ÚŠŲ Ų
ÛâØĒŲŲŲ `None` ŲŲ
باشŲ.
+
+`Optional[Something]` Ø¯Øą ŲØ§ŲØš Ų
ÛØ§ŲâØ¨Øą Ø¨ØąØ§Û `Union[Something, None]` ŲØŗØĒØ Ø§ÛŲ Ø¯Ų ØĒا Ų
ؚادŲŲ.
+
+ÛØšŲÛ ØĒŲÛ ŲžØ§ÛØĒŲŲ 3.10Ø Ų
ÛâØĒŲŲÛ Ø§Ø˛ `Something | None` Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ:
+
+//// tab | Python 3.10+
+
+```Python hl_lines="1"
+{!> ../../docs_src/python_types/tutorial009_py310.py!}
+```
+
+////
+
+//// tab | Python 3.8+
+
+```Python hl_lines="1 4"
+{!> ../../docs_src/python_types/tutorial009.py!}
+```
+
+////
+
+//// tab | Python 3.8+ ØŦاÛÚ¯Ø˛ÛŲ
+
+```Python hl_lines="1 4"
+{!> ../../docs_src/python_types/tutorial009b.py!}
+```
+
+////
+
+#### Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ `Union` ÛØ§ `Optional`
+
+Ø§Ú¯Ų Ø§Ø˛ ŲØŗØŽŲ ŲžØ§ÛØĒŲŲ Ø˛ÛØą 3.10 Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲÛØ ÛŲ ŲÚŠØĒŲ Ø§Ø˛ Ø¯ÛØ¯ ØŽÛŲÛ **Ø´ØŽØĩÛ** ØŽŲØ¯Ų
:
+
+* đ¨ Ø§Ø˛ `Optional[SomeType]` Ø§ØŗØĒŲØ§Ø¯Ų ŲÚŠŲ
+* Ø¨Ų ØŦاش ⨠**Ø§Ø˛ `Union[SomeType, None]` Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲ** â¨.
+
+ŲØą Ø¯Ų Ų
ؚادŲŲ Ų Ø˛ÛØą ŲžŲØŗØĒŲ ÛÚŠÛâØ§ŲØ ŲŲÛ Ų
Ų `Union` ØąŲ Ø¨Ų `Optional` ØĒØąØŦÛØ Ų
ÛâØ¯Ų
ÚŲŲ ÚŠŲŲ
Ų "**ا؎ØĒÛØ§ØąÛ**" اŲÚ¯Ø§Øąæį¤ē Ų
ÛâÚŠŲŲ ÚŠŲ Ų
ŲØ¯Ø§Øą ا؎ØĒÛØ§ØąÛŲØ Ø¯Øą ØØ§ŲÛ ÚŠŲ Ø¯Øą ŲØ§ŲØš ÛØšŲÛ "Ų
ÛâØĒŲŲŲ `None` باشŲ"Ø ØØĒÛ Ø§Ú¯Ų Ø§ØŽØĒÛØ§ØąÛ ŲØ¨Ø§Ø´Ų Ų ŲŲŲØ˛ ŲØ§Ø˛Ų
باشŲ.
+
+ŲÚŠØą Ų
ÛâÚŠŲŲ
`Union[SomeType, None]` ŲØ§ØļØâØĒØą ŲØ´ŲŲ Ų
ÛâØ¯Ų ÚÛ Ų
ØšŲÛ Ų
ÛâØ¯Ų.
+
+ŲŲØˇ Ø¨ØØĢ ÚŠŲŲ
اØĒ Ų Ø§ØŗŲ
âŲØ§ØŗØĒ. ŲŲÛ Ø§ÛŲ ÚŠŲŲ
اØĒ Ų
ÛâØĒŲŲŲ ØąŲ ØˇØąØ˛ ŲÚŠØą ØĒŲ Ų ØĒÛŲ
ØĒ ŲØŗØ¨ØĒ Ø¨Ų ÚŠØ¯ ØĒØŖØĢÛØą Ø¨Ø°Ø§ØąŲ.
+
+بŲâØšŲŲØ§Ų Ų
ØĢØ§ŲØ اÛŲ ØĒابؚ ØąŲ Ø¨Ø¨ÛŲ:
+
+{* ../../docs_src/python_types/tutorial009c.py hl[1,4] *}
+
+ŲžØ§ØąØ§Ų
ØĒØą `name` بŲâØšŲŲØ§Ų `Optional[str]` ØĒØšØąÛŲ Ø´Ø¯ŲØ ŲŲÛ **ا؎ØĒÛØ§ØąÛ ŲÛØŗØĒ**Ø ŲŲ
ÛâØĒŲŲÛ ØĒابؚ ØąŲ Ø¨Ø¯ŲŲ ŲžØ§ØąØ§Ų
ØĒØą Øĩدا ÚŠŲÛ:
+
+```Python
+say_hi() # اŲŲ ŲŲØ اÛŲ ØŽØˇØ§ Ų
ÛâØ¯Ų! đą
+```
+
+ŲžØ§ØąØ§Ų
ØĒØą `name` **ŲŲŲØ˛ ŲØ§Ø˛Ų
Ų** (ŲŲ *ا؎ØĒÛØ§ØąÛ*) ÚŲŲ Ų
ŲØ¯Ø§Øą ŲžÛØ´âŲØąØļ ŲØ¯Ø§ØąŲ. با اÛŲ ØØ§ŲØ `name` Ų
ŲØ¯Ø§Øą `None` ØąŲ ŲØ¨ŲŲ Ų
ÛâÚŠŲŲ:
+
+```Python
+say_hi(name=None) # اÛŲ ÚŠØ§Øą Ų
ÛâÚŠŲŲØ None Ų
ØšØĒØ¨ØąŲ đ
+```
+
+ØŽØ¨Øą ØŽŲØ¨ اÛŲŲ ÚŠŲ ŲŲØĒÛ ØąŲ ŲžØ§ÛØĒŲŲ 3.10 Ø¨Ø§Ø´ÛØ ŲØ§Ø˛Ų
ŲÛØŗØĒ ŲÚ¯ØąØ§Ų Ø§ÛŲ Ø¨Ø§Ø´ÛØ ÚŲŲ Ų
ÛâØĒŲŲÛ Ø¨ŲâØŗØ§Ø¯Ú¯Û Ø§Ø˛ `|` Ø¨ØąØ§Û ØĒØšØąÛŲ Ø§ØĒØØ§Ø¯ÛŲ ŲŲØšâŲØ§ Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ:
+
+{* ../../docs_src/python_types/tutorial009c_py310.py hl[1,4] *}
+
+اŲŲ Ų
Ųب𠨝ÛÚ¯Ų ŲØ§Ø˛Ų
ŲÛØŗØĒ ŲÚ¯ØąØ§Ų Ø§ØŗŲ
âŲØ§ÛÛ Ų
ØĢŲ `Optional` Ų `Union` باشÛ. đ
+
+#### ŲŲØšâŲØ§Û ØšŲ
ŲŲ
Û
+
+اÛŲ ŲŲØšâŲØ§ÛÛ ÚŠŲ ŲžØ§ØąØ§Ų
ØĒØąŲØ§Û ŲŲØš ØąŲ ØĒŲÛ ÚŠØąŲØ´ŲâŲØ§ Ų
ÛâÚ¯ÛØąŲ Ø¨ŲØ´ŲŲ **ŲŲØšâŲØ§Û ØšŲ
ŲŲ
Û** ÛØ§ **Generics** Ų
ÛâÚ¯ŲØ Ų
ØĢŲØ§Ų:
+
+//// tab | Python 3.10+
+
+Ų
ÛâØĒŲŲÛ Ø§Ø˛ ŲŲ
ŲŲ ŲŲØšâŲØ§Û دا؎ŲÛ Ø¨ŲâØšŲŲØ§Ų ŲŲØšâŲØ§Û ØšŲ
ŲŲ
Û Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ (با ÚŠØąŲØ´ŲâŲØ§ Ų ŲŲØšâŲØ§ Ø¯Ø§ØŽŲØ´ŲŲ):
+
+* `list`
+* `tuple`
+* `set`
+* `dict`
+
+Ų ŲŲ
ŲŲâØˇŲØą ÚŠŲ ØĒŲÛ ŲžØ§ÛØĒŲŲ 3.8 Ø¨ŲØ¯Ø Ø§Ø˛ Ų
اÚŲŲ `typing`:
+
+* `Union`
+* `Optional` (ŲŲ
ŲŲâØˇŲØą ÚŠŲ ØĒŲÛ ŲžØ§ÛØĒŲŲ 3.8 Ø¨ŲØ¯)
+* ...Ų Ø¨ŲÛŲ.
+
+ØĒŲÛ ŲžØ§ÛØĒŲŲ 3.10Ø Ø¨ŲâØšŲŲØ§Ų ØŦاÛÚ¯Ø˛ÛŲ Ø¨ØąØ§Û Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ ŲŲØšâŲØ§Û ØšŲ
ŲŲ
Û `Union` Ų `Optional`Ø Ų
ÛâØĒŲŲÛ Ø§Ø˛ ØŽØˇ ØšŲ
ŲØ¯Û (`|`) Ø¨ØąØ§Û ØĒØšØąÛŲ Ø§ØĒØØ§Ø¯ÛŲ ŲŲØšâŲØ§ Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛØ ÚŠŲ ØŽÛŲÛ Ø¨ŲØĒØą Ų ØŗØ§Ø¯ŲâØĒØąŲ.
+
+////
+
+//// tab | Python 3.9+
+
+Ų
ÛâØĒŲŲÛ Ø§Ø˛ ŲŲ
ŲŲ ŲŲØšâŲØ§Û دا؎ŲÛ Ø¨ŲâØšŲŲØ§Ų ŲŲØšâŲØ§Û ØšŲ
ŲŲ
Û Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ (با ÚŠØąŲØ´ŲâŲØ§ Ų ŲŲØšâŲØ§ Ø¯Ø§ØŽŲØ´ŲŲ):
+
+* `list`
+* `tuple`
+* `set`
+* `dict`
+
+Ų ŲŲ
ŲŲâØˇŲØą ÚŠŲ ØĒŲÛ ŲžØ§ÛØĒŲŲ 3.8 Ø¨ŲØ¯Ø Ø§Ø˛ Ų
اÚŲŲ `typing`:
+
+* `Union`
+* `Optional`
+* ...Ų Ø¨ŲÛŲ.
+
+////
+
+//// tab | Python 3.8+
+
+* `List`
+* `Tuple`
+* `Set`
+* `Dict`
+* `Union`
+* `Optional`
+* ...Ų Ø¨ŲÛŲ.
+
+////
+
+### ÚŠŲØ§ØŗâŲØ§ بŲâØšŲŲØ§Ų ŲŲØš
+
+Ų
ÛâØĒŲŲÛ ÛŲ ÚŠŲØ§Øŗ ØąŲ ŲŲ
بŲâØšŲŲØ§Ų ŲŲØš ÛŲ Ų
ØĒØēÛØą ØĒØšØąÛŲ ÚŠŲÛ.
+
+ŲØąØļ ÚŠŲ ÛŲ ÚŠŲØ§Øŗ `Person` Ø¯Ø§ØąÛØ با ÛŲ ŲØ§Ų
:
+
+{* ../../docs_src/python_types/tutorial010.py hl[1:3] *}
+
+بؚد Ų
ÛâØĒŲŲÛ ÛŲ Ų
ØĒØēÛØą ØąŲ Ø§Ø˛ ŲŲØš `Person` ØĒØšØąÛŲ ÚŠŲÛ:
+
+{* ../../docs_src/python_types/tutorial010.py hl[6] *}
+
+Ų Ø¨ØšØ¯Ø Ø¯ŲØ¨Ø§ØąŲØ ŲŲ
Ų ŲžØ´ØĒÛØ¨Ø§ŲÛ ŲÛØąØ§ÛØ´Ú¯Øą ØąŲ Ø¯Ø§ØąÛ:
+
+
+
+ØĒŲØŦŲ ÚŠŲ ÚŠŲ Ø§ÛŲ ÛØšŲÛ "`one_person` ÛŲ **ŲŲ
ŲŲŲ** Ø§Ø˛ ÚŠŲØ§Øŗ `Person` ŲØŗØĒ".
+
+ÛØšŲÛ "`one_person` ØŽŲØ¯ **ÚŠŲØ§Øŗ** Ø¨Ų Ø§ØŗŲ
`Person` ŲÛØŗØĒ".
+
+## Ų
دŲâŲØ§Û Pydantic
+
+Pydantic ÛŲ ÚŠØĒاب؎ŲŲŲ ŲžØ§ÛØĒŲŲŲ Ø¨ØąØ§Û Ø§ØšØĒØ¨Ø§ØąØŗŲØŦÛ Ø¯Ø§Ø¯ŲâŲØ§.
+
+"Ø´ÚŠŲ" دادŲâŲØ§ ØąŲ Ø¨ŲâØšŲŲØ§Ų ÚŠŲØ§ØŗâŲØ§ÛÛ Ø¨Ø§ ŲÛÚÚ¯ÛâŲØ§ ØĒØšØąÛŲ Ų
ÛâÚŠŲÛ.
+
+Ų ŲØą ŲÛÚÚ¯Û ÛŲ ŲŲØš Ø¯Ø§ØąŲ.
+
+بؚد ÛŲ ŲŲ
ŲŲŲ Ø§Ø˛ اŲŲ ÚŠŲØ§Øŗ ØąŲ Ø¨Ø§ ÛŲ ØŗØąÛ Ų
ŲØ¯Ø§Øą Ų
ÛâØŗØ§Ø˛Û Ų Ø§ŲŲ Ų
ŲØ¯Ø§ØąŲا ØąŲ Ø§ØšØĒØ¨Ø§ØąØŗŲØŦÛ Ų
ÛâÚŠŲŲØ Ø¨Ų ŲŲØš Ų
ŲØ§ØŗØ¨ ØĒبدÛŲØ´ŲŲ Ų
ÛâÚŠŲŲ (Ø§Ú¯Ų ŲØ§Ø˛Ų
باشŲ) Ų ÛŲ Ø´ÛØĄ با ŲŲ
Ų Ø¯Ø§Ø¯ŲâŲØ§ Ø¨ŲØĒ Ų
ÛâØ¯Ų.
+
+Ų Ø¨Ø§ اŲŲ Ø´ÛØĄ ŲŲØ§ÛÛ ŲŲ
Ų ŲžØ´ØĒÛØ¨Ø§ŲÛ ŲÛØąØ§ÛØ´Ú¯Øą ØąŲ Ų
ÛâÚ¯ÛØąÛ.
+
+ÛŲ Ų
ØĢØ§Ų Ø§Ø˛ Ų
ØŗØĒŲØ¯Ø§ØĒ ØąØŗŲ
Û Pydantic:
+
+//// tab | Python 3.10+
+
+```Python
+{!> ../../docs_src/python_types/tutorial011_py310.py!}
+```
+
+////
+
+//// tab | Python 3.9+
+
+```Python
+{!> ../../docs_src/python_types/tutorial011_py39.py!}
+```
+
+////
+
+//// tab | Python 3.8+
+
+```Python
+{!> ../../docs_src/python_types/tutorial011.py!}
+```
+
+////
+
+/// info
+
+Ø¨ØąØ§Û Ø§ØˇŲØ§ØšØ§ØĒ Ø¨ÛØ´ØĒØą Ø¯Øą Ų
بਝ PydanticØ Ų
ØŗØĒŲØ¯Ø§ØĒØ´ ØąŲ ÚÚŠ ÚŠŲ .
+
+///
+
+**FastAPI** ڊاŲ
ŲØ§Ų Ø¨Øą ŲžØ§ÛŲ Pydantic ŲØŗØĒ.
+
+ØĒŲÛ [ØĸŲ
ŲØ˛Ø´ - ØąØ§ŲŲŲ
Ø§Û ÚŠØ§ØąØ¨Øą](tutorial/index.md){.internal-link target=_blank} ØŽÛŲÛ Ø¨ÛØ´ØĒØą Ø§Ø˛ اÛŲØ§ ØąŲ ØĒŲÛ ØšŲ
Ų Ų
ÛâØ¨ÛŲÛ.
+
+/// tip
+
+Pydantic ÛŲ ØąŲØĒØ§Øą ؎اØĩ Ø¯Ø§ØąŲ ŲŲØĒÛ Ø§Ø˛ `Optional` ÛØ§ `Union[Something, None]` بدŲŲ Ų
ŲØ¯Ø§Øą ŲžÛØ´âŲØąØļ Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲÛØ Ų
ÛâØĒŲŲÛ ØĒŲÛ Ų
ØŗØĒŲØ¯Ø§ØĒ Pydantic Ø¯Øą Ų
بਝ ŲÛŲØ¯ŲØ§Û Ø§ØŽØĒÛØ§ØąÛ ŲØ§Ø˛Ų
Ø¨ÛØ´ØĒØą ب؎ŲŲÛ.
+
+///
+
+## ŲŲØšâŲŲ
Ø§ŲØ§ با AnnotationŲØ§Û Ų
ØĒØ§Ø¯ÛØĒØ§
+
+ŲžØ§ÛØĒŲŲ ÛŲ ŲØ§Ø¨ŲÛØĒ ŲŲ
Ø¯Ø§ØąŲ ÚŠŲ Ø¨ŲØĒ Ø§ØŦØ§Ø˛Ų Ų
ÛâØ¯Ų **Ų
ØĒØ§Ø¯ÛØĒØ§ اØļاŲÛ** ØąŲ ØĒŲÛ Ø§ÛŲ ŲŲØšâŲŲ
Ø§ŲØ§ Ø¨Ø°Ø§ØąÛ Ø¨Ø§ Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ `Annotated`.
+
+//// tab | Python 3.9+
+
+ØĒŲÛ ŲžØ§ÛØĒŲŲ 3.9Ø `Annotated` Ø¨ØŽØ´Û Ø§Ø˛ ÚŠØĒاب؎ŲŲŲ Ø§ØŗØĒØ§ŲØ¯Ø§ØąØ¯ŲØ ŲžØŗ Ų
ÛâØĒŲŲÛ Ø§Ø˛ `typing` ŲØ§ØąØ¯Ø´ ÚŠŲÛ.
+
+```Python hl_lines="1 4"
+{!> ../../docs_src/python_types/tutorial013_py39.py!}
+```
+
+////
+
+//// tab | Python 3.8+
+
+ØĒŲÛ ŲØŗØŽŲâŲØ§Û Ø˛ÛØą ŲžØ§ÛØĒŲŲ 3.9Ø `Annotated` ØąŲ Ø§Ø˛ `typing_extensions` ŲØ§ØąØ¯ Ų
ÛâÚŠŲÛ.
+
+با **FastAPI** Ø§Ø˛ ŲØ¨Ų ŲØĩب شدŲ.
+
+```Python hl_lines="1 4"
+{!> ../../docs_src/python_types/tutorial013.py!}
+```
+
+////
+
+ØŽŲØ¯ ŲžØ§ÛØĒŲŲ Ø¨Ø§ اÛŲ `Annotated` ÚŠØ§ØąÛ ŲŲ
ÛâÚŠŲŲ. Ų Ø¨ØąØ§Û ŲÛØąØ§ÛØ´Ú¯ØąŲا Ų Ø§Ø¨Ø˛Ø§ØąŲØ§Û دÛÚ¯ŲØ ŲŲØš ŲŲŲØ˛ `str` ŲØŗØĒ.
+
+ŲŲÛ Ų
ÛâØĒŲŲÛ Ø§Ø˛ اÛŲ ŲØļØ§ ØĒŲÛ `Annotated` Ø§ØŗØĒŲØ§Ø¯Ų ÚŠŲÛ ØĒا Ø¨Ų **FastAPI** Ų
ØĒØ§Ø¯ÛØĒØ§Û اØļاŲÛ Ø¯Øą Ų
بਝ اÛŲÚŠŲ ÚØˇŲØą Ų
ÛâØŽŲØ§Û Ø¨ØąŲØ§Ų
ŲâØ§ØĒ ØąŲØĒØ§Øą ÚŠŲŲ Ø¨Ø¯Û.
+
+ŲÚŠØĒŲ Ų
ŲŲ
اÛŲŲ ÚŠŲ **اŲŲÛŲ *ŲžØ§ØąØ§Ų
ØĒØą ŲŲØš*** ÚŠŲ Ø¨Ų `Annotated` Ų
ÛâØ¯ÛØ **ŲŲØš ŲØ§ŲØšÛ** ŲØŗØĒ. بŲÛØ´ ŲŲØˇ Ų
ØĒØ§Ø¯ÛØĒØ§ Ø¨ØąØ§Û Ø§Ø¨Ø˛Ø§ØąŲØ§Û دÛÚ¯ŲâØŗØĒ.
+
+Ø§ŲØ§Ų ŲŲØˇ Ø¨Ø§ÛØ¯ بدŲŲÛ ÚŠŲ `Annotated` ŲØŦŲØ¯ Ø¯Ø§ØąŲØ Ų Ø§ÛŲÚŠŲ ŲžØ§ÛØĒŲŲ Ø§ØŗØĒØ§ŲØ¯Ø§ØąØ¯Ų. đ
+
+Ø¨ØšØ¯Ø§Ų Ų
ÛâØ¨ÛŲÛ ÚŠŲ ÚŲØ¯Øą **ŲŲÛ** Ų
ÛâØĒŲŲŲ Ø¨Ø§Ø´Ų.
+
+/// tip
+
+اÛŲÚŠŲ Ø§ÛŲ **ŲžØ§ÛØĒŲŲ Ø§ØŗØĒØ§ŲØ¯Ø§ØąØ¯Ų** ÛØšŲÛ ŲŲŲØ˛ **Ø¨ŲØĒØąÛŲ ØĒØŦØąØ¨Ų ØĒŲØŗØšŲâØ¯ŲŲØ¯Ų** ØąŲ ØĒŲÛ ŲÛØąØ§ÛØ´Ú¯ØąØĒØ Ø¨Ø§ Ø§Ø¨Ø˛Ø§ØąŲØ§ÛÛ ÚŠŲ Ø¨ØąØ§Û ØĒØŲÛŲ Ų Ø¨Ø§Ø˛ØŗØ§Ø˛Û ÚŠØ¯ØĒ Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲÛ Ų ØēÛØąŲ Ų
ÛâÚ¯ÛØąÛ. â¨
+
+Ų ŲŲ
ÛŲâØˇŲØą ڊدØĒ با ØŽÛŲÛ Ø§Ø˛ Ø§Ø¨Ø˛Ø§ØąŲØ§ Ų ÚŠØĒاب؎ŲŲŲâŲØ§Û دÛÚ¯Ų ŲžØ§ÛØĒŲŲ ØŽÛŲÛ ØŗØ§Ø˛Ú¯Ø§Øą Ų
ÛâŲ
ŲŲŲ. đ
+
+///
+
+## ŲŲØšâŲŲ
Ø§ŲØ§ ØĒŲÛ **FastAPI**
+
+**FastAPI** Ø§Ø˛ اÛŲ ŲŲØšâŲŲ
Ø§ŲØ§ Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲŲ ØĒا ÚŲØ¯ ØĒا ÚŠØ§Øą بڊŲŲ.
+
+با **FastAPI** ŲžØ§ØąØ§Ų
ØĒØąŲØ§ ØąŲ Ø¨Ø§ ŲŲØšâŲŲ
Ø§ŲØ§ ØĒØšØąÛŲ Ų
ÛâÚŠŲÛ Ų Ø§ÛŲØ§ ØąŲ Ų
ÛâÚ¯ÛØąÛ:
+
+* **ŲžØ´ØĒÛØ¨Ø§ŲÛ ŲÛØąØ§ÛØ´Ú¯Øą**.
+* **ÚÚŠ ŲŲØšâŲØ§**.
+
+...Ų **FastAPI** Ø§Ø˛ ŲŲ
ŲŲ ØĒØšØąÛŲâŲØ§ Ø¨ØąØ§Û Ø§ÛŲØ§ Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâÚŠŲŲ:
+
+* **ØĒØšØąÛŲ ŲÛØ§Ø˛Ųا**: Ø§Ø˛ ŲžØ§ØąØ§Ų
ØĒØąŲØ§Û Ų
ØŗÛØą Ø¯ØąØŽŲØ§ØŗØĒØ ŲžØ§ØąØ§Ų
ØĒØąŲØ§Û ÚŠŲØĻØąÛØ ŲØ¯ØąŲØ§Ø Ø¨Ø¯ŲŲâŲØ§Ø ŲØ§Ø¨ØŗØĒÚ¯ÛâŲØ§ Ų ØēÛØąŲ.
+* **ØĒبدÛŲ Ø¯Ø§Ø¯Ų**: Ø§Ø˛ Ø¯ØąØŽŲØ§ØŗØĒ Ø¨Ų ŲŲØš Ų
بਝ ŲÛØ§Ø˛.
+* **اؚØĒØ¨Ø§ØąØŗŲØŦÛ Ø¯Ø§Ø¯Ų**: ÚŠŲ Ø§Ø˛ ŲØą Ø¯ØąØŽŲØ§ØŗØĒ Ų
ÛØ§Ø¯:
+ * ØĒŲŲÛØ¯ **ØŽØˇØ§ŲØ§Û ØŽŲØ¯ÚŠØ§Øą** ÚŠŲ Ø¨Ų ÚŠŲØ§ÛŲØĒ Ø¨ØąŲ
ÛâÚ¯ØąØ¯Ų ŲŲØĒÛ Ø¯Ø§Ø¯Ų ŲØ§Ų
ØšØĒØ¨ØąŲ.
+* **Ų
ØŗØĒŲØ¯ØŗØ§Ø˛Û** API با Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ OpenAPI:
+ * ÚŠŲ Ø¨ØšØ¯Ø´ ØĒŲØŗØˇ ØąØ§Ø¨ØˇâŲØ§Û ÚŠØ§ØąØ¨ØąÛ Ų
ØŗØĒŲØ¯Ø§ØĒ ØĒؚاŲ
ŲÛ ØŽŲØ¯ÚŠØ§Øą Ø§ØŗØĒŲØ§Ø¯Ų Ų
ÛâØ´Ų.
+
+اÛŲØ§ Ø´Ø§ÛØ¯ ŲŲ
ŲâØ´ Ø§ŲØĒØ˛Ø§ØšÛ Ø¨Ų ŲØ¸Øą Ø¨ÛØ§Ø¯. ŲÚ¯ØąØ§Ų ŲØ¨Ø§Ø´. ŲŲ
Ų Ø§ÛŲØ§ ØąŲ ØĒŲÛ ØšŲ
Ų ØĒŲÛ [ØĸŲ
ŲØ˛Ø´ - ØąØ§ŲŲŲ
Ø§Û ÚŠØ§ØąØ¨Øą](tutorial/index.md){.internal-link target=_blank} Ų
ÛâØ¨ÛŲÛ.
+
+ŲÚŠØĒŲ Ų
ŲŲ
اÛŲŲ ÚŠŲ Ø¨Ø§ Ø§ØŗØĒŲØ§Ø¯Ų Ø§Ø˛ ŲŲØšâŲØ§Û Ø§ØŗØĒØ§ŲØ¯Ø§ØąØ¯ ŲžØ§ÛØĒŲŲØ ØĒŲÛ ÛŲ ØŦا (Ø¨Ų ØŦØ§Û Ø§ØļاŲŲ ÚŠØąØ¯Ų ÚŠŲØ§ØŗâŲØ§Û Ø¨ÛØ´ØĒØąØ Ø¯ÚŠŲØąØ§ØĒŲØąŲا Ų ØēÛØąŲ)Ø **FastAPI** ÚŠŲÛ Ø§Ø˛ ÚŠØ§Øą ØąŲ Ø¨ØąØ§ØĒ Ø§ŲØŦاŲ
Ų
ÛâØ¯Ų.
+
+/// info
+
+Ø§Ú¯Ų ŲŲ
Ų ØĸŲ
ŲØ˛Ø´ ØąŲ Ú¯Ø°ØąŲŲØ¯Û Ų Ø¨ØąÚ¯Ø´ØĒÛ ÚŠŲ Ø¨ÛØ´ØĒØą Ø¯Øą Ų
بਝ ŲŲØšâŲØ§ ببÛŲÛØ ÛŲ Ų
ŲØ¨Øš ØŽŲØ¨ "ØĒŲŲØ¨âŲØ§Ų
Ų" Ø§Ø˛ `mypy` ŲØŗØĒ.
+
+///
diff --git a/docs/ja/docs/deployment/concepts.md b/docs/ja/docs/deployment/concepts.md
index c6b21fd1b..a0d4fb35b 100644
--- a/docs/ja/docs/deployment/concepts.md
+++ b/docs/ja/docs/deployment/concepts.md
@@ -219,7 +219,7 @@ FastAPI ãĸããĒãąãŧãˇã§ãŗã§ã¯ãUvicorn ãŽãããĒãĩãŧããŧãã
ããããŽã¯ãŧãĢãŧãģãããģãšã¯ããĸããĒãąãŧãˇã§ãŗãåŽčĄããããŽã§ããã**ãĒã¯ã¨ãšã**ãåããĻ**ãŦãšããŗãš**ãčŋããããŽä¸ģčĻãĒč¨įŽãčĄããããĒãã夿°ãĢå
ĨããããŽã¯äŊã§ãRAMãĢããŧãããžãã
-
+
ãããĻããĄãããåãããˇãŗã§ã¯ãããĒããŽãĸããĒãąãŧãˇã§ãŗã¨ã¯åĨãĢã**äģãŽãããģãš**ãåŽčĄãããĻããã§ãããã
diff --git a/docs/ja/docs/deployment/https.md b/docs/ja/docs/deployment/https.md
index ac40b0982..7b0f567aa 100644
--- a/docs/ja/docs/deployment/https.md
+++ b/docs/ja/docs/deployment/https.md
@@ -92,7 +92,7 @@ DNSãĩãŧããŧã§ã¯ã**ååžããããĄã¤ãŗ**ãããĒããŽãĩãŧããŧ
DNSãĩãŧããŧã¯ãããŠãĻãļãĢįšåŽãŽ**IPãĸããŦãš**ãäŊŋį¨ãããããĢæį¤ēããžããããŽIPãĸããŦãšã¯ãDNSãĩãŧããŧã§č¨åŽãããããĒããŽãĩãŧããŧãäŊŋį¨ãããããĒãã¯IPãĸããŦãšãĢãĒããžãã
-
+
### TLS Handshake ãŽéå§
@@ -100,7 +100,7 @@ DNSãĩãŧããŧã¯ãããŠãĻãļãĢįšåŽãŽ**IPãĸããŦãš**ãäŊŋį¨ãã
éäŋĄãŽæåãŽé¨åã¯ãã¯ãŠã¤ãĸãŗãã¨ãĩãŧããŧéãŽæĨįļãįĸēįĢããäŊŋį¨ããæåˇéĩãĒãŠãæąēããã ãã§ãã
-
+
TLSæĨįļãįĸēįĢãããããŽã¯ãŠã¤ãĸãŗãã¨ãĩãŧããŧéãŽããŽããã¨ãã¯ã**TLSããŗããˇã§ã¤ã¯**ã¨åŧã°ããžãã
@@ -120,7 +120,7 @@ TLS Termination Proxyã¯ã1ã¤äģĨä¸ãŽ**TLSč¨ŧææ¸**īŧHTTPSč¨ŧææ¸īŧãĢ
äģåã¯ã`someapp.example.com`ãŽč¨ŧææ¸ãäŊŋããã¨ãĢãĒããžãã
-
+
ã¯ãŠã¤ãĸãŗãã¯ãããŽTLSč¨ŧææ¸ãįæããã¨ãŗããŖããŖīŧããŽå ´åã¯Let's Encryptã§ããããããĢã¤ããĻã¯åžčŋ°ããžãīŧããã§ãĢ**äŋĄé ŧ**ããĻãããããããŽč¨ŧææ¸ãæåšã§ãããã¨ã**æ¤č¨ŧ**ãããã¨ãã§ããžãã
@@ -142,19 +142,19 @@ TLS Termination Proxyã¯ã1ã¤äģĨä¸ãŽ**TLSč¨ŧææ¸**īŧHTTPSč¨ŧææ¸īŧãĢ
ããã§ãã¯ãŠã¤ãĸãŗãã¯**HTTPSãĒã¯ã¨ãšã**ãéäŋĄããžããããã¯ãæåˇåãããTLSãŗãã¯ãˇã§ãŗãäģããåãĒãHTTPãĒã¯ã¨ãšãã§ãã
-
+
### ãĒã¯ã¨ãšããŽåžŠåˇå
TLS Termination Proxy ã¯ãåæãåããĻããæåˇåãäŊŋį¨ããĻã**ãĒã¯ã¨ãšãã垊åˇå**ãã**ããŦãŧãŗ (垊åˇåããã) HTTP ãĒã¯ã¨ãšã** ããĸããĒãąãŧãˇã§ãŗãåŽčĄããĻãããããģãš (äžãã°ãFastAPI ãĸããĒãąãŧãˇã§ãŗãåŽčĄããĻãã Uvicorn ãæã¤ãããģãš) ãĢéäŋĄããžãã
-
+
### HTTP ãŦãšããŗãš
ãĸããĒãąãŧãˇã§ãŗã¯ãĒã¯ã¨ãšããåĻįãã**ããŦãŧãŗ(æåˇåãããĻããĒã)HTTPãŦãšããŗãš** ãTLS Termination ProxyãĢéäŋĄããžãã
-
+
### HTTPS ãŦãšããŗãš
@@ -162,7 +162,7 @@ TLS Termination Proxyã¯æŦĄãĢãäēåãĢåæãåããĻããæåˇ(`someap
ããŽåžããŠãĻãļã§ã¯ããŦãšããŗãšãæåšã§æŖããæåˇããŧã§æåˇåãããĻãããã¨ãĒãŠãæ¤č¨ŧããžãããããĻãããŠãĻãļã¯ãŦãšããŗãšã**垊åˇå**ããĻåĻįããžãã
-
+
ã¯ãŠã¤ãĸãŗãīŧããŠãĻãļīŧã¯ããŦãšããŗãšãæŖãããĩãŧããŧããæĨããã¨ãįĨããã¨ãã§ããžãã ãĒããĒããããŽãĩãŧããŧã¯ãäģĨåãĢ**HTTPSč¨ŧææ¸**ãäŊŋãŖãĻåæããæåˇãäŊŋãŖãĻããããã§ãã
@@ -172,7 +172,7 @@ TLS Termination Proxyã¯æŦĄãĢãäēåãĢåæãåããĻããæåˇ(`someap
įšåŽãŽIPã¨ããŧãīŧããŽäžã§ã¯TLS Termination Proxyīŧãæąããã¨ãã§ãããŽã¯1ã¤ãŽãããģãšã ãã§ãããäģãŽãĸããĒãąãŧãˇã§ãŗ/ãããģãšããåã**ãããĒãã¯IPã¨ããŧã**ãŽįĩãŋåãããäŊŋį¨ãããã¨ããĒãéãããĩãŧããŧä¸ã§åŽčĄãããã¨ãã§ããžãã
-
+
ããããã°ãTLS Termination Proxy ã¯ã**褿°ãŽããĄã¤ãŗ**ã褿°ãŽãĸããĒãąãŧãˇã§ãŗãŽHTTPSã¨č¨ŧææ¸ãåĻįãããããããŽãąãŧãšã§éŠåãĒãĸããĒãąãŧãˇã§ãŗãĢãĒã¯ã¨ãšããéäŋĄãããã¨ãã§ããžãã
@@ -182,7 +182,7 @@ TLS Termination Proxyã¯æŦĄãĢãäēåãĢåæãåããĻããæåˇ(`someap
ããŽåžãLet's Encryptã¨éäŋĄããåĨãŽããã°ãŠã īŧåĨãŽããã°ãŠã ã§ããå ´åãããã°ãåãTLS Termination Proxyã§ããå ´åãããīŧãĢããŖãĻãč¨ŧææ¸ãæ´æ°ããžãã
-
+
**TLSč¨ŧææ¸**ã¯ãIPãĸããŦãšã§ã¯ãĒãã**ããĄã¤ãŗåãĢéĸéŖäģããããĻ**ããžãã
diff --git a/docs/ja/docs/tutorial/body-fields.md b/docs/ja/docs/tutorial/body-fields.md
index 0466320f1..ce5630351 100644
--- a/docs/ja/docs/tutorial/body-fields.md
+++ b/docs/ja/docs/tutorial/body-fields.md
@@ -44,7 +44,7 @@
čŋŊå æ
å ąã¯`Field`ã`Query`ã`Body`ãĒãŠã§åŽŖč¨ãããã¨ãã§ããžãããããĻããã¯įæãããJSONãšããŧããĢåĢãžããžãã
-åžãĢäžãį¨ããĻåŽŖč¨ãåĻãļéãĢãčŋŊå æ
å ąãåĨæĒæšæŗãåĻãšãžãã
+åžãĢäžãį¨ããĻåŽŖč¨ãåĻãļéãĢãčŋŊå æ
å ąãčŋŊå ããæšæŗãåĻãšãžãã
## ãžã¨ã
diff --git a/docs/ja/docs/tutorial/body.md b/docs/ja/docs/tutorial/body.md
index 8376959d5..1298eec7e 100644
--- a/docs/ja/docs/tutorial/body.md
+++ b/docs/ja/docs/tutorial/body.md
@@ -22,7 +22,7 @@ GET ãĒã¯ã¨ãšãã§ãããŖãéäŋĄãããã¨ã¯ãäģæ§ã§ã¯æĒåŽįžŠ
ãžãåããĢã `pydantic` ãã `BaseModel` ãã¤ãŗããŧãããåŋ
čĻããããžã:
-{* ../../docs_src/body/tutorial001.py hl[2] *}
+{* ../../docs_src/body/tutorial001.py hl[4] *}
## ããŧãŋãĸããĢãŽäŊæ
@@ -30,7 +30,7 @@ GET ãĒã¯ã¨ãšãã§ãããŖãéäŋĄãããã¨ã¯ãäģæ§ã§ã¯æĒåŽįžŠ
ããšãĻãŽåąæ§ãĢpythonæ¨æēãŽåãäŊŋį¨ããžã:
-{* ../../docs_src/body/tutorial001.py hl[5:9] *}
+{* ../../docs_src/body/tutorial001.py hl[7:11] *}
ã¯ã¨ãĒããŠãĄãŧãŋãŽåŽŖč¨ã¨åæ§ãĢããĸããĢåąæ§ããããŠãĢãå¤ããã¤ã¨ããåŋ
é ãĒåąæ§ã§ã¯ãĒããĒããžããããäģĨå¤ã¯åŋ
é ãĢãĒããžãããĒããˇã§ããĢãĒåąæ§ãĢãããå ´å㯠`None` ãäŊŋį¨ããĻãã ããã
@@ -58,7 +58,7 @@ GET ãĒã¯ã¨ãšãã§ãããŖãéäŋĄãããã¨ã¯ãäģæ§ã§ã¯æĒåŽįžŠ
*ããšãĒããŦãŧãˇã§ãŗ* ãĢå ãããããĢãããšããŠãĄãŧãŋãã¯ã¨ãĒããŠãĄãŧãŋã¨åãæ§ãĢåŽŖč¨ããžã:
-{* ../../docs_src/body/tutorial001.py hl[16] *}
+{* ../../docs_src/body/tutorial001.py hl[18] *}
...ãããĻãäŊæãããĸããĢ `Item` ã§åãåŽŖč¨ããžãã
@@ -125,7 +125,7 @@ GET ãĒã¯ã¨ãšãã§ãããŖãéäŋĄãããã¨ã¯ãäģæ§ã§ã¯æĒåŽįžŠ
éĸæ°å
é¨ã§ããĸããĢãŽå
¨ãĻãŽåąæ§ãĢį´æĨãĸã¯ãģãšã§ããžã:
-{* ../../docs_src/body/tutorial002.py hl[19] *}
+{* ../../docs_src/body/tutorial002.py hl[21] *}
## ãĒã¯ã¨ãšããããŖ + ããšããŠãĄãŧãŋ
@@ -133,7 +133,7 @@ GET ãĒã¯ã¨ãšãã§ãããŖãéäŋĄãããã¨ã¯ãäģæ§ã§ã¯æĒåŽįžŠ
**FastAPI** ã¯ããšããŠãĄãŧãŋã§ããéĸæ°ããŠãĄãŧãŋã¯**ããšããåãåã**ãPydanticãĸããĢãĢããŖãĻåŽŖč¨ãããéĸæ°ããŠãĄãŧãŋã¯**ãĒã¯ã¨ãšããããŖããåãåã**ã¨ãããã¨ãčĒčããžãã
-{* ../../docs_src/body/tutorial003.py hl[15:16] *}
+{* ../../docs_src/body/tutorial003.py hl[17:18] *}
## ãĒã¯ã¨ãšããããŖ + ããšããŠãĄãŧãŋ + ã¯ã¨ãĒããŠãĄãŧãŋ
@@ -141,7 +141,7 @@ GET ãĒã¯ã¨ãšãã§ãããŖãéäŋĄãããã¨ã¯ãäģæ§ã§ã¯æĒåŽįžŠ
**FastAPI** ã¯ãããããčĒčããéŠåãĒå ´æããããŧãŋãååžããžãã
-{* ../../docs_src/body/tutorial004.py hl[16] *}
+{* ../../docs_src/body/tutorial004.py hl[18] *}
éĸæ°ããŠãĄãŧãŋã¯äģĨä¸ãŽæ§ãĢčĒčãããžã:
diff --git a/docs/ja/docs/tutorial/encoder.md b/docs/ja/docs/tutorial/encoder.md
index 409ebeec6..309cf8857 100644
--- a/docs/ja/docs/tutorial/encoder.md
+++ b/docs/ja/docs/tutorial/encoder.md
@@ -8,7 +8,7 @@
## `jsonable_encoder`ãŽäŊŋį¨
-JSONäēæãŽããŧãŋãŽãŋãåäŋĄããããŧãŋããŧãš`fase_db`ãããã¨ããžãããã
+JSONäēæãŽããŧãŋãŽãŋãåäŋĄããããŧãŋããŧãš`fake_db`ãããã¨ããžãããã
äžãã°ã`datetime`ãĒãã¸ã§ã¯ãã¯JSONã¨äēææ§ããĒããŽã§ãããŽããŧãŋãŧããŧãšãĢã¯åãåãããžããã
diff --git a/docs/ja/docs/tutorial/handling-errors.md b/docs/ja/docs/tutorial/handling-errors.md
index 9a46cc738..37315b087 100644
--- a/docs/ja/docs/tutorial/handling-errors.md
+++ b/docs/ja/docs/tutorial/handling-errors.md
@@ -63,7 +63,7 @@ PythonãŽäžå¤ãĒãŽã§ã`return`ã§ã¯ãĒãã`raise`ã§ãã
`HTTPException`ãįēįãããéãĢã¯ã`str`ã ãã§ãĒããJSONãĢ夿ã§ããäģģæãŽå¤ã`detail`ããŠãĄãŧãŋã¨ããĻæ¸Ąããã¨ãã§ããžãã
-`dist`ã`list`ãĒãŠãæ¸Ąããã¨ãã§ããžãã
+`dict`ã`list`ãĒãŠãæ¸Ąããã¨ãã§ããžãã
ããã㯠**FastAPI** ãĢããŖãĻčĒåįãĢåĻįãããJSONãĢ夿ãããžãã
diff --git a/docs/ja/docs/virtual-environments.md b/docs/ja/docs/virtual-environments.md
new file mode 100644
index 000000000..791cf64a8
--- /dev/null
+++ b/docs/ja/docs/virtual-environments.md
@@ -0,0 +1,831 @@
+# äģŽæŗį°åĸ
+
+Pythonããã¸ã§ã¯ããŽäŊæĨã§ã¯ã**äģŽæŗį°åĸ**īŧãžãã¯éĄäŧŧãŽäģįĩãŋīŧãäŊŋį¨ããããã¸ã§ã¯ããã¨ãĢã¤ãŗãšããŧãĢãããããąãŧã¸ãåéĸãããšãã§ãããã
+
+/// info | æ
å ą
+
+ãããäģŽæŗį°åĸãŽæĻčĻãäŊææšæŗãäŊŋ፿šæŗãĢã¤ããĻæĸãĢãåįĨãĒããããŽãģã¯ãˇã§ãŗããšããããããã¨ãã§ããžããđ¤
+
+///
+
+/// tip | čąįĨč
+
+**äģŽæŗį°åĸ**ã¯ã**į°åĸ夿°**ã¨ã¯į°ãĒããžãã
+
+**į°åĸ夿°**ã¯ãããã°ãŠã ãäŊŋį¨ã§ãããˇãšãã å
ãŽå¤æ°ã§ãã
+
+**äģŽæŗį°åĸ**ã¯ãããĄã¤ãĢããžã¨ããããŖãŦã¯ããĒãŽãã¨ã§ãã
+
+///
+
+/// info | æ
å ą
+ããŽããŧã¸ã§ã¯ã**äģŽæŗį°åĸ**ãŽäŊŋ፿šæŗã¨ãããŽã¯ããããĢã¤ããĻčĒŦæããžãã
+
+ãã**ããšãĻãįŽĄįããããŧãĢ**īŧPythonãŽã¤ãŗãšããŧãĢãåĢãīŧãå°å
Ĩããæēåãã§ããĻãããĒããuv ããčŠĻããã ããã
+
+///
+
+## ããã¸ã§ã¯ããŽäŊæ
+
+ãžããããã¸ã§ã¯ãį¨ãŽããŖãŦã¯ããĒãäŊæããžãã
+
+į§ã¯é常 home/user ããŖãŦã¯ããĒãŽä¸ãĢ `code` ã¨ããããŖãŦã¯ããĒã፿ããĻããĻãããã¸ã§ã¯ããã¨ãĢ1ã¤ãŽããŖãŦã¯ããĒãããŽä¸ãĢäŊæããĻããžãã
+
+
+
+```console
+// Go to the home directory
+$ cd
+// Create a directory for all your code projects
+$ mkdir code
+// Enter into that code directory
+$ cd code
+// Create a directory for this project
+$ mkdir awesome-project
+// Enter into that project directory
+$ cd awesome-project
+```
+
+
+
+## äģŽæŗį°åĸãŽäŊæ
+
+Pythonããã¸ã§ã¯ãã§ãŽ**åããĻãŽ**äŊæĨãéå§ããéãĢã¯ã**ããã¸ã§ã¯ãå
**ãĢäģŽæŗį°åĸãäŊæããĻãã ããã
+
+/// tip | čąįĨč
+
+ãããčĄããŽã¯ã**ããã¸ã§ã¯ããã¨ãĢ1åã ã**ã§ããäŊæĨãŽããŗãĢčĄãåŋ
čĻã¯ãããžããã
+
+///
+
+//// tab | `venv`
+
+äģŽæŗį°åĸãäŊæãããĢã¯ãPythonãĢäģåąããĻãã `venv` ãĸã¸ãĨãŧãĢãäŊŋį¨ã§ããžãã
+
+
+
+```console
+$ python -m venv .venv
+```
+
+
+
+/// details | ããŽãŗããŗããŽæåŗ
+
+- `python` : `python` ã¨ããããã°ãŠã ãåŧãŗåēããžã
+- `-m` : ãĸã¸ãĨãŧãĢããšã¯ãĒããã¨ããĻåŧãŗåēããžãããŠãŽãĸã¸ãĨãŧãĢãåŧãŗåēããŽããããŽæŦĄãĢæåŽããžã
+- `venv` : é常PythonãĢäģéããĻã¤ãŗãšããŧãĢããã `venv`ãĸã¸ãĨãŧãĢãäŊŋį¨ããžã
+- `.venv` : äģŽæŗį°åĸã`.venv`ã¨ããæ°ããããŖãŦã¯ããĒãĢäŊæããžã
+
+///
+
+////
+
+//// tab | `uv`
+
+ãã `uv` ãã¤ãŗãšããŧãĢæ¸ãŋãĒããäģŽæŗį°åĸãäŊæãããããĢ `uv` ãäŊŋããã¨ãã§ããžãã
+
+
+
+```console
+$ uv venv
+```
+
+
+
+/// tip | čąįĨč
+
+ãããŠãĢãã§ã¯ã `uv` 㯠`.venv` ã¨ããããŖãŦã¯ããĒãĢäģŽæŗį°åĸãäŊæããžãã
+
+ãã ããčŋŊå ãŽåŧæ°ãĢããŖãŦã¯ããĒåãä¸ããĻãĢãšãŋãã¤ãēãããã¨ãã§ããžãã
+
+///
+
+////
+
+ããŽãŗããŗã㯠`.venv` ã¨ããããŖãŦã¯ããĒãĢæ°ããäģŽæŗį°åĸãäŊæããžãã
+
+/// details | `.venv` ãžãã¯ããŽäģãŽåå
+
+äģŽæŗį°åĸãåĨãŽããŖãŦã¯ããĒãĢäŊæãããã¨ãå¯čŊã§ããã `.venv` ã¨åäģãããŽãä¸čŦįãĒæ
Ŗįŋã§ãã
+
+///
+
+## äģŽæŗį°åĸãŽæåšå
+
+åŽčĄãããPythonãŗããŗããã¤ãŗãšããŧãĢããããããąãŧã¸ãæ°ããäŊæããäģŽæŗį°åĸãäŊŋį¨ãããããããŽäģŽæŗį°åĸãæåšåããžãããã
+
+/// tip | čąįĨč
+
+ããŽããã¸ã§ã¯ããŽäŊæĨã§**æ°ãããŋãŧãããĢãģããˇã§ãŗ**ãéå§ããéãĢã¯ã**æ¯å**æåšåãåŋ
čĻã§ãã
+
+///
+
+//// tab | Linux, macOS
+
+
+
+```console
+$ source .venv/bin/activate
+```
+
+
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+```console
+$ .venv\Scripts\Activate.ps1
+```
+
+
+
+////
+
+//// tab | Windows Bash
+
+ããWindowsã§BashãäŊŋį¨ããĻããå ´å (Git Bash ãĒãŠ):
+
+
+
+```console
+$ source .venv/Scripts/activate
+```
+
+
+
+////
+
+/// tip | čąįĨč
+
+**æ°ãããããąãŧã¸**ãäģŽæŗį°åĸãĢã¤ãŗãšããŧãĢããã¨ããĢã¯ãååēĻ**æåšå**ããĻãã ããã
+
+ãããããã¨ã§ãããŽãããąãŧã¸ãã¤ãŗãšããŧãĢãã**ãŋãŧãããĢīŧCLI īŧããã°ãŠã **ãäŊŋį¨ããå ´åãĢãäģŽæŗį°åĸå
ãŽããŽãįĸēåŽãĢäŊŋãããã°ããŧããĢį°åĸãĢã¤ãŗãšããŧãĢãããĻããåĨãŽããŽīŧããããåŋ
čĻãĒããŽã¨ã¯į°ãĒãããŧã¸ã§ãŗīŧãčǤãŖãĻäŊŋį¨ãããã¨ãé˛ããžãã
+
+///
+
+## äģŽæŗį°åĸãæåšã§ãããã¨ãįĸēčĒãã
+
+äģŽæŗį°åĸãæåšã§ããīŧåãŽãŗããŗããæŖå¸¸ãĢæŠčŊããīŧãã¨ãįĸēčĒããžãã
+
+/// tip | čąįĨč
+
+ããã¯**äģģæ**ã§ãããããšãĻãæåž
éããĢæŠčŊããæåŗããäģŽæŗį°åĸãäŊŋį¨ããĻãããã¨ã**įĸēčĒãã**č¯ãæšæŗã§ãã
+
+///
+
+//// tab | Linux, macOS, Windows Bash
+
+
+
+```console
+$ which python
+
+/home/user/code/awesome-project/.venv/bin/python
+```
+
+
+
+`.venv/bin/python` ãĢãã `python` ãã¤ããĒããããã¸ã§ã¯ãīŧããŽå ´å㯠`awesome-project` īŧå
ãĢ襨į¤ēãããĻããã°ãæŖå¸¸ãĢåäŊããĻããžã đã
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+``` console
+$ Get-Command python
+
+C:\Users\user\code\awesome-project\.venv\Scripts\python
+```
+
+
+
+`.venv\Scripts\python` ãĢãã `python` ãã¤ããĒããããã¸ã§ã¯ãīŧããŽå ´å㯠`awesome-project` īŧå
ãĢ襨į¤ēãããĻããã°ãæŖå¸¸ãĢåäŊããĻããžã đã
+
+////
+
+## `pip` ããĸããã°ãŦãŧããã
+
+/// tip | čąįĨč
+
+ãã `uv` ãäŊŋį¨ããĻããå ´åã¯ã `pip` ãŽäģŖãããĢ `uv` ãäŊŋãŖãĻã¤ãŗãšããŧãĢãčĄãããã `pip` ããĸããã°ãŦãŧãããåŋ
čĻã¯ãããžãã đã
+
+///
+
+ãããããąãŧã¸ãŽã¤ãŗãšããŧãĢãĢ `pip`īŧPythonãĢæ¨æēã§äģåąããĻããžãīŧãäŊŋį¨ããĻãããĒãã `pip` ãææ°ããŧã¸ã§ãŗãĢ**ãĸããã°ãŦãŧã**ããžãããã
+
+ãããąãŧã¸ãŽã¤ãŗãšããŧãĢä¸ãĢįēįããæŗåŽå¤ãŽã¨ãŠãŧãŽå¤ãã¯ãæåãĢ `pip` ããĸããã°ãŦãŧãããĻããã ãã§č§Ŗæąēãããžãã
+
+/// tip | čąįĨč
+
+é常ãããã¯äģŽæŗį°åĸãäŊæããį´åžãĢ**ä¸åēĻã ã**åŽčĄããžãã
+
+///
+
+äģŽæŗį°åĸãæåšã§ãããã¨ãīŧä¸ã§čĒŦæãããŗããŗãã§īŧįĸēčĒãããĸããã°ãŦãŧããåŽčĄããžãããīŧ
+
+
+
+```console
+$ python -m pip install --upgrade pip
+
+---> 100%
+```
+
+
+
+## `.gitignore` ãčŋŊå ãã
+
+**Git**ãäŊŋį¨ããĻããå ´åīŧäŊŋį¨ãããšãã§ãããīŧã `.gitignore` ããĄã¤ãĢãčŋŊå ããĻã `.venv` å
ãŽããããããĄã¤ãĢãGitãŽįŽĄįå¯žčąĄããé¤å¤ããžãã
+
+/// tip | čąįĨč
+
+ãã `uv` ãäŊŋį¨ããĻäģŽæŗį°åĸãäŊæããå ´åããã§ãĢããŽäŊæĨã¯æ¸ãã§ãããŽã§ãããŽæé ããšãããã§ããžã đã
+
+///
+
+/// tip | čąįĨč
+
+ããããäģŽæŗį°åĸãäŊæããį´åžãĢ**ä¸åēĻã ã**åŽčĄããžãã
+
+///
+
+
+
+```console
+$ echo "*" > .venv/.gitignore
+```
+
+
+
+/// details | ããŽãŗããŗããŽæåŗ
+
+- `echo "*"` : ãŋãŧãããĢãĢ `*` ã¨ãããããšããã襨į¤ēããããã¨ããžããīŧæŦĄãŽé¨åãĢããŖãĻããŽåäŊãå°ãå¤ãããžãīŧ
+- `>` : `>` ãŽåˇĻå´ãŽãŗããŗãããŋãŧãããĢãĢ襨į¤ēãããã¨ããå
厚ãããŋãŧãããĢãĢã¯čĄ¨į¤ēããã `>` ãŽåŗå´ãŽããĄã¤ãĢãĢæ¸ãčžŧãŋãžãã
+- `.gitignore` : `*` ãæ¸ãčžŧãããĄã¤ãĢåã
+
+ããã§ãGitãĢããã `*` ã¯ãããšãĻããæåŗãããŽã§ãããŽãŗããŗããĢããŖãĻ `.venv` ããŖãŦã¯ããĒå
ãŽããšãĻãGitãĢįĄčĻããããããĢãĒããžãã
+
+ããŽãŗããŗãã¯äģĨä¸ãŽãããšããæã¤ `.gitignore` ããĄã¤ãĢãäŊæããžãīŧ
+
+```gitignore
+*
+```
+
+///
+
+## ãããąãŧã¸ãŽã¤ãŗãšããŧãĢ
+
+äģŽæŗį°åĸãæåšåããåžãããŽä¸ã§ãããąãŧã¸ãã¤ãŗãšããŧãĢã§ããžãã
+
+/// tip | čąįĨč
+
+ããã¸ã§ã¯ããĢåŋ
čĻãĒãããąãŧã¸ãã¤ãŗãšããŧãĢãžãã¯ãĸããã°ãŦãŧãããå ´åãããã**ä¸åēĻ**åŽčĄããžãã
+
+ããæ°ãããããąãŧã¸ãčŋŊå ããããããŧã¸ã§ãŗããĸããã°ãŦãŧãããåŋ
čĻãããå ´åã¯ããã**ä¸åēĻããŽæé ãįš°ãčŋã**ãžãã
+
+///
+
+### ãããąãŧã¸ãį´æĨã¤ãŗãšããŧãĢãã
+
+æĨãã§ããĻãããã¸ã§ã¯ããŽãããąãŧã¸čĻäģļãåŽŖč¨ããããĄã¤ãĢãäŊŋããããĒãå ´åããããąãŧã¸ãį´æĨã¤ãŗãšããŧãĢã§ããžãã
+
+/// tip | čąįĨč
+
+ããã°ãŠã ãåŋ
čĻã¨ãããããąãŧã¸ã¨ããŧã¸ã§ãŗãããĄã¤ãĢīŧäžãã° `requirements.txt` ã `pyproject.toml` īŧãĢč¨čŧããĻãããŽã¯ãīŧã¨ãĻãīŧč¯ãčãã§ãã
+
+///
+
+//// tab | `pip`
+
+
+
+```console
+$ pip install "fastapi[standard]"
+
+---> 100%
+```
+
+
+
+////
+
+//// tab | `uv`
+
+ãã `uv` ãäŊŋį¨ã§ãããĒã:
+
+
+
+```console
+$ uv pip install "fastapi[standard]"
+---> 100%
+```
+
+
+
+////
+
+### `requirements.txt` ããã¤ãŗãšããŧãĢãã
+
+ãã `requirements.txt` ããããĒãããããąãŧã¸ãŽã¤ãŗãšããŧãĢãĢäŊŋį¨ã§ããžãã
+
+//// tab | `pip`
+
+
+
+```console
+$ pip install -r requirements.txt
+---> 100%
+```
+
+
+
+////
+
+//// tab | `uv`
+
+ãã `uv` ãäŊŋį¨ã§ãããĒã:
+
+
+
+```console
+$ uv pip install -r requirements.txt
+---> 100%
+```
+
+
+
+////
+
+/// details | `requirements.txt`
+
+ãããąãŧã¸ãč¨čŧããã `requirements.txt` ã¯äģĨä¸ãŽãããĢãĒãŖãĻããžã:
+
+```requirements.txt
+fastapi[standard]==0.113.0
+pydantic==2.8.0
+```
+
+///
+
+## ããã°ãŠã ãåŽčĄãã
+
+äģŽæŗį°åĸãæåšåããåžãããã°ãŠã ãåŽčĄã§ããžããããŽéãäģŽæŗį°åĸå
ãŽPythonã¨ããããĢã¤ãŗãšããŧãĢãããããąãŧã¸ãäŊŋį¨ãããžãã
+
+
+
+```console
+$ python main.py
+
+Hello World
+```
+
+
+
+## ã¨ããŖãŋãŽč¨åŽ
+
+ããã¸ã§ã¯ãã§ã¯ããããã¨ããŖãŋãäŊŋį¨ããã§ãããããŗãŧãčŖåŽãã¤ãŗãŠã¤ãŗã¨ãŠãŧãŽčĄ¨į¤ēãã§ãããããĢãäŊæããäģŽæŗį°åĸãã¨ããŖãŋã§ãäŊŋããããč¨åŽããĻãã ãããīŧå¤ããŽå ´åãčĒ忤åēãããžãīŧ
+
+č¨åŽäž:
+
+* VS Code
+* PyCharm
+
+/// tip | čąįĨč
+
+ããŽč¨åŽã¯é常ãäģŽæŗį°åĸãäŊæããéãĢ**ä¸åēĻã ã**čĄããžãã
+
+///
+
+## äģŽæŗį°åĸãŽįĄåšå
+
+ããã¸ã§ã¯ããŽäŊæĨãįĩäēããããããŽäģŽæŗį°åĸã**įĄåšå**ã§ããžãã
+
+
+
+```console
+$ deactivate
+```
+
+
+
+ãããĢããã `python` ãŗããŗããåŽčĄããĻããããŽããã¸ã§ã¯ãį¨īŧãŽãããąãŧã¸ãã¤ãŗãšããŧãĢãããīŧäģŽæŗį°åĸãã `python` ããã°ãŠã ãåŧãŗåēããã¨ã¯ããĒããĒããžãã
+
+## äŊæĨæēååŽäē
+
+ãããžã§ã§ãããã¸ã§ã¯ããŽäŊæĨãå§ããæēåãæ´ããžããã
+
+/// tip | čąįĨč
+
+ä¸č¨ãŽå
厚ãįč§Ŗãããã§ããīŧ
+
+ãããããĒããäģĨä¸ãčĒãŋé˛ããĻãã ãããđđ¤
+
+///
+
+## ãĒãäģŽæŗį°åĸīŧ
+
+FastAPIãäŊŋãŖãäŊæĨããããĢã¯ã [Python](https://www.python.org/) ãŽã¤ãŗãšããŧãĢãåŋ
čĻã§ãã
+
+ãããããFastAPIããäŊŋį¨ãããããŽäģãŽ**ãããąãŧã¸**ã**ã¤ãŗãšããŧãĢ**ããåŋ
čĻããããžãã
+
+ãããąãŧã¸ãã¤ãŗãšããŧãĢãããĢã¯ãé常ãPython ãĢäģåąãã `pip` ãŗããŗã (ãžãã¯åæ§ãŽäģŖæŋãŗããŗã) ãäŊŋį¨ããžãã
+
+ãã ãã`pip` ãį´æĨäŊŋį¨ããã¨ããããąãŧã¸ã¯**ã°ããŧããĢãĒPythonį°åĸ**īŧOSå
¨äŊãĢã¤ãŗãšããŧãĢãããPythonį°åĸīŧãĢã¤ãŗãšããŧãĢãããžãã
+
+### åéĄįš
+
+ã§ã¯ãã°ããŧããĢPythonį°åĸãĢãããąãŧã¸ãã¤ãŗãšããŧãĢãããã¨ãŽåéĄįšã¯äŊã§ããããīŧ
+
+ããæįšã§ãããĒãã¯**į°ãĒããããąãŧã¸**ãĢäžåããå¤ããŽããã°ãŠã ãæ¸ããã¨ãĢãĒãã§ãããããããĻãããããŽä¸ãĢã¯åããããąãŧã¸ãŽ**į°ãĒãããŧã¸ã§ãŗ**ãĢäžåããããŽãåēãĻããã§ããããđą
+
+äžãã°ã `philosophers-stone` īŧčŗĸč
ãŽįŗīŧã¨ããããã¸ã§ã¯ããäŊæããã¨ããžããããŽããã°ãŠã 㯠**`harry` īŧããĒãŧīŧã¨ãããããąãŧã¸ãŽããŧã¸ã§ãŗ `1`**ãĢäžåããĻããžããããŽããã `harry` īŧããĒãŧīŧãã¤ãŗãšããŧãĢããåŋ
čĻããããžãã
+
+```mermaid
+flowchart LR
+ stone(philosophers-stone) -->|requires| harry-1[harry v1]
+```
+
+ããããã `prisoner-of-azkaban` īŧãĸãēãĢããŗãŽåäēēīŧã¨ããåĨãŽããã¸ã§ã¯ããäŊæããã¨ããžããããŽããã¸ã§ã¯ãã `harry` īŧããĒãŧīŧãĢäžåããĻããžããã**`harry` īŧããĒãŧīŧãŽããŧã¸ã§ãŗ `3`**ãåŋ
čĻã§ãã
+
+```mermaid
+flowchart LR
+ azkaban(prisoner-of-azkaban) --> |requires| harry-3[harry v3]
+```
+
+ããããããã§åéĄãĢãĒããŽã¯ãããããŧãĢãĢãŽ**äģŽæŗį°åĸ**ã§ã¯ãĒãã°ããŧããĢīŧį°åĸīŧãĢãããąãŧã¸ãã¤ãŗãšããŧãĢãããĒãã `harry` īŧããĒãŧīŧãŽãŠãŽããŧã¸ã§ãŗãã¤ãŗãšããŧãĢãããé¸ã°ãĒãã¨ãããĒããã¨ã§ãã
+
+äžãã°ã `philosophers-stone` īŧčŗĸč
ãŽįŗīŧãåŽčĄãããĢã¯ããžã `harry` īŧããĒãŧīŧãŽããŧã¸ã§ãŗ `1` ãã¤ãŗãšããŧãĢããåŋ
čĻããããžãīŧ
+
+
+
+```console
+$ pip install "harry==1"
+```
+
+
+
+ãããĢããã`harry` īŧããĒãŧīŧããŧã¸ã§ãŗ1ãã°ããŧããĢãĒPythonį°åĸãĢã¤ãŗãšããŧãĢãããžãã
+
+```mermaid
+flowchart LR
+ subgraph global[global env]
+ harry-1[harry v1]
+ end
+ subgraph stone-project[philosophers-stone project]
+ stone(philosophers-stone) -->|requires| harry-1
+ end
+```
+
+ãããã `prisoner-of-azkaban` īŧãĸãēãĢããŗãŽåäēēīŧãåŽčĄãããå ´åã¯ã`harry` īŧããĒãŧīŧãŽããŧã¸ã§ãŗ `1` ããĸãŗã¤ãŗãšããŧãĢãã`harry` īŧããĒãŧīŧãŽããŧã¸ã§ãŗ `3` ãã¤ãŗãšããŧãĢãį´ãåŋ
čĻããããžããīŧãããã¯ãåãĢ`harry` īŧããĒãŧīŧãŽããŧã¸ã§ãŗ `3` ãã¤ãŗãšããŧãĢãããã¨ã§ãčĒåįãĢããŧã¸ã§ãŗ `1` ããĸãŗã¤ãŗãšããŧãĢãããžãīŧ
+
+
+
+```console
+$ pip install "harry==3"
+```
+
+
+
+ããŽãããĢããĻãã°ããŧããĢį°åĸã¸ãŽ `harry` īŧããĒãŧīŧãŽããŧã¸ã§ãŗ `3` ãŽã¤ãŗãšããŧãĢãåŽäēããžãã
+
+ããããã `philosophers-stone` īŧčŗĸč
ãŽįŗīŧãåãŗåŽčĄãããã¨ããã¨ãããŽããã°ãŠã 㯠`harry` īŧããĒãŧīŧãŽããŧã¸ã§ãŗ `1` ãåŋ
čĻãĒããã**åäŊããĒããĒã**å¯čŊæ§ããããžãã
+
+```mermaid
+flowchart LR
+ subgraph global[global env]
+ harry-1[harry v1 ]
+ style harry-1 fill:#ccc,stroke-dasharray: 5 5
+ harry-3[harry v3]
+ end
+ subgraph stone-project[philosophers-stone project]
+ stone(philosophers-stone) -.-x|âī¸| harry-1
+ end
+ subgraph azkaban-project[prisoner-of-azkaban project]
+ azkaban(prisoner-of-azkaban) --> |requires| harry-3
+ end
+```
+
+/// tip | čąįĨč
+
+PythonãŽãããąãŧã¸ã§ã¯ã**æ°ããããŧã¸ã§ãŗ**ã§**äēææ§ãæãĒã夿´ãéŋãã**ããåĒãããŽãä¸čŦįã§ãããããã§ãæŗ¨æãåŋ
čĻã§ããããšãĻãæŖå¸¸ãĢåäŊãããã¨ãããšãã§įĸēčĒããĻãããæåŗįãĢæåŽããĻæ°ããããŧã¸ã§ãŗãã¤ãŗãšããŧãĢãããŽãč¯ãã§ãããã
+
+///
+
+ããĒããŽããšãĻãŽ**ããã¸ã§ã¯ããäžåããĻãã**ã**夿°ãŽ**äģãŽ**ãããąãŧã¸**ãä¸č¨ãŽåéĄãæąããĻããã¨æŗåããĻãã ãããããã¯įŽĄįãé常ãĢå°éŖã§ãããããĻã**äēææ§ãŽãĒãããŧã¸ã§ãŗ**ãŽãããąãŧã¸ãäŊŋãŖãĻããã¸ã§ã¯ããåŽčĄãããĒãåäŊããĒããŽãåãããĒããĒãã§ãããã
+
+ãžããäŊŋį¨ããĻããOSīŧLinuxãWindowsãmacOS ãĒãŠīŧãĢããŖãĻã¯ãPythonããã§ãĢã¤ãŗãšããŧãĢãããĻãããã¨ããããžããããŽå ´åãįšåŽãŽããŧã¸ã§ãŗãŽãããąãŧã¸ã**OSãŽåäŊãĢåŋ
čĻã§ãã**ãã¨ããããžããã°ããŧããĢį°åĸãĢãããąãŧã¸ãã¤ãŗãšããŧãĢããã¨ãOSãĢäģåąããããã°ãŠã ã**åŖããĻããžã**å¯čŊæ§ããããžãã
+
+## ãããąãŧã¸ãŽã¤ãŗãšããŧãĢå
+
+Pythonãã¤ãŗãšããŧãĢããã¨ããããĄã¤ãĢãåĢãã ããã¤ããŽããŖãŦã¯ããĒãäŊæãããžãã
+
+ããããŽä¸ãĢã¯ãã¤ãŗãšããŧãĢããããããąãŧã¸ãäŋåãããããŽããŽããããžãã
+
+äģĨä¸ãŽãŗããŗããåŽčĄããã¨ãīŧ
+
+
+
+```console
+// Don't run this now, it's just an example đ¤
+$ pip install "fastapi[standard]"
+---> 100%
+```
+
+
+
+FastAPIãŽãŗãŧããåĢãå§į¸ŽããĄã¤ãĢããé常㯠[PyPI](https://pypi.org/project/fastapi/) ããããĻãŗããŧããããžãã
+
+ãžããFastAPIãäžåããäģãŽãããąãŧã¸ã**ããĻãŗããŧã**ãããžãã
+
+ãããããããããŽããĄã¤ãĢã¯**č§Ŗå**ããããŗãŗããĨãŧãŋãŽããããŖãŦã¯ããĒãĢé
įŊŽãããžãã
+
+ãããŠãĢãã§ã¯ãããããŽããĄã¤ãĢã¯PythonãŽã¤ãŗãšããŧãĢæãĢäŊæãããããŖãŦã¯ããĒãã¤ãžã**ã°ããŧããĢį°åĸ**ãĢé
įŊŽãããžãã
+
+## äģŽæŗį°åĸã¨ã¯
+
+ããšãĻãŽãããąãŧã¸ãã°ããŧããĢį°åĸãĢé
įŊŽãããã¨ãĢããŖãĻįããåéĄãŽč§Ŗæąēįã¯ãäŊæĨãã**ããã¸ã§ã¯ããã¨ãŽäģŽæŗį°åĸ**ãäŊŋį¨ãããã¨ã§ãã
+
+äģŽæŗį°åĸã¯**ããŖãŦã¯ããĒ**ã§ãããã°ããŧããĢį°åĸã¨é常ãĢäŧŧãĻããĻãä¸ã¤ãŽããã¸ã§ã¯ãã§äŊŋãįšåŽãŽãããąãŧã¸įž¤ãã¤ãŗãšããŧãĢã§ããå ´æã§ãã
+
+ããŽãããĢããĻããããããŽããã¸ã§ã¯ããįŦčĒãŽäģŽæŗį°åĸīŧ`.venv` ããŖãŦã¯ããĒīŧãĢįŦčĒãŽãããąãŧã¸įž¤ãæã¤ãã¨ãã§ããžãã
+
+```mermaid
+flowchart TB
+ subgraph stone-project[philosophers-stone project]
+ stone(philosophers-stone) --->|requires| harry-1
+ subgraph venv1[.venv]
+ harry-1[harry v1]
+ end
+ end
+ subgraph azkaban-project[prisoner-of-azkaban project]
+ azkaban(prisoner-of-azkaban) --->|requires| harry-3
+ subgraph venv2[.venv]
+ harry-3[harry v3]
+ end
+ end
+ stone-project ~~~ azkaban-project
+```
+
+## äģŽæŗį°åĸãŽæåšåã¨ã¯
+
+äģŽæŗį°åĸãæåšãĢããã¨ããäžãã°æŦĄãŽãŗããŗããåŽčĄããå ´åãčããžãīŧ
+
+//// tab | Linux, macOS
+
+
+
+```console
+$ source .venv/bin/activate
+```
+
+
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+```console
+$ .venv\Scripts\Activate.ps1
+```
+
+
+
+////
+
+//// tab | Windows Bash
+
+ãããã¯ãWindowsã§BashãäŊŋį¨ããĻããå ´å (Git Bash ãĒãŠ):
+
+
+
+```console
+$ source .venv/Scripts/activate
+```
+
+
+
+////
+
+ãããĢããŖãĻãããã¤ã㎠[į°åĸ夿°](environment-variables.md){.internal-link target=_blank} ãäŊæãģäŋŽæŖãããæŦĄãĢåŽčĄããããŗããŗãã§äŊŋį¨ã§ãããããĢãĒããžãã
+
+ããããŽį°åĸ夿°ãŽã˛ã¨ã¤ãĢã `PATH` 夿°ããããžãã
+
+/// tip | čąįĨč
+
+`PATH` 夿°ãĢã¤ããĻãŽčŠŗį´°ã¯ [į°åĸ夿°](environment-variables.md#pathį°åĸ夿°){.internal-link target=_blank} ãåį
§ããĻãã ããã
+
+///
+
+äģŽæŗį°åĸãæåšãĢããã¨ãããŽäģŽæŗį°åĸãŽããš `.venv/bin` īŧLinuxã¨macOSīŧãããã㯠`.venv\Scripts` īŧWindowsīŧã `PATH` 夿°ãĢčŋŊå ãããžãã
+
+ããŽį°åĸãæåšãĢããå㎠`PATH` 夿°ãæŦĄãŽãããĢãĒãŖãĻããã¨ããžãã
+
+//// tab | Linux, macOS
+
+```plaintext
+/usr/bin:/bin:/usr/sbin:/sbin
+```
+
+ããã¯ãOSãäģĨä¸ãŽããŖãŦã¯ããĒä¸ã§ããã°ãŠã ãæĸããã¨ãæåŗããžãīŧ
+
+* `/usr/bin`
+* `/bin`
+* `/usr/sbin`
+* `/sbin`
+
+////
+
+//// tab | Windows
+
+```plaintext
+C:\Windows\System32
+```
+
+ããã¯ãOSãäģĨä¸ãŽããŖãŦã¯ããĒä¸ã§ããã°ãŠã ãæĸããã¨ãæåŗããžãīŧ
+
+* `C:\Windows\System32`
+
+////
+
+äģŽæŗį°åĸãæåšãĢããã¨ã `PATH` 夿°ã¯æŦĄãŽãããĢãĒããžãã
+
+//// tab | Linux, macOS
+
+```plaintext
+/home/user/code/awesome-project/.venv/bin:/usr/bin:/bin:/usr/sbin:/sbin
+```
+
+ããã¯ãOSãäģãŽããŖãŦã¯ããĒãæĸãããåãĢãæåãĢäģĨä¸ãŽããŖãŦã¯ããĒä¸ã§ããã°ãŠã ãæĸãå§ãããã¨ãæåŗããžãīŧ
+
+```plaintext
+/home/user/code/awesome-project/.venv/bin
+```
+
+ããŽããããŋãŧãããĢã§ `python` ã¨å
ĨåããéãĢãOSã¯Pythonããã°ãŠã ãäģĨä¸ãŽããšã§įēčĻããäŊŋį¨ããžãã
+
+```plaintext
+/home/user/code/awesome-project/.venv/bin/python
+```
+
+////
+
+//// tab | Windows
+
+```plaintext
+C:\Users\user\code\awesome-project\.venv\Scripts;C:\Windows\System32
+```
+
+ããã¯ãOSãäģãŽããŖãŦã¯ããĒãæĸãããåãĢãæåãĢäģĨä¸ãŽããŖãŦã¯ããĒä¸ã§ããã°ãŠã ãæĸãå§ãããã¨ãæåŗããžãīŧ
+
+```plaintext
+C:\Users\user\code\awesome-project\.venv\Scripts
+```
+
+ããŽããããŋãŧãããĢã§ `python` ã¨å
ĨåããéãĢãOSã¯Pythonããã°ãŠã ãäģĨä¸ãŽããšã§įēčĻããäŊŋį¨ããžãã
+
+```plaintext
+C:\Users\user\code\awesome-project\.venv\Scripts\python
+```
+
+////
+
+éčĻãĒįšã¯ãäģŽæŗį°åĸãŽããšã `PATH` 夿°ãŽ**å
é **ãĢé
įŊŽãããã¨ã§ããOSã¯åŠį¨å¯čŊãĒäģãŽPythonãčĻã¤ãããã**åãĢ**ãããŽäģŽæŗį°åĸãŽPythonãčĻã¤ãããããĢãĒããžããããŽãããĢããĻã `python` ãåŽčĄããã¨ããĢãäģ㎠`python` īŧäžãã°ã°ããŧããĢį°åĸ㎠`python` īŧã§ã¯ãĒãã**ããŽäģŽæŗį°åĸãŽ**PythonãäŊŋį¨ãããããĢãĒããžãã
+
+äģŽæŗį°åĸãæåšãĢããĻ夿´ããããã¨ã¯äģãĢããããžããããããæãéčĻãĒ夿´ãŽã˛ã¨ã¤ã§ãã
+
+## äģŽæŗį°åĸãŽįĸēčĒ
+
+äģŽæŗį°åĸãæåšããŠãããäžãã°æŦĄãŽãããĢįĸēčĒã§ããžããīŧ
+
+//// tab | Linux, macOS, Windows Bash
+
+
+
+```console
+$ which python
+
+/home/user/code/awesome-project/.venv/bin/python
+```
+
+
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+```console
+$ Get-Command python
+
+C:\Users\user\code\awesome-project\.venv\Scripts\python
+```
+
+
+
+////
+
+ããã¯ãäŊŋį¨ããã `python` ããã°ãŠã ã**ããŽäģŽæŗį°åĸãŽ**ããŽã§ãããã¨ãæåŗããžãã
+
+LinuxãmacOSã§ã¯ `which` ããWindows PowerShellã§ã¯ `Get-Command` ãäŊŋį¨ããžãã
+
+ããŽãŗããŗããŽåäŊã¯ã `PATH`夿°ãĢč¨åŽããã**ãããããŽããšãé ãĢ**įĸēčĒããĻãããåŧã°ããĻãã `python` ããã°ãŠã ãæĸããžãããããĻãčĻã¤ããæŦĄįŦŦããŽããã°ãŠã ã¸ãŽ**ããšã襨į¤ēããžã**ã
+
+æãéčĻãĒãã¨ã¯ã `python` ãåŧã°ããã¨ããĢããžããĢããŽãŗããŗãã§įĸēčĒãã "`python`" ãåŽčĄããããã¨ã§ãã
+
+ããããĻãčĒåãæŗåŽéããŽäģŽæŗį°åĸãĢããããįĸēčĒã§ããžãã
+
+/// tip | čąįĨč
+
+ããäģŽæŗį°åĸãæåšãĢããããŽPythonãäŊŋį¨ãããžãž**äģãŽããã¸ã§ã¯ããĢį§ģåããĻ**ããžããã¨ã¯į°ĄåãĢčĩˇããåžãžãã
+
+ãããĻãããŽįŦŦäēãŽããã¸ã§ã¯ãã¯åäŊããĒãã§ãããããĒããĒãåĨãŽããã¸ã§ã¯ããŽäģŽæŗį°åĸãŽ**čǤãŖãPython**ãäŊŋį¨ããĻããããã§ãã
+
+ããŽããããŠãŽ `python` ãäŊŋį¨ãããĻãããŽãįĸēčĒã§ãããã¨ã¯åŊšįĢãĄãžããđ¤
+
+///
+
+## ãĒãäģŽæŗį°åĸãįĄåšåãããŽã
+
+äžãã°ã`philosophers-stone` īŧčŗĸč
ãŽįŗīŧã¨ããããã¸ã§ã¯ãã§äŊæĨãããĻããĻã**ããŽäģŽæŗį°åĸãæåšãĢã**ãåŋ
čĻãĒãããąãŧã¸ãã¤ãŗãšããŧãĢããĻããŽį°åĸå
ã§äŊæĨãé˛ããĻããã¨ããžãã
+
+ããããã**åĨãŽããã¸ã§ã¯ã**ã `prisoner-of-azkaban` īŧãĸãēãĢããŗãŽåäēēīŧãĢåãæãããã¨ããžãã
+
+ããŽããã¸ã§ã¯ãããŖãŦã¯ããĒã¸į§ģåããžãīŧ
+
+
+
+```console
+$ cd ~/code/prisoner-of-azkaban
+```
+
+
+
+ãã `philosophers-stone` īŧčŗĸč
ãŽįŗīŧãŽäģŽæŗį°åĸãįĄåšåããĻããĒãã¨ã`python` ãåŽčĄããã¨ãã ãŋãŧãããĢ㯠`philosophers-stone` īŧčŗĸč
ãŽįŗīŧãŽPythonãäŊŋį¨ãããã¨ããžãã
+
+
+
+```console
+$ cd ~/code/prisoner-of-azkaban
+
+$ python main.py
+
+// Error importing sirius, it's not installed đą
+Traceback (most recent call last):
+ File "main.py", line 1, in
+ import sirius
+```
+
+
+
+ããããããŽäģŽæŗį°åĸãįĄåšåãã `prisoner-of-azkaban` īŧãĸãēãĢããŗãŽåäēēīŧãŽãããŽæ°ããäģŽæŗį°åĸãæåšãĢããã°ã `python` ãåŽčĄããã¨ããĢ `prisoner-of-azkaban` īŧãĸãēãĢããŗãŽåäēēīŧãŽäģŽæŗį°åĸ㎠Python ãäŊŋį¨ããããããĢãĒããžãã
+
+
+
+```console
+$ cd ~/code/prisoner-of-azkaban
+
+// You don't need to be in the old directory to deactivate, you can do it wherever you are, even after going to the other project đ
+$ deactivate
+
+// Activate the virtual environment in prisoner-of-azkaban/.venv đ
+$ source .venv/bin/activate
+
+// Now when you run python, it will find the package sirius installed in this virtual environment â¨
+$ python main.py
+
+I solemnly swear đē
+```
+
+
+
+## äģŖæŋææŽĩ
+
+ããã¯ãããããäģįĩãŋã**æ šæŦãã**åĻãļãããŽãˇãŗããĢãĒå
ĨéãŦã¤ãã§ãã
+
+äģŽæŗį°åĸããããąãŧã¸ãŽäžåéĸäŋīŧrequirementsīŧãããã¸ã§ã¯ããŽįŽĄįãĢã¯ãå¤ããŽ**äģŖæŋææŽĩ**ããããžãã
+
+æēåãæ´ãããããąãŧã¸ãŽäžåéĸäŋãäģŽæŗį°åĸãĒãŠ**ããã¸ã§ã¯ãå
¨äŊãŽįŽĄį**ããŧãĢãäŊŋãããã¨čããããuv ãčŠĻããĻãŋããã¨ãããããããžãã
+
+`uv` ã§ã¯äģĨä¸ãŽãããĒå¤ããŽãã¨ãã§ããžãīŧ
+
+* į°ãĒãããŧã¸ã§ãŗãåĢãã**Python ãŽã¤ãŗãšããŧãĢ**
+* ããã¸ã§ã¯ããã¨ãŽ**äģŽæŗį°åĸ**ãŽįŽĄį
+* **ãããąãŧã¸**ãŽã¤ãŗãšããŧãĢ
+* ããã¸ã§ã¯ããŽãããąãŧã¸ãŽ**äžåéĸäŋãããŧã¸ã§ãŗ**ãŽįŽĄį
+* ãããąãŧã¸ã¨ããŽããŧã¸ã§ãŗãŽãäžåéĸäŋãåĢãã**åŗå¯ãĒ**įĩãŋåãããäŋæãããããĢããŖãĻãæŦįĒį°åĸã§ãéįēį°åĸã¨å
¨ãåããããĢããã¸ã§ã¯ããåŽčĄã§ããīŧããã¯**locking**ã¨åŧã°ããžãīŧ
+* ããŽäģãŽããžããžãĒæŠčŊ
+
+## ãžã¨ã
+
+ãããžã§čĒãŋããšãĻįč§ŖãããĒããä¸éãŽå¤ããŽéįēč
ã¨æ¯ãšãĻãäģŽæŗį°åĸãĢã¤ããĻ**ããĒãã¯ããå¤ããŽãã¨ãįĨãŖãĻããžã**ãđ¤
+
+ããããŽčŠŗį´°ãįĨããã¨ã¯ãå°æĨãč¤éãĢčĻããäŊããŽãããã°ãĢããŖã¨åŊšįĢã¤ã§ããããããããããŽé ãĢã¯ãããĒãã¯**ããŽããšãĻãŽåäŊãæ šæŦãã**įč§ŖããĻããã§ããããđ
diff --git a/docs/ko/docs/advanced/events.md b/docs/ko/docs/advanced/events.md
index ae349e7be..5f8fe0f1e 100644
--- a/docs/ko/docs/advanced/events.md
+++ b/docs/ko/docs/advanced/events.md
@@ -1,53 +1,165 @@
-# ė´ë˛¤í¸: startupęŗŧ shutdown
+# Lifespan ė´ë˛¤í¸
-íėė ë°ëŧ ėėŠ íëĄęˇ¸ë¨ė´ ėėë기 ė ė´ë ėĸ
ëŖë ë ė¤íëë ė´ë˛¤í¸ í¸ë¤ëŦ(í¨ė)ëĨŧ ė ėí ė ėėĩëë¤.
+ė íëĻŦėŧė´ė
**ėė ė **ė ė¤íëė´ėŧ íë ëĄė§(ėŊë)ė ė ėí ė ėėĩëë¤. ė´ë ė´ ėŊëę° **í ë˛**ë§ ė¤íë늰, **ė íëĻŦėŧė´ė
ė´ ėė˛ė ë°ę¸° ėėí기 ė **ė ė¤íëë¤ë ė미ė
ëë¤.
-ė´ í¨ėë¤ė `async def` ëë íë˛íę˛ `def`ėŧëĄ ė ė¸í ė ėėĩëë¤.
+ë§ė°Ŧę°ė§ëĄ, ė íëĻŦėŧė´ė
ė´ **ėĸ
ëŖë ë** ė¤íëė´ėŧ íë ëĄė§(ėŊë)ė ė ėí ė ėėĩëë¤. ė´ ę˛Ŋė°, ė´ ėŊëë **í ë˛**ë§ ė¤íë늰, **ėŦëŦ ėė˛ė ė˛ëĻŦí í**ė ė¤íëŠëë¤.
+
+ė´ ėŊëę° ė íëĻŦėŧė´ė
ė´ **ėė˛ė ë°ę¸° ėėí기 ė ė** ė¤íëęŗ , ėė˛ ė˛ëĻŦę° ëë í **ėĸ
ëŖ ė§ė ė** ė¤íë기 ëëŦ¸ė ė 랴 ė íëĻŦėŧė´ė
ė **ėëĒ
(Lifespan)**ė ë¤ëŖšëë¤. (ė ė í "ėëĒ
"ė´ëŧë ë¨ė´ę° ė¤ėí´ė§ëë¤ đ)
+
+ė´ ë°Šë˛ė ė 랴 ė íëĻŦėŧė´ė
ėė ėŦėŠí´ėŧ íë **ėė**ė ė¤ė íęą°ë ėė˛ ę°ė **ęŗĩė ëë** ėėė ė¤ė íęŗ , ëë ꡸ íė **ė ëĻŦ**íë ë° ë§¤ė° ė ėŠí ė ėėĩëë¤. ėëĨŧ ë¤ė´, ë°ė´í°ë˛ ė´ė¤ ė°ę˛° í ëë ęŗĩė ëë 머ė ëŦë ëǍë¸ė ëĄëíë ę˛Ŋė°ė
ëë¤.
+
+
+## ėŦėŠ ėŦëĄ
+
+ë¨ŧė **ėŦėŠ ėŦëĄ**ëĨŧ ėëĄ ë¤ė´ëŗ´ęŗ , ė´ëĨŧ ė´ëģę˛ í´ę˛°í ė ėëė§ ė´í´ëŗ´ę˛ ėĩëë¤.
+
+ė°ëĻŦę° ėė˛ė ė˛ëĻŦí기 ėí´ ėŦėŠíęŗ ėļė **머ė ëŦë ëǍë¸**ė´ ėë¤ęŗ ėėí´ ë´
ėë¤. đ¤
+
+ė´ ëǍë¸ë¤ė ėė˛ ę°ė ęŗĩė ëë¯ëĄ, ėė˛ë§ë¤ ëǍë¸ė´ íëėŠ ėë ę˛ė´ ėëëŧ, ėŦëŦ ėė˛ėė ëėŧí ëǍë¸ė ėŦėŠíŠëë¤.
+
+ëǍë¸ė ëĄëíë ë° **ėëší ėę°ė´ 깸ëϰë¤ęŗ ėėí´ ë´
ėë¤**, ėëí늴 ëǍë¸ė´ **ëė¤íŦėė ë§ė ë°ė´í°ëĨŧ ėŊė´ėŧ** í기 ëëŦ¸ė
ëë¤. ë°ëŧė ëǍë ėė˛ė ëí´ ëǍë¸ė ë§¤ë˛ ëĄëíęŗ ėļė§ ėėĩëë¤.
+
+ëǍë/íėŧė ėĩėėėė ëǍë¸ė ëĄëí ėë ėė§ë§, ꡸ëŦ늴 **ëǍë¸ė ëĄëíëë°** ėę°ė´ 깸ëĻŦ기 ëëŦ¸ė, ë¨ėí ėëíë í
ė¤í¸ëĨŧ ė¤íí ëë ëǍë¸ė´ ëĄëë ëęšė§ 기ë¤ë ¤ėŧ í´ė **í
ė¤í¸ ėëę° ëë ¤ė§ëë¤**.
+
+ė´ ëŦ¸ė ëĨŧ í´ę˛°íë ¤ęŗ íë ę˛ė
ëë¤. ėė˛ė ė˛ëĻŦí기 ė ė ëǍë¸ė ëĄëíë, ė íëĻŦėŧė´ė
ė´ ėė˛ė ë°ę¸° ėėí기 ė§ė ėë§ ëĄëíęŗ , ėŊëę° ëĄëëë ëėė ëĄëíė§ ėëëĄ íę˛ ėĩëë¤.
+
+## Lifespan
+
+`FastAPI` ė íëĻŦėŧė´ė
ė `lifespan` 매ę°ëŗėė "ėģ¨í
ė¤í¸ 매ëė "ëĨŧ ėŦėŠíėŦ *ėė*ęŗŧ *ėĸ
ëŖ* ëĄė§ė ė ėí ė ėėĩëë¤. (ėģ¨í
ė¤í¸ 매ëė ę° ëŦ´ėė¸ė§ ė ė íė ė¤ëĒ
ëëĻŦę˛ ėĩëë¤.)
+
+ėė ëĨŧ íĩí´ ėėíęŗ , ꡸ íė ėė¸í ė´í´ëŗ´ę˛ ėĩëë¤.
+
+ė°ëĻŦë `yield`ëĨŧ ėŦėŠíėŦ ëšë기 í¨ė `lifespan()`ė ë¤ėęŗŧ ę°ė´ ėėąíŠëë¤:
+
+{* ../../docs_src/events/tutorial003.py hl[16,19] *}
+
+ėŦ기ė ė°ëĻŦë ëǍë¸ė ëĄëíë ëšėŧ *ėė* ėė
ė ėëŽŦë ė´ė
íęŗ ėėĩëë¤. `yield` ėėė (ę°ė§) ëĒ¨ë¸ í¨ėëĨŧ 머ė ëŦë ëǍë¸ė´ ë´ę¸´ ëė
ëëĻŦė ëŖėĩëë¤. ė´ ėŊëë **ė íëĻŦėŧė´ė
ė´ ėė˛ė ë°ę¸° ėėí기 ė **, *ėė* ëėė ė¤íëŠëë¤.
+
+꡸ëĻŦęŗ `yield` ė§íėë ëǍë¸ė ė¸ëĄëíŠëë¤. ė´ ėŊëë **ė íëĻŦėŧė´ė
ė´ ėė˛ ė˛ëĻŦ ėëŖ í**, *ėĸ
ëŖ* ė§ė ė ė¤íëŠëë¤. ėëĨŧ ë¤ė´, ëŠëǍëĻŦë GPUė ę°ė ėėė í´ė íë ėė
ė í ė ėėĩëë¤.
+
+/// tip | í
+
+`shutdown`ė ė íëĻŦėŧė´ė
ė **ėĸ
ëŖ**í ë ë°ėíŠëë¤.
+
+ėëĄė´ ë˛ė ė ėėí´ėŧ íęą°ë, ꡸ëĨ ė¤íė ëŠėļęŗ ėļė ėë ėėĩëë¤. đ¤ˇ
+
+///
+
+### Lifespan í¨ė
+
+ë¨ŧė ėŖŧëĒŠí ė ė, `yield`ëĨŧ ėŦėŠíėŦ ëšë기 í¨ė(async function)ëĨŧ ė ėíęŗ ėë¤ë ę˛ė
ëë¤. ė´ë `yield`ëĨŧ ėŦėŠí ėėĄ´ėąęŗŧ ë§¤ė° ė ėŦíŠëë¤.
+
+{* ../../docs_src/events/tutorial003.py hl[14:19] *}
+
+í¨ėė ė˛Ģ ë˛ė§¸ ëļëļ, ėĻ `yield` ė´ė ė ėŊëë ė íëĻŦėŧė´ė
ė´ ėėë기 **ė ė** ė¤íëŠëë¤.
+
+꡸ëĻŦęŗ `yield` ė´íė ëļëļė ė íëĻŦėŧė´ė
ė´ ėëŖë í **ëė¤ė** ė¤íëŠëë¤.
+
+### ëšë기 ėģ¨í
ė¤í¸ 매ëė
+
+í¨ėëĨŧ íė¸í´ëŗ´ëŠ´, `@asynccontextmanager`ëĄ ėĨėëė´ ėėĩëë¤.
+
+ė´ę˛ė í¨ėëĨŧ "**ëšë기 ėģ¨í
ė¤í¸ 매ëė **"ëŧęŗ ëļëĻŦë ę˛ėŧëĄ ëŗíėíĩëë¤.
+
+{* ../../docs_src/events/tutorial003.py hl[1,13] *}
+
+íė´ėŦėė **ėģ¨í
ė¤í¸ 매ëė **ë `with` ëŦ¸ėė ėŦėŠí ė ėë ę˛ė
ëë¤. ėëĨŧ ë¤ė´, `open()`ė ėģ¨í
ė¤í¸ 매ëė ëĄ ėŦėŠí ė ėėĩëë¤:
+
+```Python
+with open("file.txt") as file:
+ file.read()
+```
+ėĩęˇŧ ë˛ė ė íė´ėŦėėë **ëšë기 ėģ¨í
ė¤í¸ 매ëė **ë ėėĩëë¤. ė´ëĨŧ `async with`ė í¨ęģ ėŦėŠíŠëë¤:
+
+```Python
+async with lifespan(app):
+ await do_stuff()
+```
+
+ėģ¨í
ė¤í¸ 매ëė ë ėė ę°ė ëšë기 ėģ¨í
ė¤í¸ 매ëė ëĨŧ ë§ë¤ëŠ´, `with` ë¸ëĄė ë¤ė´ę°ę¸° ė ė `yield` ė´ė ė ėŊëę° ė¤íëęŗ , `with` ë¸ëĄė ë˛ė´ë íėë `yield` ė´íė ėŊëę° ė¤íëŠëë¤.
+
+ėė ėŊë ėė ėėë ė§ė ėŦėŠíė§ ėęŗ , FastAPIė ė ëŦíėŦ ėŦėŠíëëĄ íŠëë¤.
+
+`FastAPI` ė íëĻŦėŧė´ė
ė `lifespan` 매ę°ëŗėë **ëšë기 ėģ¨í
ė¤í¸ 매ëė **ëĨŧ ë°ę¸° ëëŦ¸ė, ėëĄė´ `lifespan` ëšë기 ėģ¨í
ė¤í¸ 매ëė ëĨŧ FastAPIė ė ëŦí ė ėėĩëë¤.
+
+{* ../../docs_src/events/tutorial003.py hl[22] *}
+
+## ë랴 ė´ë˛¤í¸ (ėŦėŠ ė¤ë¨)
/// warning | ę˛Ŋęŗ
-ė´ë˛¤í¸ í¸ë¤ëŦë ėŖŧ ėėŠ íëĄęˇ¸ë¨ėėë§ ėëíŠëë¤. [íė ėėŠ íëĄęˇ¸ë¨ - ë§ė´í¸](./sub-applications.md){.internal-link target=_blank}ėėë ėëíė§ ėėĩëë¤.
+*ėė*ęŗŧ *ėĸ
ëŖ*ëĨŧ ė˛ëĻŦíë ęļėĨ ë°Šë˛ė ėėė ė¤ëĒ
í ëëĄ `FastAPI` ė íëĻŦėŧė´ė
ė `lifespan` 매ę°ëŗėëĨŧ ėŦėŠíë ę˛ė
ëë¤. `lifespan` 매ę°ëŗėëĨŧ ė ęŗĩí늴 `startup`ęŗŧ `shutdown` ė´ë˛¤í¸ í¸ë¤ëŦë ë ė´ė í¸ėļëė§ ėėĩëë¤. `lifespan`ė ėŦėŠí ė§, ëǍë ė´ë˛¤í¸ëĨŧ ėŦėŠí ė§ ė íí´ėŧ í늰 ë ë¤ ėŦėŠí ėë ėėĩëë¤.
+
+ė´ ëļëļė ęą´ëë°ė
ë ėĸėĩëë¤.
///
-## `startup` ė´ë˛¤í¸
+*ėė*ęŗŧ *ėĸ
ëŖ* ëė ė¤íë ė´ ëĄė§ė ė ėíë ë랴 ë°Šë˛ė´ ėėĩëë¤.
+
+ė íëĻŦėŧė´ė
ė´ ėėë기 ė ė ëë ėĸ
ëŖë ë ė¤íí´ėŧ íë ė´ë˛¤í¸ í¸ë¤ëŦ(í¨ė)ëĨŧ ė ėí ė ėėĩëë¤.
-ėėŠ íëĄęˇ¸ë¨ė ėėí기 ė ė ė¤ííë ¤ë í¨ėëĨŧ "startup" ė´ë˛¤í¸ëĄ ė ė¸íŠëë¤:
+ė´ í¨ėë¤ė `async def` ëë ėŧë° `def`ëĄ ė ė¸í ė ėėĩëë¤.
+
+### `startup` ė´ë˛¤í¸
+
+ė íëĻŦėŧė´ė
ė´ ėėë기 ė ė ė¤íëė´ėŧ íë í¨ėëĨŧ ėļę°íë ¤ëŠ´, `"startup"` ė´ë˛¤í¸ëĄ ė ė¸íŠëë¤:
{* ../../docs_src/events/tutorial001.py hl[8] *}
-ė´ ę˛Ŋė° `startup` ė´ë˛¤í¸ í¸ë¤ëŦ í¨ėë ë¨ėí ëĒ ę°ė§ ę°ėŧëĄ ęĩŦėąë `dict` íėė "ë°ė´í°ë˛ ė´ė¤"ëĨŧ ė´ę¸°ííŠëë¤.
+ė´ ę˛Ŋė°, `startup` ė´ë˛¤í¸ í¸ë¤ëŦ í¨ėë "database"ëŧë íëĒŠ(ë¨ė§ `dict`)ė ėŧëļ ę°ėŧëĄ ė´ę¸°ííŠëë¤.
-íë ė´ėė ė´ë˛¤í¸ í¸ë¤ëŦ í¨ėëĨŧ ėļę°í ėë ėėĩëë¤.
+ėŦëŦ ę°ė ė´ë˛¤í¸ í¸ë¤ëŦ í¨ėëĨŧ ėļę°í ė ėėĩëë¤.
-꡸ëĻŦęŗ ėėŠ íëĄęˇ¸ë¨ė ëǍë `startup` ė´ë˛¤í¸ í¸ë¤ëŦę° ėëŖë ëęšė§ ėė˛ė ë°ė§ ėėĩëë¤.
+ė íëĻŦėŧė´ė
ė ëǍë `startup` ė´ë˛¤í¸ í¸ë¤ëŦę° ėëŖë ëęšė§ ėė˛ė ë°ę¸° ėėíė§ ėėĩëë¤.
-## `shutdown` ė´ë˛¤í¸
+### `shutdown` ė´ë˛¤í¸
-ėėŠ íëĄęˇ¸ë¨ė´ ėĸ
ëŖë ë ė¤ííë ¤ë í¨ėëĨŧ ėļę°íë ¤ëŠ´ `"shutdown"` ė´ë˛¤í¸ëĄ ė ė¸íŠëë¤:
+ė íëĻŦėŧė´ė
ė´ ėĸ
ëŖë ë ė¤íëė´ėŧ íë í¨ėëĨŧ ėļę°íë ¤ëŠ´, `"shutdown"` ė´ë˛¤í¸ëĄ ė ė¸íŠëë¤:
{* ../../docs_src/events/tutorial002.py hl[6] *}
-ė´ ėė ėė `shutdown` ė´ë˛¤í¸ í¸ë¤ëŦ í¨ėë `"Application shutdown"`ė´ëŧë í
ė¤í¸ę° ė í `log.txt` íėŧė ėļę°í ę˛ė
ëë¤.
+ėŦ기ė, `shutdown` ė´ë˛¤í¸ í¸ë¤ëŦ í¨ėë `"Application shutdown"`ė´ëŧë í
ė¤í¸ëĨŧ `log.txt` íėŧė 기ëĄíŠëë¤.
/// info | ė ëŗ´
-`open()` í¨ėėė `mode="a"`ë "ėļę°"ëĨŧ ė미íŠëë¤. ë°ëŧė ė´ë¯¸ ėĄ´ėŦíë íėŧė ë´ėŠė ëŽė´ė°ė§ ėęŗ ėëĄė´ ė¤ė ėļę°íŠëë¤.
+`open()` í¨ėėė `mode="a"`ë "ėļę°"ëĨŧ ė미íë¯ëĄ, íėŧė ėë ę¸°ėĄ´ ë´ėŠė ëŽė´ė°ė§ ėęŗ ėëĄė´ ė¤ė´ ėļę°ëŠëë¤.
///
/// tip | í
-ė´ ėė ėėë íėŧęŗŧ ėí¸ėėŠ í기 ėí´ íė´ėŦ íė¤ í¨ėė¸ `open()`ė ėŦėŠíęŗ ėėĩëë¤.
+ė´ ę˛Ŋė°, ė°ëĻŦë íė¤ íė´ėŦ `open()` í¨ėëĨŧ ėŦėŠíėŦ íėŧęŗŧ ėí¸ėėŠíęŗ ėėĩëë¤.
-ë°ëŧė ëė¤íŦė ë°ė´í°ëĨŧ ė°ę¸° ėí´ "ë기"ę° íėí I/O (ė
ë Ĩ/ėļë Ĩ) ėė
ė ėííŠëë¤.
+ë°ëŧė I/O(ė
ėļë Ĩ) ėė
ė´ íŦí¨ëė´ ėė´ ëė¤íŦė 기ëĄëë ę˛ė "기ë¤ëĻŦë" ęŗŧė ė´ íėíŠëë¤.
-꡸ëŦë `open()`ė `async`ė `await`ė ėŦėŠíė§ ė기 ëëŦ¸ė ė´ë˛¤í¸ í¸ë¤ëŦ í¨ėë `async def`ę° ėë íė¤ `def`ëĄ ė ė¸íęŗ ėėĩëë¤.
+íė§ë§ `open()`ė `async`ė `await`ëĨŧ ėŦėŠíė§ ėėĩëë¤.
+
+꡸ëė ė°ëĻŦë ė´ë˛¤í¸ í¸ë¤ëŦ í¨ėëĨŧ `async def` ëė ėŧë° `def`ëĄ ė ė¸íŠëë¤.
///
+### `startup`ęŗŧ `shutdown`ė í¨ęģ ėŦėŠ
+
+*ėė*ęŗŧ *ėĸ
ëŖ* ëĄė§ė´ ė°ę˛°ë ę°ëĨėąė´ ëėĩëë¤. ėëĨŧ ë¤ė´, ëŦ´ė¸ę°ëĨŧ ėėí í ëë´ęą°ë, ėėė íëí í í´ė íë ëąė ėė
ė í ė ėėĩëë¤.
+
+ė´ëŦí ėė
ė ëŗëė í¨ėëĄ ė˛ëĻŦí늴 ėëĄ ëĄė§ė´ë ëŗėëĨŧ ęŗĩė íė§ ė기 ëëŦ¸ė ë ė´ë ¤ėė§ëë¤. ę°ë¤ė ė ė ëŗėė ė ėĨíęą°ë ëšėˇí í¸ëĻė ėŦėŠí´ėŧ í ė ėėĩëë¤.
+
+꡸ë 기 ëëŦ¸ė ėėė ė¤ëĒ
í ëëĄ `lifespan`ė ėŦėŠíë ę˛ė´ ęļėĨëŠëë¤.
+
+## 기ė ė ė¸ëļėŦí
+
+í¸ę¸°ėŦ ë§ė ëļë¤ė ėí 기ė ė ė¸ ė¸ëļėŦíė
ëë¤. đ¤
+
+ASGI 기ė ėŦėė ë°ëĨ´ëŠ´, ė´ë Lifespan Protocol ė ėŧëļė´ëа, `startup`ęŗŧ `shutdown`ė´ëŧë ė´ë˛¤í¸ëĨŧ ė ėíŠëë¤.
+
/// info | ė ëŗ´
-ė´ë˛¤í¸ í¸ë¤ëŦė ę´í ë´ėŠė Starlette ė´ë˛¤í¸ ëŦ¸ė ėė ėļę°ëĄ íė¸í ė ėėĩëë¤.
+Starletteė `lifespan` í¸ë¤ëŦė ëí´ ë ėŊęŗ ėļë¤ëŠ´ Starletteė Lifespan ëŦ¸ė ėė íė¸í ė ėėĩëë¤.
+
+ė´ ëŦ¸ėėë ėŊëė ë¤ëĨ¸ ėėėė ėŦėŠí ė ėë lifespan ėíëĨŧ ė˛ëĻŦíë ë°Šë˛ë íŦí¨ëė´ ėėĩëë¤.
///
+
+## ėë¸ ė íëĻŦėŧė´ė
+
+đ¨ ė´ lifespan ė´ë˛¤í¸(`startup`ęŗŧ `shutdown`)ë ëŠė¸ ė íëĻŦėŧė´ė
ė ëí´ėë§ ė¤íë늰, [ėë¸ ė íëĻŦėŧė´ė
- Mounts](sub-applications.md){.internal-link target=_blank}ėë ė¤íëė§ ėėė ė ėíė¸ė.
diff --git a/docs/ko/docs/advanced/sub-applications.md b/docs/ko/docs/advanced/sub-applications.md
new file mode 100644
index 000000000..c5835de15
--- /dev/null
+++ b/docs/ko/docs/advanced/sub-applications.md
@@ -0,0 +1,67 @@
+# íė ėėŠíëĄęˇ¸ë¨ - ë§ė´í¸
+
+ë§ėŊ ę°ę°ė ë
ëĻŊė ė¸ OpenAPIė ëŦ¸ė UIëĨŧ ę°ë ë ę°ė ë
ëĻŊė ė¸ FastAPI ėėŠíëĄęˇ¸ë¨ė´ íėíë¤ëŠ´, ëŠė¸ ė´íëĻŦėŧė´ė
ė íë (ëë ꡸ ė´ėė) íė-ėėŠíëĄęˇ¸ë¨(ë¤)ė âë§ė´í¸"í´ė ėŦėŠí ė ėėĩëë¤.
+
+## **FastAPI** ėėŠíëĄęˇ¸ë¨ ë§ė´í¸
+
+âë§ė´í¸"ė´ë ėė í âë
ëĻŊė ė¸" ėėŠíëĄęˇ¸ë¨ė íšė ę˛ŊëĄė ėļę°íėŦ í´ëš íė ėėŠíëĄęˇ¸ë¨ėė ė ė¸ë *ę˛ŊëĄ ëė*ė íĩí´ í´ëš ę˛ŊëĄ ėëė ėë ëǍë ėė
ë¤ė ė˛ëĻŦí ė ėëëĄ íë ę˛ė ė미íŠëë¤.
+
+### ėĩėë¨ ėėŠíëĄęˇ¸ë¨
+
+ë¨ŧė , ëŠė¸, ėĩėë¨ė **FastAPI** ėėŠíëĄęˇ¸ë¨ęŗŧ ė´ę˛ė *ę˛ŊëĄ ëė*ė ėėąíŠëë¤:
+
+{* ../../docs_src/sub_applications/tutorial001.py hl[3, 6:8] *}
+
+### íė ėėŠíëĄęˇ¸ë¨
+
+ë¤ėėŧëĄ, íė ėėŠíëĄęˇ¸ë¨ęŗŧ ė´ę˛ė *ę˛ŊëĄ ëė*ė ėėąíŠëë¤:
+
+ė´ íė ėėŠíëĄęˇ¸ë¨ė ë ë¤ëĨ¸ íė¤ FastAPI ėėŠíëĄęˇ¸ë¨ė
ëë¤. ë¤ë§ ė´ę˛ė âë§ė´í¸âë ę˛ė
ëë¤:
+
+{* ../../docs_src/sub_applications/tutorial001.py hl[11, 14:16] *}
+
+### íė ėėŠíëĄęˇ¸ë¨ ë§ė´í¸
+
+ėĩėë¨ ėėŠíëĄęˇ¸ë¨, `app`ė íė ėėŠíëĄęˇ¸ë¨, `subapi`ëĨŧ ë§ė´í¸íŠëë¤.
+
+ė´ ėėėė, íė ėėŠíëĄęˇ¸ë¨ė
ė `/subapi` ę˛ŊëĄė ë§ė´í¸ ë ę˛ė
ëë¤:
+
+{* ../../docs_src/sub_applications/tutorial001.py hl[11, 19] *}
+
+### ėëėŧëĄ ėėąë API ëŦ¸ė íė¸
+
+ė´ė , `uvicorn`ėŧëĄ ëŠė¸ ėėŠíëĄęˇ¸ë¨ė ė¤ííėėė¤. ëšė ė íėŧė´ `main.py`ëŧ늴, ė´ë ę˛ ė¤ííŠëë¤:
+
+
+
+```console
+$ uvicorn main:app --reload
+
+INFO : Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+
+
+꡸ëĻŦęŗ http://127.0.0.1:8000/docs ėė ëŦ¸ėëĨŧ ėŦėėė¤.
+
+ëŠė¸ ėėŠíëĄęˇ¸ë¨ė *ę˛ŊëĄ ëė*ë§ė íŦí¨íë, ëŠė¸ ėėŠíëĄęˇ¸ë¨ė ëí ėë API ëŦ¸ėëĨŧ íė¸í ė ėėĩëë¤:
+
+
+
+ë¤ėėŧëĄ, http://127.0.0.1:8000/subapi/docs ėė íė ėėŠíëĄęˇ¸ë¨ė ëŦ¸ėëĨŧ ėŦėėė¤.
+
+íė ę˛ŊëĄ ė ëėŦ `/subapi` ėëė ė ė¸ë *ę˛ŊëĄ ëė* ė íŦí¨íë, íė ėėŠíëĄęˇ¸ë¨ė ëí ėë API ëŦ¸ėëĨŧ íė¸í ė ėėĩëë¤:
+
+
+
+ë ėŦėŠė ė¸í°íė´ė¤ ė¤ ė´ë íëëĨŧ ėŦėŠí´ėŧíë ę˛Ŋė°, ë¸ëŧė°ė ë íšė ėėŠíëĄęˇ¸ë¨ ëë íė ėėŠíëĄęˇ¸ë¨ęŗŧ ę°ę° íĩė í ė ė기 ëëŦ¸ė ėŦë°ëĨ´ę˛ ëėí ę˛ė
ëë¤.
+
+### 기ė ė ė¸ëļėŦí: `root_path`
+
+ėė ė¤ëĒ
ë ę˛ęŗŧ ę°ė´ íė ėėŠíëĄęˇ¸ë¨ė ë§ė´í¸íë ę˛Ŋė°, FastAPIë `root_path`ëŧęŗ íë ASGI ëĒ
ė¸ė 매ėģ¤ëėĻė ėŦėŠíėŦ íė ėėŠíëĄęˇ¸ë¨ė ëí ë§ė´í¸ ę˛ŊëĄ íĩė ė ė˛ëĻŦíŠëë¤.
+
+ė´ëĨŧ íĩí´, íė ėėŠíëĄęˇ¸ë¨ė ëŦ¸ė UIëĨŧ ėí´ ę˛ŊëĄ ė ëėŦëĨŧ ėŦėŠí´ėŧ íë¤ë ėŦė¤ė ė¸ė§íŠëë¤.
+
+íė ėėŠíëĄęˇ¸ë¨ėë ėė ë¤ëĨ¸ íė ėėŠíëĄęˇ¸ë¨ė ë§ė´í¸íë ę˛ė´ ę°ëĨí늰 FastAPIę° ëǍë `root_path` ë¤ė ėëė ėŧëĄ ė˛ëĻŦí기 ëëŦ¸ė ëǍë ę˛ė ėŦë°ëĨ´ę˛ ëėí ę˛ė
ëë¤.
+
+`root_path`ė ė´ę˛ė ėŦėŠíë ë°Šë˛ė ëí´ėë [íëĄėė ëˇë¨](./behind-a-proxy.md){.internal-link target=_blank} ėšė
ėė ë°°ė¸ ė ėėĩëë¤.
diff --git a/docs/ko/docs/tutorial/extra-models.md b/docs/ko/docs/tutorial/extra-models.md
new file mode 100644
index 000000000..8e4559061
--- /dev/null
+++ b/docs/ko/docs/tutorial/extra-models.md
@@ -0,0 +1,223 @@
+# ėļę° ëǍë¸
+
+ė§ë ėė ė ė´ė´ė, ė°ę´ë ëǍë¸ė ėŦëŦę° ę°ë ę˛ė íí ėŧė
ëë¤.
+
+íší ėŦėŠė ëǍë¸ė ę˛Ŋė°ė ꡸ëŦíë°, ėëí늴:
+
+* **ė
ë Ĩ ëǍë¸** ė ëšë°ë˛í¸ëĨŧ ę°ė ¸ėŧ íŠëë¤.
+* **ėļë Ĩ ëǍë¸** ė ëšë°ë˛í¸ëĨŧ ę°ė§ëŠ´ ėëŠëë¤.
+* **ë°ė´í°ë˛ ė´ė¤ ëǍë¸** ė í´ėė˛ëĻŦë ëšë°ë˛í¸ëĨŧ ę°ė§ ę˛ė
ëë¤.
+
+/// danger | ėí
+
+ė ë ėŦėŠėė ëšë°ë˛í¸ëĨŧ íëŦ¸ėŧëĄ ė ėĨíė§ ë§ė¸ė. íė ė´íė ę˛ėĻ ę°ëĨí "ėė í í´ė(secure hash)"ëĄ ė ėĨíė¸ė.
+
+ë§ėŊ ė´ę˛ ëŦ´ėė¸ė§ ëǍëĨ´ę˛ ë¤ëŠ´, [security chapters](security/simple-oauth2.md#password-hashing){.internal-link target=_blank}.ėė ëšë°ë˛í¸ í´ėė ëí´ ë°°ė¸ ė ėėĩëë¤.
+
+///
+
+## ë¤ė¤ ëǍë¸
+
+ėëë ëšë°ë˛í¸ íëė í´ëš íëę° ėŦėŠëë ėėšëĨŧ íŦí¨íėŦ, ę° ëǍë¸ë¤ė´ ė´ë¤ ííëĨŧ ę°ė§ ė ėëė§ ė ë°ė ė¸ ėėė
ëë¤:
+
+{* ../../docs_src/extra_models/tutorial001_py310.py hl[7,9,14,20,22,27:28,31:33,38:39] *}
+
+
+/// info | ė ëŗ´
+
+Pydantic v1ėėë í´ëš ëŠėëę° `.dict()`ëĄ ëļë ¸ėŧ늰, Pydantic v2ėėë `.model_dump()`ëĄ ė´ëĻė´ ëŗę˛Ŋëėėĩëë¤. `.dict()`ë ėŦė í ė§ėëė§ë§ ë ė´ė ęļėĨëė§ ėėĩëë¤.
+
+ėŦ기ėė ėŦėŠíë ėė ë Pydantic v1ęŗŧė í¸íėąė ėí´ `.dict()`ëĨŧ ėŦėŠíė§ë§, Pydantic v2ëĨŧ ėŦėŠí ė ėë¤ëŠ´ `.model_dump()`ëĨŧ ėŦėŠíë ę˛ė´ ėĸėĩëë¤.
+
+///
+
+### `**user_in.dict()` ė ëíėŦ
+
+#### Pydanticė `.dict()`
+
+`user_in`ė Pydantic ëĒ¨ë¸ í´ëė¤ė¸ `UserIn`ė
ëë¤.
+
+Pydantic ëǍë¸ė ëĒ¨ë¸ ë°ė´í°ëĨŧ íŦí¨í `dict`ëĨŧ ë°ííë `.dict()` ëŠėëëĨŧ ė ęŗĩíŠëë¤.
+
+ë°ëŧė, ë¤ėęŗŧ ę°ė´ Pydantic ę°ė˛´ `user_in`ė ėėąí ė ėėĩëë¤:
+
+```Python
+user_in = UserIn(username="john", password="secret", email="john.doe@example.com")
+```
+
+꡸ ë¤ė, ë¤ėęŗŧ ę°ė´ í¸ėļíŠëë¤:
+
+```Python
+user_dict = user_in.dict()
+```
+
+ė´ė ëŗė `user_dict`ė ë°ė´í°ę° íŦí¨ë `dict`ëĨŧ ę°ė§ę˛ ëŠëë¤(ė´ë Pydantic ëĒ¨ë¸ ę°ė˛´ę° ėë `dict`ė
ëë¤).
+
+꡸ëĻŦęŗ ë¤ėęŗŧ ę°ė´ í¸ėļí늴:
+
+```Python
+print(user_dict)
+```
+
+Pythonė `dict`ę° ë¤ėęŗŧ ę°ė´ ėļë ĨëŠëë¤:
+
+```Python
+{
+ 'username': 'john',
+ 'password': 'secret',
+ 'email': 'john.doe@example.com',
+ 'full_name': None,
+}
+```
+
+#### `dict` ė¸í¨íš(Unpacking)
+
+`user_dict`ė ę°ė `dict`ëĨŧ í¨ė(ëë í´ëė¤)ė `**user_dict`ëĄ ė ëŦí늴, Pythonė ė´ëĨŧ "ė¸íŠ(unpack)"íŠëë¤. ė´ ęŗŧė ėė `user_dict`ė í¤ė ę°ė ę°ę° í¤-ę° ė¸ėëĄ ė§ė ė ëŦíŠëë¤.
+
+ë°ëŧė, ėėė ėėąí `user_dict`ëĨŧ ėŦėŠíėŦ ë¤ėęŗŧ ę°ė´ ėėąí늴:
+
+```Python
+UserInDB(**user_dict)
+```
+
+ë¤ėęŗŧ ę°ė 결ęŗŧëĨŧ ėėąíŠëë¤:
+
+```Python
+UserInDB(
+ username="john",
+ password="secret",
+ email="john.doe@example.com",
+ full_name=None,
+)
+```
+
+íšė ë ė íí ë§íė늴, `user_dict`ëĨŧ ė§ė ėŦėŠíë ę˛ė, ëė¤ė ė´ë¤ ę°ė´ ėļę°ëëëŧë ėëė ëėŧí í¨ęŗŧëĨŧ ë
ëë¤:
+
+```Python
+UserInDB(
+ username = user_dict["username"],
+ password = user_dict["password"],
+ email = user_dict["email"],
+ full_name = user_dict["full_name"],
+)
+```
+
+#### ë¤ëĨ¸ ëĒ¨ë¸ ë°ė´í°ëĄ ė Pydantic ëĒ¨ë¸ ėėą
+
+ėė ėė ėė `user_in.dict()`ëĄëļí° `user_dict`ëĨŧ ėėąí ę˛ė˛ëŧ, ėë ėŊëë:
+
+```Python
+user_dict = user_in.dict()
+UserInDB(**user_dict)
+```
+
+ë¤ėęŗŧ ëėŧíŠëë¤:
+
+```Python
+UserInDB(**user_in.dict())
+```
+
+...ėëí늴 `user_in.dict()`ë `dict`ė´ëа, ė´ëĨŧ `**`ëĄ Pythonė´ "ė¸íŠ(unpack)"íëëĄ íėŦ `UserInDB`ė ė ëŦí기 ëëŦ¸ė
ëë¤.
+
+ë°ëŧė, ë¤ëĨ¸ Pydantic ëǍë¸ė ë°ė´í°ëĨŧ ėŦėŠíėŦ ėëĄė´ Pydantic ëǍë¸ė ėėąí ė ėėĩëë¤.
+
+#### `dict` ė¸í¨íš(Unpacking)ęŗŧ ėļę° í¤ėë
+
+꡸ëĻŦęŗ ë¤ėęŗŧ ę°ė´ ėļę° í¤ėë ė¸ė `hashed_password=hashed_password`ëĨŧ ėļę°í늴:
+
+```Python
+UserInDB(**user_in.dict(), hashed_password=hashed_password)
+```
+
+ë¤ėęŗŧ ę°ė 결ęŗŧëĨŧ ėėąíŠëë¤:
+
+```Python
+UserInDB(
+ username = user_dict["username"],
+ password = user_dict["password"],
+ email = user_dict["email"],
+ full_name = user_dict["full_name"],
+ hashed_password = hashed_password,
+)
+```
+
+/// warning | ę˛Ŋęŗ
+
+ėļę°ė ėŧëĄ ė ęŗĩë í¨ė `fake_password_hasher`ė `fake_save_user`ë ë°ė´í° íëĻė ėė°í기 ėí ėė ėŧ ëŋė´ëа, ė¤ė ëŗ´ėė ė ęŗĩíė§ ėėĩëë¤.
+
+///
+
+## ė¤ëŗĩ ė¤ė´ę¸°
+
+ėŊë ė¤ëŗĩė ė¤ė´ë ę˛ė **FastAPI**ė íĩėŦ ėė´ëė´ ė¤ íëė
ëë¤.
+
+ėŊë ė¤ëŗĩė ë˛ęˇ¸, ëŗ´ė ëŦ¸ė , ėŊë ëšë기í ëŦ¸ė (í ęŗŗė ė
ë°ė´í¸ëėė§ë§ ë¤ëĨ¸ ęŗŗė ė
ë°ė´í¸ëė§ ėë ëŦ¸ė ) ëąė ę°ëĨėąė ėĻę°ėíĩëë¤.
+
+꡸ëĻŦęŗ ė´ ëǍë¸ë¤ė ë§ė ë°ė´í°ëĨŧ ęŗĩė í늴ė ėėą ė´ëĻęŗŧ íė
ė ė¤ëŗĩíęŗ ėėĩëë¤.
+
+ë ëė ë°Šë˛ė´ ėėĩëë¤.
+
+`UserBase` ëǍë¸ė ė ė¸íėŦ ë¤ëĨ¸ ëǍë¸ë¤ė ę¸°ëŗ¸(base)ėŧëĄ ėŦėŠí ė ėėĩëë¤. ęˇ¸ë° ë¤ė ė´ ëǍë¸ė ėėë°ė ėėąęŗŧ íė
ė ė¸(ė í ė ė¸, ę˛ėĻ ëą)ė ėėíë ėë¸í´ëė¤ëĨŧ ë§ë¤ ė ėėĩëë¤.
+
+ëǍë ë°ė´í° ëŗí, ę˛ėĻ, ëŦ¸ėí ëąė ė ėė ėŧëĄ ėëí ę˛ė
ëë¤.
+
+ė´ë ę˛ í늴 ę° ëĒ¨ë¸ ę°ė ė°¨ė´ė ë§ ė ė¸í ė ėėĩëë¤(íëŦ¸ `password`ę° ėë ę˛Ŋė°, `hashed_password`ë§ ėë ę˛Ŋė°, íšė ëšë°ë˛í¸ę° ėë ę˛Ŋė°):
+
+{* ../../docs_src/extra_models/tutorial002_py310.py hl[7,13:14,17:18,21:22] *}
+
+## `Union` ëë `anyOf`
+
+ë ę°ė§ ė´ėė íė
ė íŦí¨íë `Union`ėŧëĄ ėëĩė ė ė¸í ė ėėĩëë¤. ė´ë ėëĩė´ ęˇ¸ ė¤ íëė íė
ėŧ ė ėėė ė미íŠëë¤.
+
+OpenAPIėėë ė´ëĨŧ `anyOf`ëĄ ė ėíŠëë¤.
+
+ė´ëĨŧ ėí´ íė¤ Python íė
íí¸ė¸ `typing.Union` ė ėŦėŠí ė ėėĩëë¤:
+
+/// note | ė°¸ęŗ
+
+`Union` ė ė ėí ëë ë ęĩŦ랴ė ė¸ íė
ė ë¨ŧė íŦí¨íęŗ , ë ęĩŦ랴ė ė¸ íė
ė ꡸ ë¤ė ëė´í´ėŧíŠëë¤. ėë ėė ėėë `Union[PlaneItem, CarItem]` ëĨŧ ëŗ´ëŠ´, ë ęĩŦ랴ė ė¸ `PlaneItem`ė´ `CarItem`ëŗ´ë¤ ėė ėėšíŠëë¤.
+
+///
+
+{* ../../docs_src/extra_models/tutorial003_py310.py hl[1,14:15,18:20,33] *}
+
+
+### Python 3.10ėė `Union`
+
+ėė ėė ėėë `response_model` ė¸ė ę°ėŧëĄ `Union[PlaneItem, CarItem]`ė ė ëŦíŠëë¤.
+
+ė´ ę˛Ŋė°, ė´ëĨŧ **íė
ė´ë
¸í
ė´ė
(type annotation)** ė´ ėë **ė¸ė ę°(argument value)** ėŧëĄ ė ëŦíęŗ ė기 ëëŦ¸ė Python 3.10ėėë `Union`ė ėŦėŠí´ėŧ íŠëë¤.
+
+ë§ėŊ íė
ė´ë
¸í
ė´ė
ė ėŦėŠíë¤ëŠ´, ë¤ėęŗŧ ę°ė´ ėė§ ë§ë(|)ëĨŧ ėŦėŠí ė ėėĩëë¤:
+
+```Python
+some_variable: PlaneItem | CarItem
+```
+
+íė§ë§ ė´ëĨŧ `response_model=PlaneItem | CarItem`ęŗŧ ę°ė´ í ëší늴 ėëŦę° ë°ėíŠëë¤. ė´ë Pythonė´ ė´ëĨŧ íė
ė´ë
¸í
ė´ė
ėŧëĄ í´ėíė§ ėęŗ , `PlaneItem`ęŗŧ `CarItem` ėŦė´ė **ėëĒģë ė°ė°(invalid operation)**ė ėëí기 ëëŦ¸ė
ëë¤
+
+## ëĒ¨ë¸ ëĻŦė¤í¸
+
+ë§ė°Ŧę°ė§ëĄ, ę°ė˛´ ëĻŦė¤í¸ ííė ėëĩė ė ė¸í ėë ėėĩëë¤.
+
+ė´ëĨŧ ėí´ íė¤ Pythonė `typing.List`ëĨŧ ėŦėŠíė¸ė(ëë Python 3.9 ė´ėėėë ë¨ėí `list`ëĨŧ ėŦėŠí ė ėėĩëë¤):
+
+{* ../../docs_src/extra_models/tutorial004_py39.py hl[18] *}
+
+
+## ėėė `dict` ėëĩ
+
+Pydantic ëǍë¸ė ėŦėŠíė§ ėęŗ , í¤ė ę°ė íė
ë§ ė ė¸íėŦ íë˛í ėėė `dict`ëĄ ėëĩė ė ė¸í ėë ėėĩëë¤.
+
+ė´ë Pydantic ëǍë¸ė íėí ė í¨í íë/ėėą ė´ëĻė ėŦė ė ė ė ėë ę˛Ŋė°ė ė ėŠíŠëë¤.
+
+ė´ ę˛Ŋė°, `typing.Dict`ëĨŧ ėŦėŠí ė ėėĩëë¤(ëë Python 3.9 ė´ėėėë ë¨ėí `dict`ëĨŧ ėŦėŠí ė ėėĩëë¤):
+
+{* ../../docs_src/extra_models/tutorial005_py39.py hl[6] *}
+
+
+## ėėŊ
+
+ėŦëŦ Pydantic ëǍë¸ė ėŦėŠíęŗ , ę° ę˛Ŋė°ė ë§ę˛ ėė ëĄę˛ ėėíė¸ė.
+
+ėí°í°ę° ėëĄ ë¤ëĨ¸ "ėí"ëĨŧ ę°ė ¸ėŧ íë ę˛Ŋė°, ėí°í°ëš ë¨ėŧ ë°ė´í° ëǍë¸ė ėŦėŠí íėë ėėĩëë¤. ėëĨŧ ë¤ė´, ėŦėŠė "ėí°í°"ę° `password`, `password_hash`, ëë ëšë°ë˛í¸ę° ėë ėíëĨŧ íŦí¨í ė ėë ę˛Ŋė°ė˛ëŧ ë§ė
ëë¤.
diff --git a/docs/ko/docs/virtual-environments.md b/docs/ko/docs/virtual-environments.md
new file mode 100644
index 000000000..0d10c3200
--- /dev/null
+++ b/docs/ko/docs/virtual-environments.md
@@ -0,0 +1,846 @@
+# ę°ė íę˛Ŋ
+
+Python íëĄė í¸ëĨŧ ėė
í ëë **ę°ė íę˛Ŋ** (ëë ė´ė ė ėŦí ëęĩŦ)ė ėŦėŠíë ę˛ė´ ėĸėĩëë¤. ę° íëĄė í¸ ë§ë¤ ė¤ėšíë í¨í¤ė§ëĨŧ ëļëĻŦíėŦ ę´ëĻŦí ė ėėĩëë¤.
+
+/// info | ė ëŗ´
+
+ė´ë¯¸ ę°ė íę˛Ŋė ëí´ ė ėęŗ ėë¤ëŠ´, ė´ ėšė
ė ęą´ë ë°ė´ë ę´ė°Žėĩëë¤. đ¤
+
+///
+
+/// tip | í
+
+**ę°ė íę˛Ŋ(Virtual Environment)** ė **íę˛Ŋ ëŗė(Environment Variable)** ė ë¤ëĻ
ëë¤.
+
+**íę˛Ŋ ëŗė**ë ėė¤í
ė ėĄ´ėŦí늰, íëĄęˇ¸ë¨ė´ ėŦėŠí ė ėë ëŗėė
ëë¤.
+
+**ę°ė íę˛Ŋ**ė ëĒëĒ íėŧëĄ ęĩŦėąë íëė ëë í°ëĻŦė
ëë¤.
+
+///
+
+/// info | ė ëŗ´
+
+ė´ íė´ė§ėėë **ę°ė íę˛Ŋ**ė ėŦėŠ ë°Šë˛ęŗŧ ėë ë°Šėė ė¤ëĒ
íŠëë¤.
+
+ë§ėŊ **ëǍë ę˛ė ę´ëĻŦí´ėŖŧë ëęĩŦ** (Python ė¤ėšęšė§ íŦí¨)ëĨŧ ėŦėŠíęŗ ėļë¤ëŠ´ uv ëĨŧ ėŦėŠí´ëŗ´ė¸ė.
+
+///
+
+## íëĄė í¸ ėėą
+
+ë¨ŧė , íëĄė í¸ëĨŧ ėí ëë í°ëĻŦëĨŧ íë ėėąíŠëë¤.
+
+ëŗ´íĩ ėŦėŠė í ëë í°ëĻŦ ėė `code`ëŧë ëë í°ëĻŦëĨŧ ë§ë¤ęŗ , ꡸ ėė íëĄė í¸ë§ë¤ íëėŠ ëë í°ëĻŦëĨŧ ë§ë¤ė´ ę´ëĻŦíŠëë¤.
+
+
+
+```console
+// í ëë í°ëĻŦëĄ ė´ë
+$ cd
+// ëǍë ėŊë íëĄė í¸ëĨŧ ėí ëë í°ëĻŦ ėėą
+$ mkdir code
+// code ëë í°ëĻŦëĄ ė´ë
+$ cd code
+// ė´ë˛ íëĄė í¸ëĨŧ ėí ëë í°ëĻŦ ėėą
+$ mkdir awesome-project
+// í´ëš íëĄė í¸ ëë í°ëĻŦëĄ ė´ë
+$ cd awesome-project
+```
+
+
+
+## ę°ė íę˛Ŋ ėėą
+
+Python íëĄė í¸ëĨŧ **ė˛ė ėėí ë**, ę°ė íę˛Ŋė **íëĄė í¸ ë´ëļ **ė ėėąíŠëë¤.
+
+/// tip | í
+
+ė´ ėė
ė **íëĄė í¸ëĨŧ ė˛ė ė¤ė í ë íë˛ë§** í´ėŖŧ늴 ëŠëë¤. ė´í ėė
í ë ë°ëŗĩí íėë ėėĩëë¤.
+
+///
+
+//// tab | `venv`
+
+Python íė¤ ëŧė´ë¸ëŦëĻŦė íŦí¨ë venv ëǍëė ėŦėŠí´ ę°ė íę˛Ŋė ėėąí ė ėėĩëë¤.
+
+
+
+```console
+$ python -m venv .venv
+```
+
+
+
+/// details | ëĒ
ë šė´ ėė¸ ė¤ëĒ
+
+* `python`: `python` íëĄęˇ¸ë¨ė ė¤ííŠëë¤.
+* `-m`: íšė ëǍëė ė¤íŦëĻŊí¸ė˛ëŧ ė¤ííŠëë¤. ëė ëǍëė ë°ëĄ ë¤ė ė§ė íŠëë¤.
+* `venv`: Python íė¤ ëŧė´ë¸ëŦëĻŦė íŦí¨ë `venv` ëǍëė ė¤ííŠëë¤.
+* `.venv`: ę°ė íę˛Ŋė `.venv` ëë í°ëĻŦė ėėąíŠëë¤.
+
+///
+
+////
+
+//// tab | `uv`
+
+`uv` ę° ė¤ėšëė´ ėë¤ëŠ´, uvëĨŧ íĩí´ ę°ė íę˛Ŋė ėėąí ė ėėĩëë¤.
+
+
+
+```console
+$ uv venv
+```
+
+
+
+/// tip | í
+
+`uv`ë ę¸°ëŗ¸ė ėŧëĄ `.venv` ëë í°ëĻŦė ę°ė íę˛Ŋė ėėąíŠëë¤.
+
+ëŗëëĄ ëë í°ëĻŦ ė´ëĻė ėļę° ė¸ėëĄ ë겨 ėŖŧ늴 ę˛ŊëĄëĨŧ ė§ė í ė ėėĩëë¤.
+
+///
+
+////
+
+í´ëš ëĒ
ë šė´ë `.venv` ëë í°ëĻŦė ėëĄė´ ę°ė íę˛Ŋė ėėąíŠëë¤.
+
+/// details | `.venv` ëë ë¤ëĨ¸ ė´ëĻ
+
+ę°ė íę˛Ŋė ë¤ëĨ¸ ëë í°ëĻŦė ėėąí ėë ėė§ë§, ę´ëĄė ėŧëĄ `.venv` ëë í°ëĻŦ ė´ëĻė ėŦėŠíŠëë¤.
+
+///
+
+## ę°ė íę˛Ŋ íėąí
+
+ė´í ė¤ííë Python ëĒ
ë šė´ė í¨í¤ė§ ė¤ėšę° ę°ė íę˛Ŋė ë°ëĨ´ëëĄ, ę°ė íę˛Ŋė íėąííė¸ė.
+
+/// tip | í
+
+**í°ë¯¸ëė ėëĄ ė´ęŗ ** íëĄė í¸ ėė
ė ėėí ëë, **íė ė´ ėė
ė** í´ėŖŧė¸ė.
+
+///
+
+//// tab | Linux, macOS
+
+
+
+```console
+$ source .venv/bin/activate
+```
+
+
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+```console
+$ .venv\Scripts\Activate.ps1
+```
+
+
+
+////
+
+//// tab | Windows Bash
+
+Windowsėė Bash(ė: Git Bash )ëĨŧ ėŦėŠíë ę˛Ŋė°:
+
+
+
+```console
+$ source .venv/Scripts/activate
+```
+
+
+
+////
+
+/// tip | í
+
+ę°ė íę˛Ŋė ėëĄė´ í¨í¤ė§ëĨŧ ė¤ėší ëë§ë¤, í´ëš íę˛Ŋė ë¤ė íėąííė¸ė.
+
+ė´ë ę˛ í늴 í´ëš í¨í¤ė§ëĄ ė¤ėšë **í°ë¯¸ë(CLI ) íëĄęˇ¸ë¨**ė ėŦėŠí ë, ė ėė ė¤ėšë ë¤ëĨ¸ ë˛ė ė´ ėëëŧ, ę°ė íę˛Ŋ ėė ė¤ėšë ė íí ë˛ė ė ėŦėŠíŠëë¤.
+
+///
+
+## ę°ė íę˛Ŋė´ íėąí ėŦëļ íė¸
+
+ę°ė íę˛Ŋė´ íėąíëėëė§ íė¸íŠëë¤. (ė´ė ëĒ
ë šė´ę° ė ëëĄ ėëíëė§ íė¸íŠëë¤).
+
+/// tip | í
+
+ė´ ë¨ęŗë **ė í ėŦí**ė´ė§ë§, ëǍë ę˛ė´ ėėëëĄ ėëíęŗ ėëė§, ꡸ëĻŦęŗ ėëí ę°ė íę˛Ŋė´ íėąí ëėë ė§ **íė¸**íë ėĸė ë°Šë˛ė
ëë¤.
+
+///
+
+//// tab | Linux, macOS, Windows Bash
+
+
+
+```console
+$ which python
+
+/home/user/code/awesome-project/.venv/bin/python
+```
+
+
+
+`python` ėėšę° íëĄė í¸ ë´ëļ(ė´ ėėėėë `awesome-project`)ė `.venv/bin/python` ę˛ŊëĄëĄ íėëë¤ëŠ´ ėąęŗĩė
ëë¤. đ
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+```console
+$ Get-Command python
+
+C:\Users\user\code\awesome-project\.venv\Scripts\python
+```
+
+
+
+`python` ėėšę° íëĄė í¸ ë´ëļ(ė´ ėėėėë `awesome-project`)ė `.venv\bin\python` ę˛ŊëĄëĄ íėëë¤ëŠ´ ėąęŗĩė
ëë¤. đ
+
+////
+
+## pip ė
꡸ë ė´ë
+
+/// tip | í
+
+`uv` ëĨŧ ėŦėŠíë¤ëŠ´, `pip` ëė `uv`ëĄ í¨í¤ė§ëĨŧ ė¤ėšíę˛ ëë¯ëĄ `pip`ė ė
꡸ë ė´ëí íėę° ėėĩëë¤. đ
+
+///
+
+`pip`ė ėŦėŠíėŦ í¨í¤ė§ëĨŧ ė¤ėšíë ę˛Ŋė° (Python íė¤ ëŧė´ë¸ëŦëĻŦė íŦí¨ëė´ ėėĩëë¤), **ėĩė ë˛ė ėŧëĄ ė
꡸ë ė´ë**íë ę˛ė´ ėĸėĩëë¤.
+
+í¨í¤ė§ ė¤ėš ė¤ ë°ėíë ë¤ėíęŗ íšė´í ėëŦë¤ė `pip` ė
꡸ë ė´ëëĄ ėŊę˛ í´ę˛°ëë ę˛Ŋė°ę° ë§ėĩëë¤.
+
+/// tip | í
+
+ė´ ėė
ė ëŗ´íĩ ę°ė íę˛Ŋė ėėąí **ė§í í ë˛ë§** í늴 ëŠëë¤.
+
+///
+
+ę°ė íę˛Ŋė´ íėąíë ėíė¸ė§ íė¸í í(ėė ė¤ëĒ
í ëĒ
ë šė´ ėŦėŠ), ėë ëĒ
ë šė´ëĨŧ ė¤ííė¸ė:
+
+
+
+```console
+$ python -m pip install --upgrade pip
+
+---> 100%
+```
+
+
+
+## `.gitignore` ėļę°í기
+
+**Git**ė ėŦėŠíęŗ ėë¤ëŠ´ (ėŦėŠíë ę˛ė´ ėĸėĩëë¤), `.gitignore` íėŧė ėļę°í´ė `.venv` ëë í°ëĻŦ ė 랴ëĨŧ Gitėė ė ė¸íė¸ė.
+
+/// tip | í
+
+`uv` ëĨŧ ėŦėŠí´ ę°ė íę˛Ŋė ėėąíë¤ëŠ´, ė´ë¯¸ ė´ ėė
ė´ ėëėŧëĄ ė˛ëĻŦëė´ ėėŧë¯ëĄ ė´ ë¨ęŗë ęą´ëë°ė´ë ëŠëë¤. đ
+
+///
+
+/// tip | í
+
+ė´ ėė
ë ë§ė°Ŧę°ė§ëĄ, ę°ė íę˛Ŋė ėėąí **ė§í í ë˛ë§** í늴 ëŠëë¤.
+
+///
+
+
+
+```console
+$ echo "*" > .venv/.gitignore
+```
+
+
+
+/// details | ëĒ
ë šė´ ėė¸ ė¤ëĒ
+
+* `echo "*"`: í°ë¯¸ëė `*` í
ė¤í¸ëĨŧ "ėļë Ĩ"íŠëë¤ (ë¤ė ė¤ëĒ
ėė ėĄ°ę¸ ë°ëëë¤)
+* `>`: ėŧėĒŊ ëĒ
ë šė´ė ėļë Ĩ ë´ėŠė í°ë¯¸ëė ėļë Ĩíė§ ėęŗ , ė¤ëĨ¸ėĒŊė ė§ė ë íėŧëĄ **기ëĄ(write)** íëŧë ė미ė
ëë¤.
+* `.gitignore`: ėļë Ĩë í
ė¤í¸ę° 기ëĄë íėŧ ė´ëĻė
ëë¤.
+
+꡸ëĻŦęŗ Gitėė `*`ë "ëǍë ę˛"ė ė미íŠëë¤. ë°ëŧė `.venv` ëë í°ëĻŦ ėė ëǍë ę˛ė ëŦ´ėíę˛ ëŠëë¤.
+
+ė´ ëĒ
ë šė´ë ë¤ėęŗŧ ę°ė ë´ėŠė ę°ė§ `.gitignore` íėŧė ėėąíŠëë¤:
+
+
+```gitignore
+*
+```
+
+///
+
+## í¨í¤ė§ ė¤ėš
+
+ę°ė íę˛Ŋė íėąíí í, ꡸ ėė íėí í¨í¤ė§ë¤ė ė¤ėší ė ėėĩëë¤.
+
+/// tip | í
+
+íëĄė í¸ėė íėí í¨í¤ė§ëĨŧ ė¤ėšíęą°ë ė
꡸ë ė´ëí ëë ė´ ėė
ė **í ë˛ë§** í늴 ëŠëë¤.
+
+ë§ėŊ íšė í¨í¤ė§ė ë˛ė ė ė
꡸ë ė´ëíęą°ë, ėëĄė´ í¨í¤ė§ëĨŧ ėļę°í íėę° ė기늴 **ë¤ė ė´ ėė
ė ë°ëŗĩ**í늴 ëŠëë¤.
+
+///
+
+### í¨í¤ė§ ė§ė ė¤ėš
+
+ę¸íę˛ ėė
íęą°ë, íëĄė í¸ė íėí í¨í¤ė§ ëĒŠëĄė ë°ëĄ íėŧëĄ ę´ëĻŦíęŗ ėļė§ ėė ę˛Ŋė°, í¨í¤ė§ëĨŧ ė§ė ė¤ėší ėë ėėĩëë¤.
+
+/// tip | í
+
+í¨í¤ė§ ė´ëĻęŗŧ ë˛ė ė ëŗ´ëĨŧ íėŧė ė ëĻŦí´ëë ę˛(ė: `requirements.txt` ëë `pyproject.toml`)ė (매ė°) ėĸė ėę°ė
ëë¤.
+
+///
+
+//// tab | `pip`
+
+
+
+```console
+$ pip install "fastapi[standard]"
+
+---> 100%
+```
+
+
+
+////
+
+//// tab | `uv`
+
+`uv` ëĨŧ ėŦėŠíë ę˛Ŋė°:
+
+
+
+```console
+$ uv pip install "fastapi[standard]"
+---> 100%
+```
+
+
+
+////
+
+### `requirements.txt`ėė ė¤ėš
+
+`requirements.txt` íėŧė´ ėë¤ëŠ´, ꡸ ėė ëĒ
ėë í¨í¤ė§ë¤ė í ë˛ė ė¤ėší ė ėėĩëë¤.
+
+//// tab | `pip`
+
+
+
+```console
+$ pip install -r requirements.txt
+---> 100%
+```
+
+
+
+////
+
+//// tab | `uv`
+
+`uv` ëĨŧ ėŦėŠíë ę˛Ŋė°:
+
+
+
+```console
+$ uv pip install -r requirements.txt
+---> 100%
+```
+
+
+
+////
+
+/// details | `requirements.txt`
+
+ë¤ėė ëĒ ę°ė§ í¨í¤ė§ëĨŧ íŦí¨í `requirements.txt`ė ėėė
ëë¤:
+
+```requirements.txt
+fastapi[standard]==0.113.0
+pydantic==2.8.0
+```
+
+///
+
+## íëĄęˇ¸ë¨ ė¤í
+
+ę°ė íę˛Ŋė íėąíí íėë íëĄęˇ¸ë¨ė ė¤íí ė ėėĩëë¤. ė´ë í´ëš ę°ė íę˛Ŋė ė¤ėšë Pythonęŗŧ í¨í¤ė§ë¤ė´ ėŦėŠëŠëë¤.
+
+
+
+```console
+$ python main.py
+
+Hello World
+```
+
+
+
+## ėëí° ė¤ė
+
+ėëí°ëĨŧ ėŦėŠí ę˛Ŋė°, ėė ë§ë ę°ė íę˛Ŋė ėŦėŠíëëĄ ė¤ė íë ę˛ė´ ėĸėĩëë¤. (ëëļëļė ėëí°ë ėëėŧëĄ ę°ė§í기ë íŠëë¤.)
+ė´ë ę˛ í늴 ėë ėėą ę¸°ëĨė´ë ėŊë ë´ ė¤ëĨ íė 기ëĨė ė ëëĄ ėŦėŠí ė ėėĩëë¤.
+
+ėė:
+
+* VS Code
+* PyCharm
+
+/// tip | í
+
+ė´ ė¤ė ė ëŗ´íĩ ę°ė íę˛Ŋė **ė˛ė ë§ë¤ėė ë í ë˛ë§** í´ėŖŧ늴 ëŠëë¤.
+
+///
+
+## ę°ė íę˛Ŋ ëšíėąí
+
+íëĄė í¸ ėė
ė´ ëëŦë¤ëŠ´, ę°ė íę˛Ŋė **ëšíėąí**í ė ėėĩëë¤.
+
+
+
+```console
+$ deactivate
+```
+
+
+
+ė´ë ę˛ í늴 ė´íė `python` ëĒ
ë šė´ëĨŧ ė¤ííė ë, ę°ė íę˛Ŋė Pythonė´ë ꡸ ėė ė¤ėšë í¨í¤ė§ë¤ė ėŦėŠíė§ ėę˛ ëŠëë¤.
+
+## ė´ė ėė
í ė¤ëšę° ëėėĩëë¤
+
+ė´ė íëĄė í¸ ėė
ė ėėí ė¤ëšę° ėëŖëėėĩëë¤.
+
+
+/// tip | í
+
+ė ë´ėŠė ë ęšė´ ė´í´íęŗ ėļėŧė ę°ė?
+
+꡸ë ë¤ëŠ´ ęŗė ėŊė´ ėŖŧė¸ė. đđ¤
+
+///
+
+## ę°ė íę˛Ŋė ė ėŦėŠíëę°
+
+FastAPIëĨŧ ėŦėŠíë ¤ëŠ´ ë¨ŧė Python ė ė¤ėší´ėŧ íŠëë¤.
+
+꡸ íėë FastAPIė í¨ęģ ėŦėŠí **기í í¨í¤ė§ë¤**ė **ė¤ėš**í´ėŧ íŠëë¤.
+
+í¨í¤ė§ëĨŧ ė¤ėší ë ëŗ´íĩ Pythonė ę¸°ëŗ¸ íŦí¨ë `pip` ëĒ
ë šė´(ëë ė ėŦí ëęĩŦ)ëĨŧ ėŦėŠíŠëë¤.
+
+íė§ë§ `pip`ė ꡸ëĨ ė§ė ėŦėŠí늴, í´ëš í¨í¤ė§ë¤ė **ė ė Python íę˛Ŋ**(ėė¤í
ė 랴ė ė¤ėšë Python)ė ė¤ėšëŠëë¤.
+
+### ëŦ¸ė ė
+
+꡸ë ë¤ëŠ´, ė ė Python íę˛Ŋė í¨í¤ė§ëĨŧ ė¤ėší늴 ė´ë¤ ëŦ¸ė ę° ë°ėí ęšė?
+
+ė´ë ėė ė´ ë늴, **ėëĄ ë¤ëĨ¸ í¨í¤ė§ë¤**ė ėėĄ´íë ėŦëŦ ę°ė íëĄęˇ¸ë¨ė ėėąíę˛ ë ę˛ė
ëë¤. ꡸ëĻŦęŗ ė´ë¤ ė¤ ėŧëļë **ę°ė í¨í¤ė§ė ėëĄ ë¤ëĨ¸ ë˛ė **ė íėëĄ í ė ėėĩëë¤. đą
+
+ėëĨŧ ë¤ė´, `ë§ë˛ėŦė ë(philosophers-stone)` íëĄė í¸ëĨŧ ë§ë¤ėë¤ęŗ ę°ė í´ë´
ėë¤. ė´ íëĄęˇ¸ë¨ė `í´ëĻŦ íŦí°(harry)`ëŧë í¨í¤ė§ė `v1` ë˛ė ė **ėėĄ´**íŠëë¤. ë°ëŧė `harry`ëĨŧ ė¤ėší´ėŧ íŠëë¤.
+
+```mermaid
+flowchart LR
+ stone(philosophers-stone) -->|requires| harry-1[harry v1]
+```
+
+꡸ë°ë° ëė¤ė `ėėĻėš´ë°ė ėŖė(prisoner-of-azkaban)`ė´ëŧë ë ë¤ëĨ¸ íëĄė í¸ëĨŧ ë§ë¤ę˛ ëėęŗ , ė´ íëĄė í¸ë ėė `harry` í¨í¤ė§ëĨŧ ėŦėŠíŠëë¤. ꡸ë°ë° ė´ íëĄė í¸ë `harry`ė `v3` ë˛ė ė´ íėíŠëë¤.
+
+```mermaid
+flowchart LR
+ azkaban(prisoner-of-azkaban) --> |requires| harry-3[harry v3]
+```
+
+íė§ë§ ė´ė ëŦ¸ė ę° ėęšëë¤. ëĄėģŦ ę°ė íę˛Ŋ ëė ė ė ė íę˛Ŋė í¨í¤ė§ëĨŧ ė¤ėšíę˛ ë늴, ė´ë¤ ë˛ė ė `harry`ëĨŧ ė¤ėší ė§ëĨŧ ė íí´ėŧ í기 ëëŦ¸ė
ëë¤.
+
+ėëĨŧ ë¤ė´, `ë§ë˛ėŦė ë(philosophers-stone)`ė ė¤ííęŗ ėļë¤ëŠ´ ë¨ŧė `harry` `v1` ë˛ė ė ë¤ėęŗŧ ę°ė´ ė¤ėš í´ėŧ íŠëë¤:
+
+
+
+```console
+$ pip install "harry==1"
+```
+
+
+
+꡸ëŦ늴 결ęĩ ė ė Python íę˛Ŋėë `harry` `v1`ë˛ė ė´ ė¤ėšë ėíę° ëŠëë¤.
+
+```mermaid
+flowchart LR
+ subgraph global[global env]
+ harry-1[harry v1]
+ end
+ subgraph stone-project[philosophers-stone project]
+ stone(philosophers-stone) -->|requires| harry-1
+ end
+```
+
+íė§ë§ ė´ė `ėėĻėš´ë°ė ėŖė(prisoner-of-azkaban)`ė ė¤ííęŗ ėļë¤ëŠ´, `harry` `v1`ë˛ė ė ė ęą°íęŗ `harry` `v3`ë˛ė ė ė¤ėší´ėŧ íŠëë¤. (ëë ë¨ėí `v3`ë˛ė ė ė¤ėšíë ę˛ë§ėŧëĄë ę¸°ėĄ´ė `v1`ë˛ė ė´ ėëėŧëĄ ė ęą°ëŠëë¤.)
+
+
+
+```console
+$ pip install "harry==3"
+```
+
+
+
+꡸ë ę˛ í늴 ė´ė ė ė Python íę˛Ŋėë `harry` `v3`ë˛ė ė´ ė¤ėšë ėíę° ëŠëë¤.
+
+꡸ëĻŦęŗ ë¤ė `ë§ë˛ėŦė ë(philosophers-stone)`ė ė¤ííë ¤ęŗ í늴, **ėëíė§** ėė ė ėėĩëë¤. ėëí늴 ė´ íëĄęˇ¸ë¨ė `harry` `v1`ë˛ė ė íėëĄ í기 ëëŦ¸ė
ëë¤.
+
+```mermaid
+flowchart LR
+ subgraph global[global env]
+ harry-1[harry v1 ]
+ style harry-1 fill:#ccc,stroke-dasharray: 5 5
+ harry-3[harry v3]
+ end
+ subgraph stone-project[philosophers-stone project]
+ stone(philosophers-stone) -.-x|âī¸| harry-1
+ end
+ subgraph azkaban-project[prisoner-of-azkaban project]
+ azkaban(prisoner-of-azkaban) --> |requires| harry-3
+ end
+```
+
+/// tip | í
+
+Python í¨í¤ė§ë¤ė **ė ë˛ė **ėė **í¸íėą ëŦ¸ė (breaking changes)**ę° ë°ėíė§ ėëëĄ ėĩëí ë
¸ë Ĩíë ę˛ė´ ėŧë°ė ė
ëë¤. íė§ë§ ꡸ëë ėė íę˛ ėė
íë ¤ëŠ´, í
ė¤í¸ëĨŧ ė¤íí´ëŗ´ëŠ´ė ė ë˛ė ė ėëė ėŧëĄ ė¤ėšíë ę˛ė´ ėĸėĩëë¤.
+
+///
+
+ė´ė , ė´ë° ėŧė´ ėŦëŦëļė **ëǍë íëĄė í¸**ę° ėŦėŠíë **ėë§ė í¨í¤ė§ë¤**ėė ëėė ë°ėíë¤ęŗ ėėí´ëŗ´ė¸ė. ė´ë ë§¤ė° ę´ëĻŦí기 ė´ë ¤ė°ëа, 결ęĩ **ėëĄ í¸íëė§ ėë ë˛ė **ė í¨í¤ė§ëĄ íëĄė í¸ëĨŧ ė¤ííę˛ ë ę°ëĨėąė´ ëęŗ , ęˇ¸ëĄ ė¸í´ ė´ë¤ ëŦ¸ė ę° ė ë°ėíëė§ ė ė ėę˛ ë ė ėėĩëë¤.
+
+ëí ėŦėŠíë ė´ė랴ė (Linux, Windows, macOS ëą)ė ë°ëŧ Pythonė´ **미ëĻŦ ė¤ėšëė´ ėė ėë** ėėĩëë¤. ė´ë° ę˛Ŋė°ėë ė´ė랴ė ė ëėė íėí íšė ë˛ė ė í¨í¤ė§ë¤ė´ í¨ęģ ė¤ėšëė´ ėė ė ėėĩëë¤. ė´ ėíėė ė ė Python íę˛Ŋė ėėė í¨í¤ė§ëĨŧ ė¤ėší늴, ė´ė랴ė ė íŦí¨ë íëĄęˇ¸ë¨ ėŧëļę° **ęš¨ė§ ėí**ë ėėĩëë¤.
+
+## í¨í¤ė§ë¤ė ė´ëė ė¤ėšëëę°
+
+Pythonė ė¤ėší늴, ėģ´í¨í°ė ėŦëŦ ëë í°ëĻŦė íėŧë¤ė´ ėėąëŠëë¤.
+
+ė´ ė¤ ėŧëļ ëë í°ëĻŦë ėŦėŠėę° ė¤ėší í¨í¤ė§ë¤ė ëŗ´ę´íë ėí ė íŠëë¤.
+
+ėëĨŧ ë¤ė´, ėë ëĒ
ë šė´ëĨŧ ė¤íí늴:
+
+
+
+```console
+// ė§ę¸ ė¤ííė§ ėėë ëŠëë¤, ꡸ëĨ ėė ėŧ ëŋė´ėė đ¤
+$ pip install "fastapi[standard]"
+---> 100%
+```
+
+
+
+í´ëš ëĒ
ë šė´ë FastAPI ėŊëëĨŧ íŦí¨í ėėļ íėŧė ë¤ė´ëĄëíŠëë¤. ė´ íėŧė ëŗ´íĩ PyPI ėė ë°ėėĩëë¤.
+
+ëí FastAPIę° ėėĄ´íë ë¤ëĨ¸ í¨í¤ė§ë¤ë í¨ęģ **ë¤ė´ëĄë**ëŠëë¤.
+
+꡸ëĻŦęŗ ęˇ¸ ëǍë íėŧë¤ė **ėėļ í´ė **í ë¤, ėģ´í¨í°ė íšė ëë í°ëĻŦė ė ėĨíŠëë¤.
+
+ę¸°ëŗ¸ė ėŧëĄ ė´ íėŧë¤ė Pythonė´ ė¤ėšë ëë í°ëĻŦ ė, ėĻ **ė ė íę˛Ŋ**ė ë´ė ëë í°ëĻŦė ė ėĨëŠëë¤.
+
+## ę°ė íę˛Ŋė´ë
+
+ė ė íę˛Ŋė ëǍë í¨í¤ė§ëĨŧ ė¤ėší늴ė ë°ėíë ëŦ¸ė ė ëí í´ę˛°ėą
ė, ėė
íë **ę° íëĄė í¸ë§ë¤ ę°ė íę˛Ŋ**ė ėŦėŠíë ę˛ė
ëë¤.
+
+ę°ė íę˛Ŋė ė ė íę˛Ŋęŗŧ ë§¤ė° ė ėŦí íëė **ëë í°ëĻŦ**ė´ëа, ꡸ ėė í´ëš íëĄė í¸ëĨŧ ėí í¨í¤ė§ë¤ė ė¤ėší ė ėėĩëë¤.
+
+ė´ë ę˛ í늴 ę° íëĄė í¸ë ė랴ė ė¸ ę°ė íę˛Ŋ(`.venv` ëë í°ëĻŦ)ė ę°ė§ę˛ ë늰, ꡸ ėė í´ëš íëĄė í¸ ė ėŠ í¨í¤ė§ë¤ė ëŗ´ė íę˛ ëŠëë¤.
+
+
+```mermaid
+flowchart TB
+ subgraph stone-project[philosophers-stone project]
+ stone(philosophers-stone) --->|requires| harry-1
+ subgraph venv1[.venv]
+ harry-1[harry v1]
+ end
+ end
+ subgraph azkaban-project[prisoner-of-azkaban project]
+ azkaban(prisoner-of-azkaban) --->|requires| harry-3
+ subgraph venv2[.venv]
+ harry-3[harry v3]
+ end
+ end
+ stone-project ~~~ azkaban-project
+```
+
+## ę°ė íę˛Ŋ íėąí ė미
+
+ę°ė íę˛Ŋė íėąííë¤ë ę˛ė, ėëĨŧ ë¤ė´ ë¤ėęŗŧ ę°ė ëĒ
ë šė´ëĨŧ ė¤ííë ę˛ė ė미íŠëë¤:
+
+//// tab | Linux, macOS
+
+
+
+```console
+$ source .venv/bin/activate
+```
+
+
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+```console
+$ .venv\Scripts\Activate.ps1
+```
+
+
+
+////
+
+//// tab | Windows Bash
+
+Windowsėė Bash(ė: Git Bash )ëĨŧ ėŦėŠíë ę˛Ŋė°:
+
+
+
+```console
+$ source .venv/Scripts/activate
+```
+
+
+
+////
+
+ė´ ëĒ
ë šė´ë ė´íė ė¤íë ëĒ
ë šė´ėė ėŦėŠë [íę˛Ŋ ëŗė](environment-variables.md){.internal-link target=_blank} ëĒ ę°ëĨŧ ėėąíęą°ë ėė íŠëë¤.
+
+ė´ ëŗėë¤ ė¤ íëę° ë°ëĄ `PATH` ëŗėė
ëë¤.
+
+/// tip | í
+
+`PATH` íę˛Ŋ ëŗėė ëí´ ë ėęŗ ėļë¤ëŠ´ [íę˛Ŋ ëŗė ëŦ¸ėė PATH íę˛Ŋ ëŗė ėšė
](environment-variables.md#path-environment-variable){.internal-link target=_blank}ė ė°¸ęŗ íė¸ė.
+
+///
+
+ę°ė íę˛Ŋė íėąíí늴, ę°ė íę˛Ŋė ę˛ŊëĄė¸ `.venv/bin` (Linuxė macOS) ëë `.venv\Scripts`(Windows)ëĨŧ `PATH` íę˛Ŋ ëŗėė ėļę°ëŠëë¤.
+
+ėëĨŧ ë¤ė´, ę°ė íę˛Ŋė íėąíí기 ė ė `PATH` ëŗėë ë¤ėęŗŧ ę°ėë¤ęŗ ę°ė í´ë´
ėë¤:
+
+//// tab | Linux, macOS
+
+```plaintext
+/usr/bin:/bin:/usr/sbin:/sbin
+```
+
+ėė¤í
ė ë¤ė ę˛ŊëĄë¤ėė íëĄęˇ¸ë¨ė ė°žę˛ ëŠëë¤:
+
+* `/usr/bin`
+* `/bin`
+* `/usr/sbin`
+* `/sbin`
+
+////
+
+//// tab | Windows
+
+```plaintext
+C:\Windows\System32
+```
+
+ėė¤í
ė ë¤ė ę˛ŊëĄë¤ėė íëĄęˇ¸ë¨ė ė°žę˛ ëŠëë¤:
+
+* `C:\Windows\System32`
+
+////
+
+ę°ė íę˛Ŋė íėąíí íėë, `PATH` ëŗėë ë¤ėęŗŧ ę°ė ííę° ëŠëë¤:
+
+//// tab | Linux, macOS
+
+```plaintext
+/home/user/code/awesome-project/.venv/bin:/usr/bin:/bin:/usr/sbin:/sbin
+```
+
+ėė¤í
ė ę°ėĨ ë¨ŧė ë¤ė ę˛ŊëĄėė íëĄęˇ¸ë¨ė ė°žę¸° ėėíŠëë¤:
+
+```plaintext
+/home/user/code/awesome-project/.venv/bin
+```
+
+꡸ íė ë¤ëĨ¸ ëë í°ëĻŦë¤ė íėíŠëë¤.
+
+ë°ëŧė í°ë¯¸ëė `python`ė ė
ë Ĩí늴, ėė¤í
ė ë¤ė ėėšė ėë Python íëĄęˇ¸ë¨ė ė°žę˛ ëŠëë¤:
+
+```plaintext
+/home/user/code/awesome-project/.venv/bin/python
+```
+
+꡸ëĻŦęŗ í´ëš Pythonė ėŦėŠíę˛ ëŠëë¤.
+
+////
+
+//// tab | Windows
+
+```plaintext
+C:\Users\user\code\awesome-project\.venv\Scripts;C:\Windows\System32
+```
+
+ėė¤í
ė ę°ėĨ ë¨ŧė ë¤ė ę˛ŊëĄėė íëĄęˇ¸ë¨ė ė°žę¸° ėėíŠëë¤:
+
+```plaintext
+C:\Users\user\code\awesome-project\.venv\Scripts
+```
+
+꡸ íė ë¤ëĨ¸ ëë í°ëĻŦë¤ė íėíŠëë¤.
+
+ë°ëŧė í°ë¯¸ëė `python`ė ė
ë Ĩí늴, ėė¤í
ė ë¤ė ę˛ŊëĄė ėë Python íëĄęˇ¸ë¨ė ė°žę˛ ëŠëë¤:
+
+```plaintext
+C:\Users\user\code\awesome-project\.venv\Scripts\python
+```
+
+꡸ëĻŦęŗ í´ëš Pythonė ėŦėŠíę˛ ëŠëë¤.
+
+////
+
+ė¤ėí ė¸ëļ ėŦí ė¤ íëë, ę°ė íę˛Ŋė ę˛ŊëĄę° `PATH` ëŗėė ę°ėĨ **ė**ė ėļę°ëë¤ë ė ė
ëë¤. ėė¤í
ė ėŦėŠ ę°ëĨí ë¤ëĨ¸ Pythonë¤ëŗ´ë¤ **ë¨ŧė ** ė´ ę˛ŊëĄëĨŧ ė°žėĩëë¤. ꡸ëė í°ë¯¸ëėė `python`ė ė¤íí늴, ė ė íę˛Ŋė Pythonė´ ėë **ę°ė íę˛Ŋė ėë** Pythonė´ ėŦėŠëŠëë¤. (ė: ė ė íę˛Ŋė ė¤ėšë `python`ė´ ėëëŧë ęˇ¸ëŗ´ë¤ ė°ė íŠëë¤.)
+
+ę°ė íę˛Ŋė íėąíí늴 ė´ ė¸ėë ëĒ ę°ė§ ë¤ëĨ¸ ę˛ë¤ė´ ëŗę˛Ŋëė§ë§, ė´ë ꡸ė¤ėėë ę°ėĨ ė¤ėí ëŗí ė¤ íëė
ëë¤.
+
+## ę°ė íę˛Ŋ íė¸í기
+
+ę°ė íę˛Ŋė´ íėąí ëėëė§ íė¸íë ¤ëŠ´, ėë ëĒ
ë šė´ëĨŧ ėŦėŠí ė ėėĩëë¤:
+
+//// tab | Linux, macOS, Windows Bash
+
+
+
+```console
+$ which python
+
+/home/user/code/awesome-project/.venv/bin/python
+```
+
+
+
+////
+
+//// tab | Windows PowerShell
+
+
+
+```console
+$ Get-Command python
+
+C:\Users\user\code\awesome-project\.venv\Scripts\python
+```
+
+
+
+////
+
+ėĻ, íėŦ ėŦėŠëë `python` íëĄęˇ¸ë¨ė **ę°ė íę˛Ŋ ë´ëļė ėë ę˛**ė
ëë¤.
+
+Linuxė macOSėėë `which`, Windows PowerShellėėë `Get-Command` ëĒ
ë šė´ëĨŧ ėŦėŠíŠëë¤.
+
+ė´ ëĒ
ë šė´ë `PATH` íę˛Ŋ ëŗėė ė§ė ë ę˛ŊëĄë¤ė **ėėëëĄ íė**í늴ė `python`ė´ëŧë ė´ëĻė íëĄęˇ¸ë¨ė ė°žėĩëë¤.
+ė°žë ėĻė, í´ëš íëĄęˇ¸ë¨ė **ę˛ŊëĄëĨŧ ėļë Ĩ**íŠëë¤.
+
+ė¤ėí ė ė í°ë¯¸ëėė `python`ė ė¤ííė ë, ė¤ė ëĄ ė¤íëë "`python`"ė´ ė´ë¤ ę˛ė¸ė§ ė íí ė ė ėë¤ë ę˛ė
ëë¤.
+
+ë°ëŧė íėŦ ėŦë°ëĨ¸ ę°ė íę˛Ŋė ėëė§ íė¸í ė ėėĩëë¤.
+
+/// tip | í
+
+íëė ę°ė íę˛Ŋė íėąíí ë¤, í´ëš Pythonė ę°ė§ ėíėė **ë ë¤ëĨ¸ íëĄė í¸**ëĄ ė´ëíë ę˛ė íí ë°ėíŠëë¤.
+
+íė§ë§ ė´ë ė´ė íëĄė í¸ė ę°ė íę˛Ŋė ėë **ėëĒģë Python ė¤í íėŧ**ė ėŦėŠíę˛ ëė´ ė íëĄė í¸ę° **ė ė ėëíė§ ėė ė ėėĩëë¤.**
+
+꡸ëė íėŦ ė´ë¤ `python`ė´ ėŦėŠëęŗ ėëė§ íė¸í ė ėë ëĨë Ĩė ë§¤ė° ė ėŠíŠëë¤. đ¤
+
+///
+
+## ę°ė íę˛Ŋė ëšíėąííë ė´ė
+
+ėëĨŧ ë¤ė´ `ë§ë˛ėŦė ë(philosophers-stone)`ė´ëŧë íëĄė í¸ėė ėė
ė¤ė´ëŧęŗ í´ëŗ´ę˛ ėĩëë¤. ė´ë í´ëš **ę°ė íę˛Ŋė íėąí**íęŗ , íėí í¨í¤ė§ëĨŧ ė¤ėší늰 ėė
ė ė§ííŠëë¤.
+
+꡸ë°ë° ė´ė ë **ë¤ëĨ¸ íëĄė í¸**ė¸ `ėėĻėš´ë°ė ėŖė(prisoner-of-azkaban)`ė ėė
íęŗ ėļė´ėĄėĩëë¤.
+
+꡸ëė ꡸ íëĄė í¸ ëë í°ëĻŦëĄ ė´ëíŠëë¤:
+
+
+
+```console
+$ cd ~/code/prisoner-of-azkaban
+```
+
+
+
+ë§ėŊ `ë§ë˛ėŦė ë(philosophers-stone)`ė ę°ė íę˛Ŋė ëšíėąííė§ ėėë¤ëŠ´, í°ë¯¸ëėė `python`ė ė¤íí ë ėŦė í `ë§ë˛ėŦė ë(philosophers-stone)` ę°ė íę˛Ŋė Pythonė ėŦėŠíę˛ ëŠëë¤.
+
+
+
+```console
+$ cd ~/code/prisoner-of-azkaban
+
+$ python main.py
+
+// siriusëĨŧ ėíŦí¸íë ë° ė¤í¨íėĩëë¤. ė¤ėšëė´ ėė§ ėėė đą
+Traceback (most recent call last):
+ File "main.py", line 1, in
+ import sirius
+```
+
+
+
+íė§ë§ `ë§ë˛ėŦė ë(philosophers-stone)`ė ę°ė íę˛Ŋė ëšíėąíí ë¤ė, `ėėĻėš´ë°ė ėŖė(prisoner-of-azkaban)` íëĄė í¸ė ę°ė íę˛Ŋė íėąíí늴, ė´ė `python` ëĒ
ë šė´ë `ėėĻėš´ë°ė ėŖė(prisoner-of-azkaban)` ę°ė íę˛Ŋė Pythonė ėŦėŠíę˛ ëŠëë¤.
+
+
+
+```console
+$ cd ~/code/prisoner-of-azkaban
+
+// ė´ė ëë í°ëĻŦė ėė íė ėė´, ė´ëėë ę°ė íę˛Ŋė ëšíėąíí ė ėėĩëë¤. ë¤ëĨ¸ íëĄė í¸ ëë í°ëĻŦëĄ ė´ëí íėë ę´ė°Žėė đ
+$ deactivate
+
+// prisoner-of-azkaban/.venv ę°ė íę˛Ŋė íėąííŠëë¤ đ
+$ source .venv/bin/activate
+
+// ė´ė pythonė ė¤íí늴, ė´ ę°ė íę˛Ŋė ė¤ėšë sirius í¨í¤ė§ëĨŧ ė°žę˛ ëŠëë¤ â¨
+$ python main.py
+
+ëĒģë ė§ė ęž¸ë¯¸ęŗ ėėė ėėí ë§šė¸íŠëë¤.đ§
+ImportErrorë ė´ė ėėĩëë¤. đē
+```
+
+
+
+## ëėë¤
+
+ė´ ëŦ¸ėë ėŦëŦëļė´ Python íëĄė í¸ëĨŧ ėėíęŗ , **꡸ ë´ëļėė** ė´ëģę˛ ëėę°ëė§ ėë ¤ėŖŧë ę°ë¨í ę°ė´ëė
ëë¤.
+
+ę°ė íę˛Ŋ, í¨í¤ė§ ėėĄ´ėą(Requirements), íëĄė í¸ëĨŧ ę´ëĻŦíë ë°Šë˛ėë ė´ ė¸ėë ë¤ėí **ëė**ë¤ė´ ėĄ´ėŦíŠëë¤.
+
+ë§ėŊ ė¤ëšę° ëėë¤ëŠ´, **íëĄė í¸ ė 랴**, í¨í¤ė§ ėėĄ´ėą, ę°ė íę˛Ŋ ëąė íĩíŠė ėŧëĄ **ę´ëĻŦ**í ė ėë ëęĩŦëĨŧ ė¨ëŗ´ë ę˛ë ėĸėĩëë¤. ęˇ¸ë´ ë ėļė˛íë ëęĩŦę° ë°ëĄ uv ė
ëë¤.
+
+`uv`ë ë¤ėí 기ëĨė ė§ėíŠëë¤:
+
+* ë¤ėí ë˛ė ė **Python ė¤ėš**
+* ę° íëĄė í¸ ëŗ **ę°ė íę˛Ŋ ę´ëĻŦ**
+* **í¨í¤ė§ ė¤ėš**
+* íëĄė í¸ė **ėėĄ´ėąęŗŧ ë˛ė ** ę´ëĻŦ
+* ė¤ėšë í¨í¤ė§ë¤ęŗŧ ꡸ ë˛ė ė **ė íí ęŗ ė (lock)**í´ė,ę°ë° íę˛Ŋęŗŧ ė´ė íę˛Ŋė´ ėė í ëėŧíę˛ ėëí ė ėëëĄ ëŗ´ėĨ
+* ė´ ė¸ėë ë¤ėí 기ëĨė ė§ė
+
+## 결ëĄ
+
+ėŦ기ęšė§ ëǍë ėŊęŗ ė´í´íë¤ëŠ´, ė´ė ë§ė ę°ë°ėë¤ëŗ´ë¤ ę°ė íę˛Ŋė **í¨ėŦ ë ęšė´ ėę˛ ė´í´**íę˛ ëė
¨ėĩëë¤. đ¤
+
+ė´ë° ė¸ëļė ė¸ ë´ėŠė ėęŗ ėėŧ늴, ė¸ė ę° ëŗĩėĄí´ ëŗ´ė´ë ëŦ¸ė ëĨŧ ëë˛ęš
í ë ëļëĒ
í í° ëėė´ ë ę˛ė
ëë¤. ė´ė ë **ė´ ëǍë ę˛ë¤ė´ ë´ëļėė ė´ëģę˛ ėëíëė§** ėęŗ ė기 ëëŦ¸ė
ëë¤. đ
diff --git a/docs/pt/docs/advanced/generate-clients.md b/docs/pt/docs/advanced/generate-clients.md
index 04d7c0071..dc6b29511 100644
--- a/docs/pt/docs/advanced/generate-clients.md
+++ b/docs/pt/docs/advanced/generate-clients.md
@@ -22,7 +22,7 @@ E isso mostra o verdadeiro compromisso deles com o FastAPI e sua **comunidade**
Por exemplo, vocÃĒ pode querer experimentar:
-* Speakeasy
+* Speakeasy
* Stainless
* liblab
diff --git a/docs/pt/docs/async.md b/docs/pt/docs/async.md
index 0d6bdbf0e..4425eba77 100644
--- a/docs/pt/docs/async.md
+++ b/docs/pt/docs/async.md
@@ -40,7 +40,7 @@ def results():
---
-Se sua aplicaÃ§ÃŖo (de alguma forma) nÃŖo tem que se comunicar com nada mais e tem que esperar que o respondam, use `async def`.
+Se sua aplicaÃ§ÃŖo (de alguma forma) nÃŖo tem que se comunicar com nada mais e esperar que o respondam, use `async def`.
---
@@ -52,7 +52,7 @@ Se vocÃĒ simplesmente nÃŖo sabe, use apenas `def`.
De qualquer forma, em ambos os casos acima, FastAPI irÃĄ trabalhar assincronamente e ser extremamente rÃĄpido.
-Seguindo os passos acima, ele serÃĄ capaz de fazer algumas otimizaçÃĩes de performance.
+Mas, seguindo os passos acima, ele serÃĄ capaz de fazer algumas otimizaçÃĩes de performance.
## Detalhes TÊcnicos
@@ -66,36 +66,36 @@ Vamos ver aquela frase por partes na seÃ§ÃŖo abaixo:
## CÃŗdigo assÃncrono
-CÃŗdigo assÃncrono apenas significa que a linguagem đŦ tem um jeito de dizer para o computador / programa đ¤ que em certo ponto, ele đ¤ terÃĄ que esperar por *algo* para finalizar em outro lugar. Vamos dizer que esse *algo* seja chamado "arquivo lento" đ.
+CÃŗdigo assÃncrono apenas significa que a linguagem đŦ tem um jeito de dizer para o computador / programa đ¤ que em certo ponto do cÃŗdigo, ele đ¤ terÃĄ que esperar *algo* finalizar em outro lugar. Vamos dizer que esse *algo* seja chamado "arquivo lento" đ.
-EntÃŖo, durante esse tempo, o computador pode ir e fazer outro trabalho, enquanto o "arquivo lento" đ termine.
+EntÃŖo, durante esse tempo, o computador pode ir e fazer outro trabalho, enquanto o "arquivo lento" đ termina.
-EntÃŖo o computador / programa đ¤ irÃĄ voltar toda hora que tiver uma chance porquÃĒ ele ainda estÃĄ esperando o "arquivo lento", ou ele đ¤ nunca irÃĄ terminar todo o trabalho que tem atÊ esse ponto. E ele đ¤ irÃĄ ver se alguma das tarefas que estava esperando jÃĄ terminaram, fazendo o que quer que tinham que fazer.
+EntÃŖo o computador / programa đ¤ irÃĄ voltar sempre que tiver uma chance, seja porque ele estÃĄ esperando novamente, ou quando ele đ¤ terminar todo o trabalho que tem atÊ esse ponto. E ele đ¤ irÃĄ ver se alguma das tarefas que estava esperando jÃĄ terminaram de fazer o que quer que tinham que fazer.
-Depois, ele đ¤ pega a primeira tarefa para finalizar (vamos dizer, nosso "arquivo lento" đ) e continua o que ele tem que fazer com isso.
+Depois, ele đ¤ pega a primeira tarefa para finalizar (vamos dizer, nosso "arquivo lento" đ) e continua o que tem que fazer com ela.
-Esse "esperar por algo" normalmente se refere a operaçÃĩes I/O que sÃŖo relativamente "lentas" (comparadas a velocidade do processador e da memÃŗria RAM), como esperar por:
+Esse "esperar por algo" normalmente se refere a operaçÃĩes I/O que sÃŖo relativamente "lentas" (comparadas à velocidade do processador e da memÃŗria RAM), como esperar por:
* dados do cliente para serem enviados atravÊs da rede
-* dados enviados pelo seu programa para serem recebidos pelo clente atravÊs da rede
-* conteÃēdo de um arquivo no disco pra ser lido pelo sistema e entregar ao seu programa
+* dados enviados pelo seu programa serem recebidos pelo clente atravÊs da rede
+* conteÃēdo de um arquivo no disco ser lido pelo sistema e entregue ao seu programa
* conteÃēdo que seu programa deu ao sistema para ser escrito no disco
-* uma operaÃ§ÃŖo remota API
-* uma operaÃ§ÃŖo no banco de dados para finalizar
-* uma solicitaÃ§ÃŖo no banco de dados esperando o retorno do resultado
+* uma operaÃ§ÃŖo em uma API remota
+* uma operaÃ§ÃŖo no banco de dados finalizar
+* uma solicitaÃ§ÃŖo no banco de dados retornar o resultado
* etc.
-Enquanto o tempo de execuÃ§ÃŖo Ê consumido mais pela espera das operaçÃĩes I/O , essas operaçÃĩes sÃŖo chamadas de operaçÃĩes "limitadas por I/O".
+Quanto o tempo de execuÃ§ÃŖo Ê consumido majoritariamente pela espera de operaçÃĩes I/O , essas operaçÃĩes sÃŖo chamadas operaçÃĩes "limitadas por I/O".
-Isso Ê chamado de "assÃncrono" porquÃĒ o computador / programa nÃŖo tem que ser "sincronizado" com a tarefa lenta, esperando pelo exato momento que a tarefa finalize, enquanto nÃŖo faz nada, para ser capaz de pegar o resultado da tarefa e dar continuidade ao trabalho.
+Isso Ê chamado de "assÃncrono" porque o computador / programa nÃŖo tem que ser "sincronizado" com a tarefa lenta, esperando pelo momento exato em que a tarefa finaliza, enquanto nÃŖo faz nada, para ser capaz de pegar o resultado da tarefa e dar continuidade ao trabalho.
-Ao invÊs disso, sendo um sistema "assÃncrono", uma vez finalizada, a tarefa pode esperar um pouco (alguns microssegundos) para que o computador / programa finalize o que quer que esteja fazendo,e entÃŖo volte para pegar o resultado e continue trabalhando com ele.
+Ao invÊs disso, sendo um sistema "assÃncrono", uma vez finalizada, a tarefa pode esperar na fila um pouco (alguns microssegundos) para que o computador / programa finalize o que quer que esteja fazendo, e entÃŖo volte para pegar o resultado e continue trabalhando com ele.
-Para "sÃncrono" (contrÃĄrio de "assÃncrono") tambÊm Ê utilizado o termo "sequencial", porquÃĒ o computador / programa segue todos os passos, na sequÃĒncia, antes de trocar para uma tarefa diferente, mesmo se alguns passos envolvam esperar.
+Para "sÃncrono" (contrÃĄrio de "assÃncrono") tambÊm Ê utilizado o termo "sequencial", porquÃĒ o computador / programa segue todos os passos, em sequÃĒncia, antes de trocar para uma tarefa diferente, mesmo se alguns passos envolvam esperar.
### ConcorrÃĒncia e hambÃērgueres
-Essa idÊia de cÃŗdigo **assÃncrono** descrito acima Ê algo à s vezes chamado de **"concorrÃĒncia"**. E Ê diferente de **"paralelismo"**.
+Essa idÊia de cÃŗdigo **assÃncrono** descrita acima Ê à s vezes chamado de **"concorrÃĒncia"**. Isso Ê diferente de **"paralelismo"**.
**ConcorrÃĒncia** e **paralelismo** ambos sÃŖo relacionados a "diferentes coisas acontecendo mais ou menos ao mesmo tempo".
@@ -105,117 +105,115 @@ Para ver essa diferença, imagine a seguinte histÃŗria sobre hambÃērgueres:
### HambÃērgueres concorrentes
-VocÃĒ vai com seu _crush_ :heart_eyes: na lanchonete, fica na fila enquanto o caixa pega os pedidos das pessoas na sua frente.
+VocÃĒ vai com seu _crush_ na lanchonete, e fica na fila enquanto o caixa pega os pedidos das pessoas na sua frente. đ
-EntÃŖo chega a sua vez, vocÃĒ pede dois saborosos hambÃērgueres para vocÃĒ e seu _crush_ :heart_eyes:.
+EntÃŖo chega a sua vez, vocÃĒ pede dois saborosos hambÃērgueres para vocÃĒ e seu _crush_. đđ
-VocÃĒ paga.
+O caixa diz alguma coisa para o cozinheiro na cozinha para que eles saivam que tÃĒm que preparar seus hambÃērgueres (mesmo que ele esteja atualmente preparando os lanches dos outros clientes).
-O caixa diz alguma coisa para o cara na cozinha para que ele tenha que preparar seus hambÃērgueres (mesmo embora ele esteja preparando os lanches dos outros clientes).
+VocÃĒ paga. đ¸
O caixa te entrega seu nÃēmero de chamada.
-Enquanto vocÃĒ espera, vocÃĒ vai com seu _crush_ :heart_eyes: e pega uma mesa, senta e conversa com seu _crush_ :heart_eyes: por um bom tempo (como seus hambÃērgueres sÃŖo muito saborosos, leva um tempo para serem preparados).
+Enquanto vocÃĒ espera, vocÃĒ vai com seu _crush_ e pega uma mesa, senta e conversa com seu _crush_ por um bom tempo (jÃĄ que seus hambÃērgueres sÃŖo muito saborosos, e leva um tempo para serem preparados).
-Enquanto vocÃĒ estÃĄ sentado na mesa com seu _crush_ :heart_eyes:, esperando os hambÃērgueres, vocÃĒ pode gastar o tempo admirando como lindo, maravilhoso e esperto Ê seu _crush_ :heart_eyes:.
+JÃĄ que vocÃĒ estÃĄ sentado na mesa com seu _crush_, esperando os hambÃērgueres, vocÃĒ pode passar esse tempo admirando o quÃŖo lindo, maravilhoso e esperto Ê seu _crush_ â¨đâ¨.
-Enquanto espera e conversa com seu _crush_ :heart_eyes:, de tempos em tempos, vocÃĒ verifica o nÃēmero de chamada exibido no balcÃŖo para ver se jÃĄ Ê sua vez.
+Enquanto espera e conversa com seu _crush_, de tempos em tempos, vocÃĒ verifica o nÃēmero da chamada exibido no balcÃŖo para ver se jÃĄ Ê sua vez.
-EntÃŖo a certo ponto, Ê finalmente sua vez. VocÃĒ vai no balcÃŖo, pega seus hambÃērgueres e volta para a mesa.
+EntÃŖo em algum momento, Ê finalmente sua vez. VocÃĒ vai ao balcÃŖo, pega seus hambÃērgueres e volta para a mesa.
-VocÃĒ e seu _crush_ :heart_eyes: comem os hambÃērgueres e aproveitam o tempo.
+VocÃĒ e seu _crush_ comem os hambÃērgueres e aproveitam o tempo. â¨
---
-Imagine que vocÃĒ seja o computador / programa nessa histÃŗria.
+Imagine que vocÃĒ seja o computador / programa nessa histÃŗria.
-Enquanto vocÃĒ estÃĄ na fila, tranquilo, esperando por sua vez, nÃŖo estÃĄ fazendo nada "produtivo". Mas a fila Ê rÃĄpida porquÃĒ o caixa sÃŗ estÃĄ pegando os pedidos, entÃŖo estÃĄ tudo bem.
+Enquanto vocÃĒ estÃĄ na fila, vocÃĒ estÃĄ somente ocioso đ´, esperando por sua vez, sem fazer nada muito "produtivo". Mas a fila Ê rÃĄpida porque o caixa sÃŗ estÃĄ pegando os pedidos (nÃŖo os preparando), entÃŖo estÃĄ tudo bem.
-EntÃŖo, quando Ê sua vez, vocÃĒ faz o trabalho "produtivo" de verdade, vocÃĒ processa o menu, decide o que quer, pega a escolha de seu _crush_ :heart_eyes:, paga, verifica se entregou o valor correto em dinheiro ou cartÃŖo de crÊdito, verifica se foi cobrado corretamente, verifica se seu pedido estÃĄ correto etc.
+EntÃŖo, quando Ê sua vez, vocÃĒ faz trabalho realmente "produtivo", vocÃĒ processa o menu, decide o que quer, pega a escolha de seu _crush_, paga, verifica se entregou o cartÃŖo ou a cÊdula correta, verifica se foi cobrado corretamente, verifica se seu pedido estÃĄ correto etc.
-Mas entÃŖo, embora vocÃĒ ainda nÃŖo tenha os hambÃērgueres, seu trabalho no caixa estÃĄ "pausado", porquÃĒ vocÃĒ tem que esperar seus hambÃērgueres estarem prontos.
+Mas entÃŖo, embora vocÃĒ ainda nÃŖo tenha os hambÃērgueres, seu trabalho no caixa estÃĄ "pausado" â¸, porque vocÃĒ tem que esperar đ seus hambÃērgueres ficarem prontos.
-Mas enquanto vocÃĒ se afasta do balcÃŖo e senta na mesa com o nÃēmero da sua chamada, vocÃĒ pode trocar sua atenÃ§ÃŖo para seu _crush_ :heart_eyes:, e "trabalhar" nisso. EntÃŖo vocÃĒ estÃĄ novamente fazendo algo muito "produtivo", como flertar com seu _crush_ :heart_eyes:.
+Contudo, à medida que vocÃĒ se afasta do balcÃŖo e senta na mesa, com um nÃēmero para sua chamada, vocÃĒ pode trocar đ sua atenÃ§ÃŖo para seu _crush_, e "trabalhar" ⯠đ¤ nisso. EntÃŖo vocÃĒ estÃĄ novamente fazendo algo muito "produtivo", como flertar com seu _crush_ đ.
-EntÃŖo o caixa diz que "seus hambÃērgueres estÃŖo prontos" colocando seu nÃēmero no balcÃŖo, mas vocÃĒ nÃŖo corre que nem um maluco imediatamente quando o nÃēmero exibido Ê o seu. VocÃĒ sabe que ninguÊm irÃĄ roubar seus hambÃērgueres porquÃĒ vocÃĒ tem o nÃēmero de chamada, e os outros tem os nÃēmeros deles.
+EntÃŖo o caixa đ diz que "seus hambÃērgueres estÃŖo prontos" colocando seu nÃēmero no balcÃŖo, mas vocÃĒ nÃŖo corre que nem um maluco imediatamente quando o nÃēmero exibido Ê o seu. VocÃĒ sabe que ninguÊm irÃĄ roubar seus hambÃērgueres porque vocÃĒ tem o seu nÃēmero da chamada, e os outros tÃĒm os deles.
-EntÃŖo vocÃĒ espera que seu _crush_ :heart_eyes: termine a histÃŗria que estava contando (terminar o trabalho atual / tarefa sendo processada), sorri gentilmente e diz que vocÃĒ estÃĄ indo buscar os hambÃērgueres.
+EntÃŖo vocÃĒ espera seu _crush_ terminar a histÃŗria que estava contando (terminar o trabalho atual ⯠/ tarefa sendo processada đ¤), sorri gentilmente e diz que vocÃĒ estÃĄ indo buscar os hambÃērgueres.
-EntÃŖo vocÃĒ vai no balcÃŖo, para a tarefa inicial que agora estÃĄ finalizada, pega os hambÃērgueres, e leva para a mesa. Isso finaliza esse passo / tarefa da interaÃ§ÃŖo com o balcÃŖo. Agora Ê criada uma nova tarefa, "comer hambÃērgueres", mas a tarefa anterior, "pegar os hambÃērgueres" jÃĄ estÃĄ finalizada.
+EntÃŖo vocÃĒ vai ao balcÃŖo đ, para a tarefa inicial que agora estÃĄ finalizadaâ¯, pega os hambÃērgueres, agradece, e leva-os para a mesa. Isso finaliza esse passo / tarefa da interaÃ§ÃŖo com o balcÃŖo âš. Isso, por sua vez, cria uma nova tarefa, a de "comer hambÃērgueres" đ â¯, mas a tarefa anterior de "pegar os hambÃērgueres" jÃĄ estÃĄ finalizada âš.
### HambÃērgueres paralelos
-VocÃĒ vai com seu _crush_ :heart_eyes: em uma lanchonete paralela.
+Agora vamos imaginar que esses nÃŖo sÃŖo "HambÃērgueres Concorrentes", e sim "HambÃērgueres Paralelos"
-VocÃĒ fica na fila enquanto alguns (vamos dizer 8) caixas pegam os pedidos das pessoas na sua frente.
+VocÃĒ vai com seu _crush_ na lanchonete paralela.
-Todo mundo antes de vocÃĒ estÃĄ esperando pelos hambÃērgueres estarem prontos antes de deixar o caixa porquÃĒ cada um dos 8 caixas vai e prepara o hambÃērguer antes de pegar o prÃŗximo pedido.
+VocÃĒ fica na fila enquanto vÃĄrios (vamos dizer 8) caixas que tambÊm sÃŖo cozinheiros pegam os pedidos das pessoas na sua frente.
-EntÃŖo Ê finalmente sua vez, e pede 2 hambÃērgueres muito saborosos para vocÃĒ e seu _crush_ :heart_eyes:.
+Todo mundo na sua frente estÃĄ esperando seus hambÃērgueres ficarem prontos antes de deixar o caixa porque cada um dos 8 caixas vai e prepara o hambÃērguer logo apÃŗs receber o pedido, antes de pegar o prÃŗximo pedido.
-VocÃĒ paga.
+EntÃŖo Ê finalmente sua vez, vocÃĒ pede 2 hambÃērgueres muito saborosos para vocÃĒ e seu _crush_.
+
+VocÃĒ paga đ¸.
O caixa vai para a cozinha.
-VocÃĒ espera, na frente do balcÃŖo, para que ninguÊm pegue seus hambÃērgueres antes de vocÃĒ, jÃĄ que nÃŖo tem nÃēmeros de chamadas.
+VocÃĒ espera, na frente do balcÃŖo đ, para que ninguÊm pegue seus hambÃērgueres antes de vocÃĒ, jÃĄ que nÃŖo tem nÃēmeros de chamadas.
-Enquanto vocÃĒ e seu _crush_ :heart_eyes: estÃŖo ocupados nÃŖo permitindo que ninguÊm passe a frente e pegue seus hambÃērgueres assim que estiverem prontos, vocÃĒ nÃŖo pode dar atenÃ§ÃŖo ao seu _crush_ :heart_eyes:.
+Como vocÃĒ e seu _crush_ estÃŖo ocupados nÃŖo permitindo que ninguÊm passe na frente e pegue seus hambÃērgueres assim que estiverem prontos, vocÃĒ nÃŖo pode dar atenÃ§ÃŖo ao seu _crush_. đ
-Isso Ê trabalho "sÃncrono", vocÃĒ estÃĄ "sincronizado" com o caixa / cozinheiro. VocÃĒ tem que esperar e estar lÃĄ no exato momento que o caixa / cozinheiro terminar os hambÃērgueres e dÃĄ-los a vocÃĒ, ou entÃŖo, outro alguÊm pode pegÃĄ-los.
+Isso Ê trabalho "sÃncrono", vocÃĒ estÃĄ "sincronizado" com o caixa / cozinheirođ¨âđŗ. VocÃĒ tem que esperar đ e estar lÃĄ no exato momento que o caixa / cozinheiro đ¨âđŗ terminar os hambÃērgueres e os der a vocÃĒ, ou entÃŖo, outro alguÊm pode pegÃĄ-los.
-EntÃŖo seu caixa / cozinheiro finalmente volta com seus hambÃērgueres, depois de um longo tempo esperando por eles em frente ao balcÃŖo.
+EntÃŖo seu caixa / cozinheiro đ¨âđŗ finalmente volta com seus hambÃērgueres, depois de um longo tempo esperando đ por eles em frente ao balcÃŖo.
-VocÃĒ pega seus hambÃērgueres e vai para a mesa com seu _crush_ :heart_eyes:.
+VocÃĒ pega seus hambÃērgueres e vai para a mesa com seu _crush_.
-VocÃĒs comem os hambÃērgueres, e o trabalho estÃĄ terminado.
+VocÃĒs comem os hambÃērgueres, e o trabalho estÃĄ terminado. âš
-NÃŖo houve muita conversa ou flerte jÃĄ que a maior parte do tempo foi gasto esperando os lanches na frente do balcÃŖo.
+NÃŖo houve muita conversa ou flerte jÃĄ que a maior parte do tempo foi gasto esperando đ na frente do balcÃŖo. đ
---
-Nesse cenÃĄrio dos hambÃērgueres paralelos, vocÃĒ ÃŠ um computador / programa com dois processadores (vocÃĒ e seu _crush_ :heart_eyes:), ambos esperando e dedicando a atenÃ§ÃŖo de estar "esperando no balcÃŖo" por um bom tempo.
+Nesse cenÃĄrio dos hambÃērgueres paralelos, vocÃĒ ÃŠ um computador / programa com dois processadores (vocÃĒ e seu _crush_), ambos esperando đ e dedicando sua atenÃ§ÃŖo ⯠"esperando no balcÃŖo" đ por um bom tempo.
-A lanchonete paralela tem 8 processadores (caixas / cozinheiros). Enquanto a lanchonete dos hambÃērgueres concorrentes tinham apenas 2 (um caixa e um cozinheiro).
+A lanchonete paralela tem 8 processadores (caixas / cozinheiros), enquanto a lanchonete dos hambÃērgueres concorrentes tinha apenas 2 (um caixa e um cozinheiro).
-Ainda assim, a Ãēltima experiÃĒncia nÃŖo foi a melhor.
+Ainda assim, a experiÃĒncia final nÃŖo foi a melhor. đ
---
-Essa poderia ser a histÃŗria paralela equivalente aos hambÃērgueres.
+Essa seria o equivalente paralelo à histÃŗrio dos hambÃērgueres. đ
Para um exemplo "mais real", imagine um banco.
-AtÊ recentemente, a maioria dos bancos tinha muitos caixas e uma grande fila.
+AtÊ recentemente, a maioria dos bancos tinham muitos caixas đ¨âđŧđ¨âđŧđ¨âđŧđ¨âđŧ e uma grande fila đđđđđđđđ.
-Todos os caixas fazendo todo o trabalho, um cliente apÃŗs o outro.
+Todos os caixas fazendo todo o trabalho, um cliente apÃŗs o outro đ¨âđŧâ¯.
-E vocÃĒ tinha que esperar na fila por um longo tempo ou poderia perder a vez.
+E vocÃĒ tinha que esperar đ na fila por um longo tempo ou poderia perder a vez.
-VocÃĒ provavelmente nÃŖo gostaria de levar seu _crush_ :heart_eyes: com vocÃĒ para um rolezinho no banco.
+VocÃĒ provavelmente nÃŖo gostaria de levar seu _crush_ đ com vocÃĒ para um rolezinho no banco đĻ.
### ConclusÃŖo dos hambÃērgueres
-Nesse cenÃĄrio dos "hambÃērgueres com seu _crush_ :heart_eyes:", como tem muita espera, faz mais sentido ter um sistema concorrente.
+Nesse cenÃĄrio dos "hambÃērgueres com seu _crush_", como tem muita espera, faz mais sentido ter um sistema concorrente â¸đâ¯.
Esse Ê o caso da maioria das aplicaçÃĩes web.
-Geralmente sÃŖo muitos usuÃĄrios, e seu servidor estÃĄ esperando pelas suas conexÃĩes nÃŖo tÃŖo boas para enviar as requisiçÃĩes.
-
-E entÃŖo esperando novamente pelas respostas voltarem.
-
-Essa "espera" Ê medida em microssegundos, e ainda assim, somando tudo, Ê um monte de espera no final.
+Muitos, muitos usuÃĄrios, mas seu servidor estÃĄ esperando đ pela sua conexÃŖo nÃŖo tÃŖo boa enviar suas requisiçÃĩes.
-Por isso que faz muito mais sentido utilizar cÃŗdigo assÃncrono para APIs web.
+E entÃŖo esperando đ novamente as respostas voltarem.
-A maioria dos frameworks Python existentes mais populares (incluindo Flask e Django) foram criados antes que os novos recursos assÃncronos existissem em Python. EntÃŖo, os meios que eles podem ser colocados em produÃ§ÃŖo para suportar execuÃ§ÃŖo paralela mais a forma antiga de execuÃ§ÃŖo assÃncrona nÃŖo sÃŖo tÃŖo poderosos quanto as novas capacidades.
+Essa "espera" đ Ê medida em microssegundos, mas ainda assim, somando tudo, Ê um monte de espera no final.
-Mesmo embora a especificaÃ§ÃŖo principal para web assÃncrono em Python (ASGI) foi desenvolvida no Django, para adicionar suporte para WebSockets.
+Por isso que faz bastante sentido utilizar cÃŗdigo assÃncrono â¸đ⯠para APIs web.
-Esse tipo de assincronicidade Ê o que fez NodeJS popular (embora NodeJS nÃŖo seja paralelo) e que essa seja a força do Go como uma linguagem de programa.
+Esse tipo de assincronicidade Ê o que fez NodeJS popular (embora NodeJS nÃŖo seja paralelo) e essa Ê a força do Go como uma linguagem de programaÃ§ÃŖo.
E esse Ê o mesmo nÃvel de performance que vocÃĒ tem com o **FastAPI**.
-E como vocÃĒ pode ter paralelismo e sincronicidade ao mesmo tempo, vocÃĒ tem uma maior performance do que a maioria dos frameworks NodeJS testados e lado a lado com Go, que Ê uma linguagem compilada prÃŗxima ao C (tudo graças ao Starlette) .
+E como vocÃĒ pode ter paralelismo e assincronicidade ao mesmo tempo, vocÃĒ tem uma maior performance do que a maioria dos frameworks NodeJS testados e lado a lado com Go, que Ê uma linguagem compilada, mais prÃŗxima ao C (tudo graças ao Starlette) .
### ConcorrÃĒncia Ê melhor que paralelismo?
@@ -225,64 +223,64 @@ ConcorrÃĒncia Ê diferente de paralelismo. E Ê melhor em cenÃĄrios **especÃfic
EntÃŖo, para equilibrar tudo, imagine a seguinte historinha:
-> VocÃĒ tem que limpar uma grande casa suja.
+> VocÃĒ tem que limpar uma casa grande e suja.
*Sim, essa Ê toda a histÃŗria*.
---
-NÃŖo hÃĄ espera em lugar algum, apenas um monte de trabalho para ser feito, em mÃēltiplos cômodos da casa.
+NÃŖo hÃĄ espera đ em lugar algum, apenas um monte de trabalho para ser feito, em mÃēltiplos cômodos da casa.
-VocÃĒ poderia ter chamadas como no exemplo dos hambÃērgueres, primeiro a sala de estar, entÃŖo a cozinha, mas vocÃĒ nÃŖo estÃĄ esperando por nada, apenas limpar e limpar, as chamadas nÃŖo afetariam em nada.
+VocÃĒ poderia ter turnos como no exemplo dos hambÃērgueres, primeiro a sala de estar, entÃŖo a cozinha, mas como vocÃĒ nÃŖo estÃĄ esperando por nada, apenas limpando e limpando, as chamadas nÃŖo afetariam em nada.
-Levaria o mesmo tempo para finalizar com ou sem chamadas (concorrÃĒncia) e vocÃĒ teria feito o mesmo tanto de trabalho.
+Levaria o mesmo tempo para finalizar com ou sem turnos (concorrÃĒncia) e vocÃĒ teria feito o mesmo tanto de trabalho.
Mas nesse caso, se vocÃĒ trouxesse os 8 ex-caixas / cozinheiros / agora-faxineiros, e cada um deles (mais vocÃĒ) pudessem dividir a casa para limpÃĄ-la, vocÃĒs fariam toda a limpeza em **paralelo**, com a ajuda extra, e terminariam muito mais cedo.
Nesse cenÃĄrio, cada um dos faxineiros (incluindo vocÃĒ) poderia ser um processador, fazendo a sua parte do trabalho.
-E a maior parte do tempo de execuÃ§ÃŖo Ê tomada por trabalho (ao invÊs de ficar esperando), e o trabalho em um computador Ê feito pela CPU , que podem gerar problemas que sÃŖo chamados de "limite de CPU".
+E a maior parte do tempo de execuÃ§ÃŖo Ê tomada por trabalho real (ao invÊs de ficar esperando), e o trabalho em um computador Ê feito pela CPU . Eles chamam esses problemas de "limitados por CPU".
---
-Exemplos comuns de limite de CPU sÃŖo coisas que exigem processamento matemÃĄtico complexo.
+Exemplos comuns de operaçÃĩes limitadas por CPU sÃŖo coisas que exigem processamento matemÃĄtico complexo.
Por exemplo:
* **Processamento de ÃĄudio** ou **imagem**
-* **VisÃŖo do Computador**: uma imagem Ê composta por milhÃĩes de pixels, cada pixel tem 3 valores (cores, processamento que normalmente exige alguma computaÃ§ÃŖo em todos esses pixels ao mesmo tempo)
+* **VisÃŖo Computacional**: uma imagem Ê composta por milhÃĩes de pixels, cada pixel tem 3 valores / cores, processar isso normalmente exige alguma computaÃ§ÃŖo em todos esses pixels ao mesmo tempo
-* **Machine Learning**: Normalmente exige muita multiplicaÃ§ÃŖo de matrizes e vetores. Pense numa grande folha de papel com nÃēmeros e multiplicando todos eles juntos e ao mesmo tempo.
+* **Machine Learning**: Normalmente exige muita multiplicaÃ§ÃŖo de matrizes e vetores. Pense numa grande planilha com nÃēmeros e em multiplicar todos eles juntos e ao mesmo tempo.
-* **Deep Learning**: Esse Ê um subcampo do Machine Learning, entÃŖo o mesmo se aplica. A diferença Ê que nÃŖo hÃĄ apenas uma grande folha de papel com nÃēmeros para multiplicar, mas um grande conjunto de folhas de papel, e em muitos casos, vocÃĒ utiliza um processador especial para construir e/ou usar modelos.
+* **Deep Learning**: Esse Ê um subcampo do Machine Learning, entÃŖo, o mesmo se aplica. A diferença Ê que nÃŖo hÃĄ apenas uma grande planilha com nÃēmeros para multiplicar, mas um grande conjunto delas, e em muitos casos, vocÃĒ utiliza um processador especial para construir e/ou usar esses modelos.
### ConcorrÃĒncia + Paralelismo: Web + Machine learning
Com **FastAPI** vocÃĒ pode levar a vantagem da concorrÃĒncia que Ê muito comum para desenvolvimento web (o mesmo atrativo de NodeJS).
-Mas vocÃĒ tambÊm pode explorar os benefÃcios do paralelismo e multiprocessamento (tendo mÃēltiplos processadores rodando em paralelo) para trabalhos pesados que geram **limite de CPU** como aqueles em sistemas de Machine Learning.
+Mas vocÃĒ tambÊm pode explorar os benefÃcios do paralelismo e multiprocessamento (tendo mÃēltiplos processadores rodando em paralelo) para trabalhos **limitados por CPU** como aqueles em sistemas de Machine Learning.
-Isso, mais o simples fato que Python Ê a principal linguagem para **Data Science**, Machine Learning e especialmente Deep Learning, faz do FastAPI uma Ãŗtima escolha para APIs web e aplicaçÃĩes com Data Science / Machine Learning (entre muitas outras).
+Isso, somado ao simples fato que Python Ê a principal linguagem para **Data Science**, Machine Learning e especialmente Deep Learning, faz do FastAPI uma Ãŗtima escolha para APIs web e aplicaçÃĩes com Data Science / Machine Learning (entre muitas outras).
Para ver como alcançar esse paralelismo em produÃ§ÃŖo veja a seÃ§ÃŖo sobre [Deployment](deployment/index.md){.internal-link target=_blank}.
## `async` e `await`
-VersÃĩes modernas do Python tem um modo muito intuitivo para definir cÃŗdigo assÃncrono. Isso faz parecer normal o cÃŗdigo "sequencial" e fazer o "esperar" para vocÃĒ nos momentos certos.
+VersÃĩes modernas do Python tÃĒm um modo muito intuitivo para definir cÃŗdigo assÃncrono. Isso faz parecer do mesmo jeito do cÃŗdigo normal "sequencial" e fazer a "espera" para vocÃĒ nos momentos certos.
-Quando tem uma operaÃ§ÃŖo que exigirÃĄ espera antes de dar os resultados e tem suporte para esses recursos Python, vocÃĒ pode escrever assim:
+Quando tem uma operaÃ§ÃŖo que exigirÃĄ espera antes de dar os resultados e tem suporte para esses novos recursos do Python, vocÃĒ pode escrever assim:
```Python
burgers = await get_burgers(2)
```
-A chave aqui Ê o `await`. Ele diz ao Python que ele tem que esperar por `get_burgers(2)` para finalizar suas coisas antes de armazenar os resultados em `burgers`. Com isso, o Python saberÃĄ que ele pode ir e fazer outras coisas nesse meio tempo (como receber outra requisiÃ§ÃŖo).
+A chave aqui Ê o `await`. Ele diz ao Python que ele tem que esperar por `get_burgers(2)` finalizar suas coisas đ antes de armazenar os resultados em `burgers`. Com isso, o Python saberÃĄ que ele pode ir e fazer outras coisas đ ⯠nesse meio tempo (como receber outra requisiÃ§ÃŖo).
Para o `await` funcionar, tem que estar dentro de uma funÃ§ÃŖo que suporte essa assincronicidade. Para fazer isso, apenas declare a funÃ§ÃŖo com `async def`:
```Python hl_lines="1"
async def get_burgers(number: int):
- # Fazer alguma coisa assÃncrona para criar os hambÃērgueres
+ # Faz alguma coisa assÃncrona para criar os hambÃērgueres
return burgers
```
@@ -295,9 +293,9 @@ def get_sequential_burgers(number: int):
return burgers
```
-Com `async def`, o Python sabe que, dentro dessa funÃ§ÃŖo, tem que estar ciente das expressÃĩes `await`, e que isso pode "pausar" a execuÃ§ÃŖo dessa funÃ§ÃŖo, e poderÃĄ fazer outra coisa antes de voltar.
+Com `async def`, o Python sabe que, dentro dessa funÃ§ÃŖo, ele deve estar ciente das expressÃĩes `await`, e que isso poderÃĄ "pausar" ⸠a execuÃ§ÃŖo dessa funÃ§ÃŖo, e ir fazer outra coisa đ antes de voltar.
-Quando vocÃĒ quiser chamar uma funÃ§ÃŖo `async def`, vocÃĒ tem que "esperar". EntÃŖo, isso nÃŖo funcionarÃĄ:
+Quando vocÃĒ quiser chamar uma funÃ§ÃŖo `async def`, vocÃĒ tem que "esperar" ela. EntÃŖo, isso nÃŖo funcionarÃĄ:
```Python
# Isso nÃŖo irÃĄ funcionar, porquÃĒ get_burgers foi definido com: async def
@@ -319,13 +317,24 @@ async def read_burgers():
VocÃĒ deve ter observado que `await` pode ser usado somente dentro de funçÃĩes definidas com `async def`.
-Mas ao mesmo tempo, funçÃĩes definidas com `async def` tem que ser aguardadas. EntÃŖo, funçÃĩes com `async def` pdem ser chamadas somente dentro de funçÃĩes definidas com `async def` tambÊm.
+Mas ao mesmo tempo, funçÃĩes definidas com `async def` tÃĒm que ser "aguardadas". EntÃŖo, funçÃĩes com `async def` pdem ser chamadas somente dentro de funçÃĩes definidas com `async def` tambÊm.
EntÃŖo, sobre o ovo e a galinha, como vocÃĒ chama a primeira funÃ§ÃŖo async?
Se vocÃĒ estivar trabalhando com **FastAPI** nÃŖo terÃĄ que se preocupar com isso, porquÃĒ essa "primeira" funÃ§ÃŖo serÃĄ a sua *funÃ§ÃŖo de operaÃ§ÃŖo de rota*, e o FastAPI saberÃĄ como fazer a coisa certa.
-Mas se vocÃĒ quiser usar `async` / `await` sem FastAPI, verifique a documentaÃ§ÃŖo oficial Python .
+Mas se vocÃĒ quiser usar `async` / `await` sem FastAPI, vocÃĒ tambÊm pode fazÃĒ-lo.
+
+### Escreva seu prÃŗprio cÃŗdigo assÃncrono
+
+Starlette (e **FastAPI**) sÃŖo baseados no AnyIO , o que o torna compatÃvel com ambos o asyncio da biblioteca padrÃŖo do Python, e o Trio .
+
+Em particular, vocÃĒ pode usar diretamente o AnyIO para seus casos de uso avançados de concorrÃĒncia que requerem padrÃĩes mais avançados no seu prÃŗprio cÃŗdigo.
+
+E atÊ se vocÃĒ nÃŖo estiver utilizando FastAPI, vocÃĒ tambÊm pode escrever suas prÃŗprias aplicaçÃĩes assÃncronas com o AnyIO por ser altamente compatÃvel e ganhar seus benefÃcios (e.g. *concorrÃĒncia estruturada*).
+
+Eu criei outra biblioteca em cima do AnyIO, como uma fina camada acima, para melhorar um pouco as anotaçÃĩes de tipo e obter melhor **autocompletar**, **erros de linha**, etc. Ela tambÊm possui uma introduÃ§ÃŖo amigÃĄvel e um tutorial para ajudar vocÃĒ a **entender** e escrever **seu prÃŗprio cÃŗdigo async**: Asyncer . Seria particularmente Ãētil se vocÃĒ precisar **combinar cÃŗdigo async com cÃŗdigo regular** (bloqueador/sÃncrono).
+
### Outras formas de cÃŗdigo assÃncrono
@@ -337,25 +346,25 @@ Essa mesma sintaxe (ou quase a mesma) foi tambÊm incluÃda recentemente em vers
Mas antes disso, controlar cÃŗdigo assÃncrono era bem mais complexo e difÃcil.
-Nas versÃĩes anteriores do Python, vocÃĒ poderia utilizar threads ou Gevent . Mas o cÃŗdigo Ê um pouco mais complexo de entender, debugar, e pensar sobre.
+Nas versÃĩes anteriores do Python, vocÃĒ poderia utilizar threads ou Gevent . Mas o cÃŗdigo Ê bem mais complexo de entender, debugar, e pensar sobre.
-Nas versÃĩes anteriores do NodeJS / Navegador JavaScript, vocÃĒ poderia utilizar "callbacks". O que leva ao inferno do callback .
+Nas versÃĩes anteriores do NodeJS / Navegador JavaScript, vocÃĒ utilizaria "callbacks". O que leva ao inferno do callback .
## Corrotinas
-**Corrotina** Ê apenas um jeito bonitinho para a coisa que Ê retornada de uma funÃ§ÃŖo `async def`. O Python sabe que Ê uma funÃ§ÃŖo que pode começar e terminar em algum ponto, mas que pode ser pausada internamente tambÊm, sempre que tiver um `await` dentro dela.
+**Corrotina** Ê apenas um jeito bonitinho para a coisa que Ê retornada de uma funÃ§ÃŖo `async def`. O Python sabe que Ê algo como uma funÃ§ÃŖo, que pode começar e que vai terminar em algum ponto, mas que pode ser pausada ⸠internamente tambÊm, sempre que tiver um `await` dentro dela.
-Mas toda essa funcionalidade de cÃŗdigo assÃncrono com `async` e `await` Ê muitas vezes resumida como "corrotina". à comparÃĄvel ao principal recurso chave do Go, a "Gorotina".
+Mas toda essa funcionalidade de cÃŗdigo assÃncrono com `async` e `await` Ê muitas vezes resumida como usando "corrotinas". à comparÃĄvel ao principal recurso chave do Go, a "Gorrotina".
## ConclusÃŖo
-Vamos ver a mesma frase com o conteÃēdo cima:
+Vamos ver a mesma frase de cima:
-> VersÃĩes modernas do Python tem suporte para **"cÃŗdigo assÃncrono"** usando algo chamado **"corrotinas"**, com sintaxe **`async` e `await`**.
+> VersÃĩes modernas do Python tÃĒm suporte para **"cÃŗdigo assÃncrono"** usando algo chamado **"corrotinas"**, com sintaxe **`async` e `await`**.
-Isso pode fazer mais sentido agora.
+Isso pode fazer mais sentido agora. â¨
-Tudo isso Ê o que deixa o FastAPI poderoso (atravÊs do Starlette) e que o faz ter uma performance impressionante.
+Tudo isso Ê o que empodera o FastAPI (atravÊs do Starlette) e que o faz ter uma performance tÃŖo impressionante.
## Detalhes muito tÊcnicos
@@ -365,25 +374,25 @@ VocÃĒ pode provavelmente pular isso.
Esses sÃŖo detalhes muito tÊcnicos de como **FastAPI** funciona por baixo do capô.
-Se vocÃĒ tem algum conhecimento tÊcnico (corrotinas, threads, blocking etc) e estÃĄ curioso sobre como o FastAPI controla o `async def` vs normal `def`, vÃĄ em frente.
+Se vocÃĒ tem certo conhecimento tÊcnico (corrotinas, threads, blocking etc) e estÃĄ curioso sobre como o FastAPI controla o `async def` vs normal `def`, vÃĄ em frente.
///
### FunçÃĩes de operaÃ§ÃŖo de rota
-Quando vocÃĒ declara uma *funÃ§ÃŖo de operaÃ§ÃŖo de rota* com `def` normal ao invÊs de `async def`, ela Ê rodada em uma threadpool externa que entÃŖo Ê aguardada, ao invÊs de ser chamada diretamente (ela poderia bloquear o servidor).
+Quando vocÃĒ declara uma *funÃ§ÃŖo de operaÃ§ÃŖo de rota* com `def` normal ao invÊs de `async def`, ela Ê rodada em uma threadpool externa que Ê entÃŖo aguardada, ao invÊs de ser chamada diretamente (jÃĄ que ela bloquearia o servidor).
-Se vocÃĒ estÃĄ chegando de outro framework assÃncrono que nÃŖo faz o trabalho descrito acima e vocÃĒ estÃĄ acostumado a definir triviais *funçÃĩes de operaÃ§ÃŖo de rota* com simples `def` para ter um mÃnimo ganho de performance (cerca de 100 nanosegundos), por favor observe que no **FastAPI** o efeito pode ser bem o oposto. Nesses casos, Ê melhor usar `async def` a menos que suas *funçÃĩes de operaÃ§ÃŖo de rota* utilizem cÃŗdigo que performem bloqueamento IO .
+Se vocÃĒ estÃĄ chegando de outro framework assÃncrono que nÃŖo funciona como descrito acima e vocÃĒ estÃĄ acostumado a definir *funçÃĩes de operaÃ§ÃŖo de rota* triviais somente de computaÃ§ÃŖo com simples `def` para ter um mÃnimo ganho de performance (cerca de 100 nanosegundos), por favor observe que no **FastAPI** o efeito pode ser bem o oposto. Nesses casos, Ê melhor usar `async def` a menos que suas *funçÃĩes de operaÃ§ÃŖo de rota* utilizem cÃŗdigo que performe bloqueamento IO .
-Ainda, em ambas as situaçÃĩes, as chances sÃŖo que o **FastAPI** serÃĄ [ainda mais rÃĄpido](index.md#performance){.internal-link target=_blank} do que (ou ao menos comparÃĄvel a) seus frameworks antecessores.
+Ainda, em ambas as situaçÃĩes, as chances sÃŖo que o **FastAPI** [ainda serÃĄ mais rÃĄpido](index.md#performance){.internal-link target=_blank} do que (ou ao menos comparÃĄvel a) seu framework anterior.
### DependÃĒncias
-O mesmo se aplica para as dependÃĒncias. Se uma dependÃĒncia tem as funçÃĩes com padrÃŖo `def` ao invÊs de `async def`, ela Ê rodada no threadpool externo.
+O mesmo se aplica para as [dependÃĒncias](tutorial/dependencies/index.md){.internal-link target=_blank}. Se uma dependÃĒncia tem as funçÃĩes com padrÃŖo `def` ao invÊs de `async def`, ela Ê rodada no threadpool externo.
### Sub-dependÃĒncias
-VocÃĒ pode ter mÃēltiplas dependÃĒncias e sub-dependÃĒncias exigindo uma a outra (como parÃĸmetros de definiçÃĩes de funçÃĩes), algumas delas podem ser criadas com `async def` e algumas com `def` normal. Isso ainda poderia funcionar, e aquelas criadas com `def` podem ser chamadas em uma thread externa ao invÊs de serem "aguardadas".
+VocÃĒ pode ter mÃēltiplas dependÃĒncias e [sub-dependÃĒncias](tutorial/dependencies/sub-dependencies.md){.internal-link target=_blank} requisitando uma à outra (como parÃĸmetros de definiçÃĩes de funçÃĩes), algumas delas podem ser criadas com `async def` e algumas com `def` normal. Isso ainda funcionaria, e aquelas criadas com `def` normal seriam chamadas em uma thread externa (do threadpool) ao invÊs de serem "aguardadas".
### Outras funçÃĩes de utilidade
@@ -395,6 +404,6 @@ Se sua funÃ§ÃŖo de utilidade Ê uma funÃ§ÃŖo normal com `def`, ela serÃĄ chamada
---
-Novamente, esses sÃŖo detalhes muito tÊcnicos que provavelmente possam ser Ãēteis caso vocÃĒ esteja procurando por eles.
+Novamente, esses sÃŖo detalhes muito tÊcnicos que provavelmente seriam Ãēteis caso vocÃĒ esteja procurando por eles.
Caso contrÃĄrio, vocÃĒ deve ficar bem com as dicas da seÃ§ÃŖo acima: Com pressa? .
diff --git a/docs/pt/docs/deployment/concepts.md b/docs/pt/docs/deployment/concepts.md
index 8cf70d0b4..014ca3797 100644
--- a/docs/pt/docs/deployment/concepts.md
+++ b/docs/pt/docs/deployment/concepts.md
@@ -216,7 +216,7 @@ Este Processo de Gerenciador provavelmente seria o que escutaria na **porta** no
Esses processos de trabalho seriam aqueles que executariam seu aplicativo, eles executariam os cÃĄlculos principais para receber uma **solicitaÃ§ÃŖo** e retornar uma **resposta**, e carregariam qualquer coisa que vocÃĒ colocasse em variÃĄveis ââna RAM.
-
+
E, claro, a mesma mÃĄquina provavelmente teria **outros processos** em execuÃ§ÃŖo, alÊm do seu aplicativo.
diff --git a/docs/pt/docs/deployment/https.md b/docs/pt/docs/deployment/https.md
index 9ad419934..904d04eaa 100644
--- a/docs/pt/docs/deployment/https.md
+++ b/docs/pt/docs/deployment/https.md
@@ -85,7 +85,7 @@ Primeiro, o navegador iria verificar com os **servidores DNS** qual o **IP do do
Os servidores DNS iriam informar o navegador para utilizar algum **endereço IP** especÃfico. Esse seria o endereço IP pÃēblico em uso no seu servidor, que vocÃĒ configurou nos servidores DNS.
-
+
### InÃcio do Handshake TLS
@@ -93,7 +93,7 @@ O navegador entÃŖo irÃĄ comunicar-se com esse endereço IP na **porta 443** (a p
A primeira parte dessa comunicaÃ§ÃŖo Ê apenas para estabelecer a conexÃŖo entre o cliente e o servidor e para decidir as chaves criptogrÃĄficas a serem utilizadas, etc.
-
+
Esse interaÃ§ÃŖo entre o cliente e o servidor para estabelecer uma conexÃŖo TLS Ê chamada de **Handshake TLS**.
@@ -111,7 +111,7 @@ Utilizando a **extensÃŖo SNI** discutida acima, o Proxy de TerminaÃ§ÃŖo TLS iria
Nesse caso, ele usaria o certificado para `someapp.example.com`.
-
+
O cliente jÃĄ **confia** na entidade que gerou o certificado TLS (nesse caso, o Let's Encrypt, mas veremos sobre isso mais tarde), entÃŖo ele pode **verificar** que o certificado Ê vÃĄlido.
@@ -133,19 +133,19 @@ Agora que o cliente e servidor (especialmente o navegador e o Proxy de Terminaç
EntÃŖo, o cliente envia uma **solicitaÃ§ÃŖo HTTPS**. Que Ê apenas uma solicitaÃ§ÃŖo HTTP sobre uma conexÃŖo TLS encriptada.
-
+
### Desencriptando a SolicitaÃ§ÃŖo
O Proxy de TerminaÃ§ÃŖo TLS entÃŖo usaria a encriptaÃ§ÃŖo combinada para **desencriptar a solicitaÃ§ÃŖo**, e transmitiria a **solicitaÃ§ÃŖo bÃĄsica (desencriptada)** para o processo executando a aplicaÃ§ÃŖo (por exemplo, um processo com Uvicorn executando a aplicaÃ§ÃŖo FastAPI).
-
+
### Resposta HTTP
A aplicaÃ§ÃŖo processaria a solicitaÃ§ÃŖo e retornaria uma **resposta HTTP bÃĄsica (nÃŖo encriptada)** para o Proxy de TerminaÃ§ÃŖo TLS.
-
+
### Resposta HTTPS
@@ -153,7 +153,7 @@ O Proxy de TerminaÃ§ÃŖo TLS iria **encriptar a resposta** utilizando a criptogra
No prÃŗximo passo, o navegador verifica que a resposta Ê vÃĄlida e encriptada com a chave criptogrÃĄfica correta, etc. E depois **desencripta a resposta** e a processa.
-
+
O cliente (navegador) saberÃĄ que a resposta vem do servidor correto por que ela usa a criptografia que foi combinada entre eles usando o **certificado HTTPS** anterior.
@@ -163,7 +163,7 @@ Podem existir **mÃēltiplas aplicaçÃĩes** em execuÃ§ÃŖo no mesmo servidor (ou se
Apenas um processo pode estar vinculado a um IP e porta (o Proxy de TerminaÃ§ÃŖo TLS, por exemplo), mas outras aplicaçÃĩes/processos tambÊm podem estar em execuÃ§ÃŖo no(s) servidor(es), desde que nÃŖo tentem usar a mesma **combinaÃ§ÃŖo de IP pÃēblico e porta**.
-
+
Dessa forma, o Proxy de TerminaÃ§ÃŖo TLS pode gerenciar o HTTPS e os certificados de **mÃēltiplos domÃnios**, para mÃēltiplas aplicaçÃĩes, e entÃŖo transmitir as requisiçÃĩes para a aplicaÃ§ÃŖo correta em cada caso.
@@ -173,7 +173,7 @@ Em algum momento futuro, cada certificado irÃĄ **expirar** (aproximadamente 3 me
E entÃŖo, haverÃĄ outro programa (em alguns casos pode ser o prÃŗprio Proxy de TerminaÃ§ÃŖo TLS) que irÃĄ interagir com o Let's Encrypt e renovar o(s) certificado(s).
-
+
Os **certificados TLS** sÃŖo **associados com um nome de domÃnio**, e nÃŖo a um endereço IP.
diff --git a/docs/pt/docs/how-to/custom-docs-ui-assets.md b/docs/pt/docs/how-to/custom-docs-ui-assets.md
index 3adc7529e..b7de6c8bd 100644
--- a/docs/pt/docs/how-to/custom-docs-ui-assets.md
+++ b/docs/pt/docs/how-to/custom-docs-ui-assets.md
@@ -98,7 +98,7 @@ VocÃĒ provavelmente pode clicar com o botÃŖo direito em cada link e selecionar u
E o **ReDoc** usa os arquivos:
-* `redoc.standalone.js`
+* `redoc.standalone.js`
Depois disso, sua estrutura de arquivos deve se parecer com:
@@ -129,14 +129,8 @@ VocÃĒ deverÃĄ ver um arquivo JavaScript muito longo para o **ReDoc**.
Esse arquivo pode começar com algo como:
```JavaScript
-/*!
- * ReDoc - OpenAPI/Swagger-generated API Reference Documentation
- * -------------------------------------------------------------
- * Version: "2.0.0-rc.18"
- * Repo: https://github.com/Redocly/redoc
- */
-!function(e,t){"object"==typeof exports&&"object"==typeof m
-
+/*! For license information please see redoc.standalone.js.LICENSE.txt */
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("null")):
...
```
diff --git a/docs/pt/docs/project-generation.md b/docs/pt/docs/project-generation.md
index e5c935fd2..e337ad762 100644
--- a/docs/pt/docs/project-generation.md
+++ b/docs/pt/docs/project-generation.md
@@ -1,84 +1,28 @@
-# GeraÃ§ÃŖo de Projetos - Modelo
-
-VocÃĒ pode usar um gerador de projetos para começar, por jÃĄ incluir configuraçÃĩes iniciais, segurança, banco de dados e os primeiros _endpoints_ API jÃĄ feitos para vocÃĒ.
-
-Um gerador de projetos sempre terÃĄ uma prÊ-configuraÃ§ÃŖo que vocÃĒ pode atualizar e adaptar para suas prÃŗprias necessidades, mas pode ser um bom ponto de partida para seu projeto.
-
-## Full Stack FastAPI PostgreSQL
-
-GitHub: https://github.com/tiangolo/full-stack-fastapi-postgresql
-
-### Full Stack FastAPI PostgreSQL - Recursos
-
-* IntegraÃ§ÃŖo completa **Docker**.
-* Modo de implantaÃ§ÃŖo Docker Swarm.
-* IntegraÃ§ÃŖo e otimizaÃ§ÃŖo **Docker Compose** para desenvolvimento local.
-* **Pronto para ProduÃ§ÃŖo** com servidor _web_ usando Uvicorn e Gunicorn.
-* _Backend_ **FastAPI** Python:
- * **RÃĄpido**: Alta performance, no nÃvel de **NodeJS** e **Go** (graças ao Starlette e Pydantic).
- * **Intuitivo**: Ãtimo suporte de editor. _Auto-Complete_ em todo lugar. Menos tempo _debugando_.
- * **FÃĄcil**: Projetado para ser fÃĄcil de usar e aprender. Menos tempo lendo documentaçÃĩes.
- * **Curto**: Minimize duplicaÃ§ÃŖo de cÃŗdigo. MÃēltiplos recursos para cada declaraÃ§ÃŖo de parÃĸmetro.
- * **Robusto**: Tenha cÃŗdigo pronto para produÃ§ÃŖo. Com documentaÃ§ÃŖo interativa automÃĄtica.
- * **Baseado em PadrÃĩes**: Baseado em (e completamente compatÃvel com) padrÃĩes abertos para APIs: OpenAPI e JSON Schema .
- * **Muitos outros recursos** incluindo validaÃ§ÃŖo automÃĄtica, serializaÃ§ÃŖo, documentaÃ§ÃŖo interativa, autenticaÃ§ÃŖo com _tokens_ OAuth2 JWT etc.
-* **Senha segura** _hashing_ por padrÃŖo.
-* AutenticaÃ§ÃŖo **Token JWT**.
-* Modelos **SQLAlchemy** (independente de extensÃĩes Flask, para que eles possam ser usados com _workers_ Celery diretamente).
-* Modelos bÃĄsicos para usuÃĄrios (modifique e remova conforme suas necessidades).
-* MigraçÃĩes **Alembic**.
-* **CORS** (_Cross Origin Resource Sharing_ - Compartilhamento de Recursos Entre Origens).
-* _Worker_ **Celery** que pode importar e usar modelos e cÃŗdigos do resto do _backend_ seletivamente.
-* Testes _backend_ _REST_ baseados no **Pytest**, integrados com Docker, entÃŖo vocÃĒ pode testar a interaÃ§ÃŖo completa da API, independente do banco de dados. Como roda no Docker, ele pode construir um novo repositÃŗrio de dados do zero toda vez (assim vocÃĒ pode usar ElasticSearch, MongoDB, CouchDB, ou o que quiser, e apenas testar que a API esteja funcionando).
-* FÃĄcil integraÃ§ÃŖo com Python atravÊs dos **Kernels Jupyter** para desenvolvimento remoto ou no Docker com extensÃĩes como Atom Hydrogen ou Visual Studio Code Jupyter.
-* _Frontend_ **Vue**:
- * Gerado com Vue CLI.
- * Controle de **AutenticaÃ§ÃŖo JWT**.
- * VisualizaÃ§ÃŖo de _login_.
- * ApÃŗs o _login_, visualizaÃ§ÃŖo do painel de controle principal.
- * Painel de controle principal com criaÃ§ÃŖo e ediÃ§ÃŖo de usuÃĄrio.
- * EdiÃ§ÃŖo do prÃŗprio usuÃĄrio.
- * **Vuex**.
- * **Vue-router**.
- * **Vuetify** para belos componentes _material design_.
- * **TypeScript**.
- * Servidor Docker baseado em **Nginx** (configurado para rodar "lindamente" com Vue-router).
- * ConstruÃ§ÃŖo multi-estÃĄgio Docker, entÃŖo vocÃĒ nÃŖo precisa salvar ou _commitar_ cÃŗdigo compilado.
- * Testes _frontend_ rodados na hora da construÃ§ÃŖo (pode ser desabilitado tambÊm).
- * Feito tÃŖo modular quanto possÃvel, entÃŖo ele funciona fora da caixa, mas vocÃĒ pode gerar novamente com Vue CLI ou criar conforme vocÃĒ queira, e reutilizar o que quiser.
-* **PGAdmin** para banco de dados PostgreSQL, vocÃĒ pode modificar para usar PHPMyAdmin e MySQL facilmente.
-* **Flower** para monitoraÃ§ÃŖo de tarefas Celery.
-* Balanceamento de carga entre _frontend_ e _backend_ com **Traefik**, entÃŖo vocÃĒ pode ter ambos sob o mesmo domÃnio, separados por rota, mas servidos por diferentes containers.
-* IntegraÃ§ÃŖo Traefik, incluindo geraÃ§ÃŖo automÃĄtica de certificados **HTTPS** Let's Encrypt.
-* GitLab **CI** (integraÃ§ÃŖo contÃnua), incluindo testes _frontend_ e _backend_.
-
-## Full Stack FastAPI Couchbase
-
-GitHub: https://github.com/tiangolo/full-stack-fastapi-couchbase
-
-â ī¸ **WARNING** â ī¸
-
-Se vocÃĒ estÃĄ iniciando um novo projeto do zero, verifique as alternativas aqui.
-
-Por exemplo, o gerador de projetos Full Stack FastAPI PostgreSQL pode ser uma alternativa melhor, como ele Ê ativamente mantido e utilizado. E ele inclui todos os novos recursos e melhorias.
-
-VocÃĒ ainda Ê livre para utilizar o gerador baseado em Couchbase se quiser, ele provavelmente ainda funciona bem, e vocÃĒ jÃĄ tem um projeto gerado com ele que roda bem tambÊm (e vocÃĒ provavelmente jÃĄ atualizou ele para encaixar nas suas necessidades).
-
-VocÃĒ pode ler mais sobre nas documentaÃ§ÃŖoes do repositÃŗrio.
-
-## Full Stack FastAPI MongoDB
-
-...pode demorar, dependendo do meu tempo disponÃvel e outros fatores. đ
đ
-
-## Modelos de Aprendizado de MÃĄquina com spaCy e FastAPI
-
-GitHub: https://github.com/microsoft/cookiecutter-spacy-fastapi
-
-### Modelos de Aprendizado de MÃĄquina com spaCy e FastAPI - Recursos
-
-* IntegraÃ§ÃŖo com modelo NER **spaCy**.
-* Formato de requisiÃ§ÃŖo **Busca Cognitiva Azure** acoplado.
-* Servidor Python _web_ **Pronto para ProduÃ§ÃŖo** usando Uvicorn e Gunicorn.
-* ImplantaÃ§ÃŖo **Azure DevOps** Kubernetes (AKS) CI/CD acoplada.
-* **Multilingual** facilmente escolhido como uma das linguagens spaCy acopladas durante a configuraÃ§ÃŖo do projeto.
-* **Facilmente extensÃvel** para outros modelos de _frameworks_ (Pytorch, Tensorflow), nÃŖo apenas spaCy.
+# Full Stack FastAPI Template
+
+_Templates_, embora tipicamente venham com alguma configuraÃ§ÃŖo especÃfica, sÃŖo desenhados para serem flexÃveis e customizÃĄveis. Isso permite que vocÃĒ os modifique e adapte para as especificaçÃĩes do seu projeto, fazendo-os um excelente ponto de partida. đ
+
+VocÃĒ pode usar esse _template_ para começar, jÃĄ que ele inclui vÃĄrias configuraçÃĩes iniciais, segurança, banco de dados, e alguns _endpoints_ de API jÃĄ feitos para vocÃĒ.
+
+RepositÃŗrio GitHub: Full Stack FastAPI Template
+
+## Full Stack FastAPI Template - Pilha de Tecnologias e Recursos
+
+- ⥠[**FastAPI**](https://fastapi.tiangolo.com) para a API do backend em Python.
+ - đ§° [SQLModel](https://sqlmodel.tiangolo.com) para as interaçÃĩes do Python com bancos de dados SQL (ORM).
+ - đ [Pydantic](https://docs.pydantic.dev), usado pelo FastAPI, para validaÃ§ÃŖo de dados e gerenciamento de configuraçÃĩes.
+ - đž [PostgreSQL](https://www.postgresql.org) como banco de dados SQL.
+- đ [React](https://react.dev) para o frontend.
+ - đ Usando TypeScript, hooks, [Vite](https://vitejs.dev), e outras partes de uma _stack_ frontend moderna.
+ - đ¨ [Chakra UI](https://chakra-ui.com) para os componentes de frontend.
+ - đ¤ Um cliente frontend automaticamente gerado.
+ - đ§Ē [Playwright](https://playwright.dev) para testes Ponta-a-Ponta.
+ - đĻ Suporte para modo escuro.
+- đ [Docker Compose](https://www.docker.com) para desenvolvimento e produÃ§ÃŖo.
+- đ _Hash_ seguro de senhas por padrÃŖo.
+- đ AutenticaÃ§ÃŖo por token JWT.
+- đĢ RecuperaÃ§ÃŖo de senhas baseada em email.
+- â
Testes com [Pytest](https://pytest.org).
+- đ [Traefik](https://traefik.io) como proxy reverso / balanceador de carga.
+- đĸ InstruçÃĩes de _deployment_ usando Docker Compose, incluindo como configurar um proxy frontend com Traefik para gerenciar automaticamente certificados HTTPS.
+- đ CI (IntegraÃ§ÃŖo ContÃnua) e CD (_Deploy_ ContÃnuo) baseado em GitHub Actions.
diff --git a/docs/pt/docs/tutorial/bigger-applications.md b/docs/pt/docs/tutorial/bigger-applications.md
index a094005fd..b621f3c72 100644
--- a/docs/pt/docs/tutorial/bigger-applications.md
+++ b/docs/pt/docs/tutorial/bigger-applications.md
@@ -52,7 +52,7 @@ from app.routers import items
* HÃĄ tambÊm um subdiretÃŗrio `app/internal/` com outro arquivo `__init__.py`, entÃŖo ele Ê outro "subpacote Python":`app.internal`.
* E o arquivo `app/internal/admin.py` Ê outro submÃŗdulo: `app.internal.admin`.
-
+
A mesma estrutura de arquivos com comentÃĄrios:
@@ -270,7 +270,7 @@ Mas esse arquivo nÃŖo existe, nossas dependÃĒncias estÃŖo em um arquivo em `app/
Lembre-se de como nossa estrutura app/file se parece:
-
+
---
diff --git a/docs/ru/docs/advanced/additional-status-codes.md b/docs/ru/docs/advanced/additional-status-codes.md
new file mode 100644
index 000000000..aab1f8ee3
--- /dev/null
+++ b/docs/ru/docs/advanced/additional-status-codes.md
@@ -0,0 +1,41 @@
+# ĐĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ ŅŅаŅŅŅ ĐēОдŅ
+
+ĐĐž ŅĐŧĐžĐģŅаĐŊĐ¸Ņ **FastAPI** вОСвŅаŅаĐĩŅ ĐžŅвĐĩŅŅ, иŅĐŋĐžĐģŅСŅŅ `JSONResponse`, ĐŋĐžĐŧĐĩŅĐ°Ņ ŅОдĐĩŅĐļиĐŧĐžĐĩ, ĐēĐžŅĐžŅĐžĐĩ Đ˛Ņ Đ˛ĐžĐˇĐ˛ŅаŅаĐĩŅĐĩ иС ваŅĐĩĐš *ĐžĐŋĐĩŅаŅии ĐŋŅŅи*, вĐŊŅŅŅŅ ŅŅĐžĐŗĐž `JSONResponse`.
+
+ĐĐŊ ĐąŅĐ´ĐĩŅ Đ¸ŅĐŋĐžĐģŅСОваŅŅ ĐēОд ŅŅаŅŅŅа ĐŋĐž ŅĐŧĐžĐģŅаĐŊĐ¸Ņ Đ¸Đģи ŅĐžŅ, ĐēĐžŅĐžŅŅĐš Đ˛Ņ ŅĐēаĐļĐĩŅĐĩ в ваŅĐĩĐš *ĐžĐŋĐĩŅаŅии ĐŋŅŅи*.
+
+## ĐĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ ŅŅаŅŅŅ ĐēОдŅ
+
+ĐŅĐģи Đ˛Ņ Ņ
ĐžŅиŅĐĩ вОСвŅаŅаŅŅ Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐš ŅŅаŅŅŅ ĐēОд ĐŋĐžĐŧиĐŧĐž ĐžŅĐŊОвĐŊĐžĐŗĐž, Đ˛Ņ ĐŧĐžĐļĐĩŅĐĩ ŅĐ´ĐĩĐģаŅŅ ŅŅĐž, вОСвŅаŅĐ°Ņ ĐžĐąŅĐĩĐēŅ `Response` ĐŊаĐŋŅŅĐŧŅŅ, ĐēаĐē `JSONResponse`, и ŅŅŅаĐŊавĐģĐ¸Đ˛Đ°Ņ ĐŊŅĐļĐŊŅĐš ŅŅаŅŅŅ ĐēОд ĐŊаĐŋŅŅĐŧŅŅ.
+
+ĐаĐŋŅиĐŧĐĩŅ, ŅĐēаĐļĐĩĐŧ, Đ˛Ņ Ņ
ĐžŅиŅĐĩ ŅОСдаŅŅ *ĐžĐŋĐĩŅаŅĐ¸Ņ ĐŋŅŅи*, ĐēĐžŅĐžŅĐ°Ņ ĐŋОСвОĐģŅĐĩŅ ĐžĐąĐŊОвĐģŅŅŅ ŅĐģĐĩĐŧĐĩĐŊŅŅ Đ¸ вОСвŅаŅаĐĩŅ HTTP-ĐēОд 200 "OK" ĐŋŅи ŅŅĐŋĐĩŅĐŊĐžĐŧ вŅĐŋĐžĐģĐŊĐĩĐŊии.
+
+ĐĐž Đ˛Ņ ŅаĐēĐļĐĩ Ņ
ĐžŅиŅĐĩ, ŅŅĐžĐąŅ ĐžĐŊа ĐŋŅиĐŊиĐŧаĐģа ĐŊОвŅĐĩ ŅĐģĐĩĐŧĐĩĐŊŅŅ. Đ ĐĩŅĐģи ŅĐģĐĩĐŧĐĩĐŊŅ ŅаĐŊĐĩĐĩ ĐŊĐĩ ŅŅŅĐĩŅŅвОваĐģ, ĐžĐŊ ŅОСдаŅŅŅŅ, и вОСвŅаŅаĐģŅŅ HTTP-ĐēОд 201 "Created".
+
+ЧŅĐžĐąŅ ŅĐĩаĐģиСОваŅŅ ŅŅĐž, иĐŧĐŋĐžŅŅиŅŅĐšŅĐĩ `JSONResponse` и вОСвŅаŅаКŅĐĩ Đ˛Đ°Ņ ĐēĐžĐŊŅĐĩĐŊŅ ĐŊаĐŋŅŅĐŧŅŅ, ŅŅŅаĐŊавĐģĐ¸Đ˛Đ°Ņ ĐŊŅĐļĐŊŅĐš `status_code`:
+
+{* ../../docs_src/additional_status_codes/tutorial001_an_py310.py hl[4,25] *}
+
+/// warning | ĐĐŊиĐŧаĐŊиĐĩ
+
+ĐĐžĐŗĐ´Đ° Đ˛Ņ Đ˛ĐžĐˇĐ˛ŅаŅаĐĩŅĐĩ ОйŅĐĩĐēŅ `Response` ĐŊаĐŋŅŅĐŧŅŅ, ĐēаĐē в ĐŋŅиĐŧĐĩŅĐĩ вŅŅĐĩ, ĐžĐŊ ĐąŅĐ´ĐĩŅ Đ˛ĐžĐˇĐ˛ŅаŅŅĐŊ ĐēаĐē ĐĩŅŅŅ.
+
+ĐĐŊ ĐŊĐĩ ĐąŅĐ´ĐĩŅ ŅĐĩŅиаĐģиСОваĐŊ ĐŋŅи ĐŋĐžĐŧĐžŅи ĐŧОдĐĩĐģи и Ņ.Đ´.
+
+ĐŖĐąĐĩдиŅĐĩŅŅ, ŅŅĐž в ĐŊŅĐŧ ŅОдĐĩŅĐļаŅŅŅ Đ¸ĐŧĐĩĐŊĐŊĐž ŅĐĩ даĐŊĐŊŅĐĩ, ĐēĐžŅĐžŅŅĐĩ Đ˛Ņ Ņ
ĐžŅиŅĐĩ, и ŅŅĐž СĐŊаŅĐĩĐŊĐ¸Ņ ŅвĐģŅŅŅŅŅ Đ˛Đ°ĐģидĐŊŅĐŧ JSON (ĐĩŅĐģи Đ˛Ņ Đ¸ŅĐŋĐžĐģŅСŅĐĩŅĐĩ `JSONResponse`).
+
+///
+
+/// note | ĐĸĐĩŅ
ĐŊиŅĐĩŅĐēиĐĩ Đ´ĐĩŅаĐģи
+
+ĐŅ ŅаĐēĐļĐĩ ĐŧĐžĐļĐĩŅĐĩ иŅĐŋĐžĐģŅСОваŅŅ `from starlette.responses import JSONResponse`.
+
+**FastAPI** ĐŋŅĐĩĐ´ĐžŅŅавĐģŅĐĩŅ ŅĐžŅ ĐļĐĩ `starlette.responses` ŅĐĩŅĐĩС `fastapi.responses` ĐŋŅĐžŅŅĐž Đ´ĐģŅ Đ˛Đ°ŅĐĩĐŗĐž ŅдОйŅŅва, ĐēаĐē ŅаСŅайОŅŅиĐēа. ĐĐž йОĐģŅŅиĐŊŅŅвО Đ´ĐžŅŅŅĐŋĐŊŅŅ
Response-ĐēĐģаŅŅОв ĐŋĐžŅŅŅĐŋаŅŅ ĐŊаĐŋŅŅĐŧŅŅ Đ¸Đˇ Starlette. ĐĸĐž ĐļĐĩ ŅаĐŧĐžĐĩ ĐēаŅаĐĩŅŅŅ Đ¸ `status`.
+
+///
+
+## OpenAPI и Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅĐ¸Ņ API
+
+ĐŅĐģи Đ˛Ņ Đ˛ĐžĐˇĐ˛ŅаŅаĐĩŅĐĩ Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ ĐēĐžĐ´Ņ ŅŅаŅŅŅОв и ĐžŅвĐĩŅŅ ĐŊаĐŋŅŅĐŧŅŅ, ĐžĐŊи ĐŊĐĩ ĐąŅĐ´ŅŅ Đ˛ĐēĐģŅŅĐĩĐŊŅ Đ˛ ŅŅ
ĐĩĐŧŅ OpenAPI (Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅĐ¸Ņ API), ĐŋĐžŅĐžĐŧŅ ŅŅĐž FastAPI ĐŊĐĩ ĐŧĐžĐļĐĩŅ ĐˇĐ°ŅаĐŊĐĩĐĩ СĐŊаŅŅ, ŅŅĐž Đ˛Ņ ŅОйиŅаĐĩŅĐĩŅŅ Đ˛ĐĩŅĐŊŅŅŅ.
+
+ĐĐž Đ˛Ņ ĐŧĐžĐļĐĩŅĐĩ СадОĐēŅĐŧĐĩĐŊŅиŅОваŅŅ ŅŅĐž в ваŅĐĩĐŧ ĐēОдĐĩ, иŅĐŋĐžĐģŅСŅŅ: [ĐĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ ĐžŅвĐĩŅŅ Đ˛ OpenAPI](additional-responses.md){.internal-link target=_blank}.
diff --git a/docs/ru/docs/advanced/index.md b/docs/ru/docs/advanced/index.md
new file mode 100644
index 000000000..b5cb733e7
--- /dev/null
+++ b/docs/ru/docs/advanced/index.md
@@ -0,0 +1,21 @@
+# РаŅŅиŅĐĩĐŊĐŊĐžĐĩ ŅŅĐēОвОдŅŅвО ĐŋĐžĐģŅСОваŅĐĩĐģŅ
+
+## ĐĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ вОСĐŧĐžĐļĐŊĐžŅŅи
+
+ĐŅĐŊОвĐŊĐžĐĩ [ĐŖŅĐĩĐąĐŊиĐē - Đ ŅĐēОвОдŅŅвО ĐŋĐžĐģŅСОваŅĐĩĐģŅ](../tutorial/index.md){.internal-link target=_blank} Đ´ĐžĐģĐļĐŊĐž ĐąŅŅŅ Đ´ĐžŅŅаŅĐžŅĐŊĐž, ŅŅĐžĐąŅ ĐŋОСĐŊаĐēĐžĐŧиŅŅ Đ˛Đ°Ņ ŅĐž вŅĐĩĐŧи ĐžŅĐŊОвĐŊŅĐŧи ŅŅĐŊĐēŅиŅĐŧи **FastAPI**.
+
+Đ ŅĐģĐĩĐ´ŅŅŅиŅ
ŅаСдĐĩĐģаŅ
Đ˛Ņ ŅвидиŅĐĩ Đ´ŅŅĐŗĐ¸Đĩ ваŅиаĐŊŅŅ, ĐēĐžĐŊŅĐ¸ĐŗŅŅаŅии и Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ вОСĐŧĐžĐļĐŊĐžŅŅи.
+
+/// tip
+
+ĐĄĐģĐĩĐ´ŅŅŅиĐĩ ŅаСдĐĩĐģŅ **ĐŊĐĩ ОйŅСаŅĐĩĐģŅĐŊĐž ŅвĐģŅŅŅŅŅ "ĐŋŅОдвиĐŊŅŅŅĐŧи"**.
+
+РвĐŋĐžĐģĐŊĐĩ вОСĐŧĐžĐļĐŊĐž, ŅŅĐž Đ´ĐģŅ Đ˛Đ°ŅĐĩĐŗĐž ŅĐģŅŅĐ°Ņ Đ¸ŅĐŋĐžĐģŅСОваĐŊĐ¸Ņ ŅĐĩŅĐĩĐŊиĐĩ ĐŊаŅ
ОдиŅŅŅ Đ˛ ОдĐŊĐžĐŧ иС ĐŊиŅ
.
+
+///
+
+## ĐĄĐŊаŅаĐģа ĐŋŅĐžŅиŅаКŅĐĩ ĐŖŅĐĩĐąĐŊиĐē - Đ ŅĐēОвОдŅŅвО ĐŋĐžĐģŅСОваŅĐĩĐģŅ
+
+ĐŅ Đ˛ŅĐĩ ĐĩŅĐĩ ĐŧĐžĐļĐĩŅĐĩ иŅĐŋĐžĐģŅСОваŅŅ ĐąĐžĐģŅŅиĐŊŅŅвО ŅŅĐŊĐēŅиК **FastAPI** ŅĐž СĐŊаĐŊиŅĐŧи иС [ĐŖŅĐĩĐąĐŊиĐē - Đ ŅĐēОвОдŅŅвО ĐŋĐžĐģŅСОваŅĐĩĐģŅ](../tutorial/index.md){.internal-link target=_blank}.
+
+Đ ŅĐģĐĩĐ´ŅŅŅиĐĩ ŅаСдĐĩĐģŅ ĐŋŅĐĩĐ´ĐŋĐžĐģĐ°ĐŗĐ°ŅŅ, ŅŅĐž Đ˛Ņ ŅĐļĐĩ ĐŋŅĐžŅиŅаĐģи ĐĩĐŗĐž, и ĐŋŅĐĩĐ´ĐŋĐžĐģĐ°ĐŗĐ°ŅŅ, ŅŅĐž Đ˛Ņ ĐˇĐŊаĐĩŅĐĩ ŅŅи ĐžŅĐŊОвĐŊŅĐĩ идĐĩи.
diff --git a/docs/ru/docs/advanced/response-change-status-code.md b/docs/ru/docs/advanced/response-change-status-code.md
new file mode 100644
index 000000000..37dade99f
--- /dev/null
+++ b/docs/ru/docs/advanced/response-change-status-code.md
@@ -0,0 +1,31 @@
+# Response - ĐСĐŧĐĩĐŊĐĩĐŊиĐĩ cŅаŅŅŅ ĐēОда
+
+ĐŅ, вĐĩŅĐžŅŅĐŊĐž, ŅĐļĐĩ ŅиŅаĐģи Đž ŅĐžĐŧ, ŅŅĐž ĐŧĐžĐļĐŊĐž ŅŅŅаĐŊОвиŅŅ [ĐĄĐžŅŅĐžŅĐŊиĐĩ ĐžŅвĐĩŅа ĐŋĐž ŅĐŧĐžĐģŅаĐŊиŅ](../tutorial/response-status-code.md){.internal-link target=_blank}.
+
+ĐĐž в ĐŊĐĩĐēĐžŅĐžŅŅŅ
ŅĐģŅŅаŅŅ
ваĐŧ ĐŊŅĐļĐŊĐž вĐĩŅĐŊŅŅŅ ĐēОд ŅĐžŅŅĐžŅĐŊиŅ, ĐžŅĐģиŅĐŊŅĐš ĐžŅ ŅŅŅаĐŊОвĐģĐĩĐŊĐŊĐžĐŗĐž ĐŋĐž ŅĐŧĐžĐģŅаĐŊиŅ.
+
+## ĐŅиĐŧĐĩŅ Đ¸ŅĐŋĐžĐģŅСОваĐŊиŅ
+
+ĐаĐŋŅиĐŧĐĩŅ, ĐŋŅĐĩĐ´ŅŅавŅŅĐĩ, ŅŅĐž Đ˛Ņ Ņ
ĐžŅиŅĐĩ вОСвŅаŅаŅŅ HTTP ĐēОд ŅĐžŅŅĐžŅĐŊĐ¸Ņ "OK" `200` ĐŋĐž ŅĐŧĐžĐģŅаĐŊиŅ.
+
+ĐĐž ĐĩŅĐģи даĐŊĐŊŅĐĩ ĐŊĐĩ ŅŅŅĐĩŅŅвОваĐģи, Đ˛Ņ Ņ
ĐžŅиŅĐĩ ŅОСдаŅŅ Đ¸Ņ
и вĐĩŅĐŊŅŅŅ HTTP ĐēОд ŅĐžŅŅĐžŅĐŊĐ¸Ņ "CREATED" `201`.
+
+ĐŅи ŅŅĐžĐŧ Đ˛Ņ Đ˛ŅŅ ĐĩŅŅ Ņ
ĐžŅиŅĐĩ иĐŧĐĩŅŅ Đ˛ĐžĐˇĐŧĐžĐļĐŊĐžŅŅŅ ŅиĐģŅŅŅОваŅŅ Đ¸ ĐŋŅĐĩОйŅаСОвŅваŅŅ Đ˛ĐžĐˇĐ˛ŅаŅаĐĩĐŧŅĐĩ даĐŊĐŊŅĐĩ Ņ ĐŋĐžĐŧĐžŅŅŅ `response_model`.
+
+ĐĐģŅ ŅаĐēиŅ
ŅĐģŅŅаĐĩв Đ˛Ņ ĐŧĐžĐļĐĩŅĐĩ иŅĐŋĐžĐģŅСОваŅŅ ĐŋаŅаĐŧĐĩŅŅ `Response`.
+
+## ĐŅĐŋĐžĐģŅСОваĐŊиĐĩ ĐŋаŅаĐŧĐĩŅŅа `Response`
+
+ĐŅ ĐŧĐžĐļĐĩŅĐĩ ОйŅŅвиŅŅ ĐŋаŅаĐŧĐĩŅŅ ŅиĐŋа `Response` в ваŅĐĩĐš *ŅŅĐŊĐēŅии ОйŅайОŅĐēи ĐŋŅŅи* (ŅаĐē ĐļĐĩ ĐēаĐē Đ´ĐģŅ cookies и headers).
+
+РСаŅĐĩĐŧ Đ˛Ņ ĐŧĐžĐļĐĩŅĐĩ ŅŅŅаĐŊОвиŅŅ `status_code` в ŅŅĐžĐŧ *вŅĐĩĐŧĐĩĐŊĐŊĐžĐŧ* ОйŅĐĩĐēŅĐĩ ĐžŅвĐĩŅа.
+
+{* ../../docs_src/response_change_status_code/tutorial001.py hl[1,9,12] *}
+
+ĐĐžŅĐģĐĩ ŅŅĐžĐŗĐž Đ˛Ņ ĐŧĐžĐļĐĩŅĐĩ вĐĩŅĐŊŅŅŅ ĐģŅйОК ОйŅĐĩĐēŅ, ĐēĐžŅĐžŅŅĐš ваĐŧ ĐŊŅĐļĐĩĐŊ, ĐēаĐē ОйŅŅĐŊĐž (`dict`, ĐŧОдĐĩĐģŅ ĐąĐ°ĐˇŅ Đ´Đ°ĐŊĐŊŅŅ
и Ņ.Đ´.).
+
+Đ ĐĩŅĐģи Đ˛Ņ ĐžĐąŅŅвиĐģи `response_model`, ĐžĐŊ вŅŅ ŅавĐŊĐž ĐąŅĐ´ĐĩŅ Đ¸ŅĐŋĐžĐģŅСОваŅŅŅŅ Đ´ĐģŅ ŅиĐģŅŅŅаŅии и ĐŋŅĐĩОйŅаСОваĐŊĐ¸Ņ Đ˛ĐžĐˇĐ˛ŅаŅаĐĩĐŧĐžĐŗĐž ОйŅĐĩĐēŅа.
+
+**FastAPI** ĐąŅĐ´ĐĩŅ Đ¸ŅĐŋĐžĐģŅСОваŅŅ ŅŅĐžŅ *вŅĐĩĐŧĐĩĐŊĐŊŅĐš* ĐžŅвĐĩŅ Đ´ĐģŅ Đ¸ĐˇĐ˛ĐģĐĩŅĐĩĐŊĐ¸Ņ ĐēОда ŅĐžŅŅĐžŅĐŊĐ¸Ņ (а ŅаĐēĐļĐĩ cookies и headers) и ĐŋĐžĐŧĐĩŅŅĐ¸Ņ Đ¸Ņ
в ŅиĐŊаĐģŅĐŊŅĐš ĐžŅвĐĩŅ, ĐēĐžŅĐžŅŅĐš ŅОдĐĩŅĐļĐ¸Ņ Đ˛ĐžĐˇĐ˛ŅаŅаĐĩĐŧĐžĐĩ ваĐŧи СĐŊаŅĐĩĐŊиĐĩ, ĐžŅŅиĐģŅŅŅОваĐŊĐŊĐžĐĩ ĐģŅĐąŅĐŧ `response_model`.
+
+ĐŅ ŅаĐēĐļĐĩ ĐŧĐžĐļĐĩŅĐĩ ОйŅŅвиŅŅ ĐŋаŅаĐŧĐĩŅŅ `Response` в СавиŅиĐŧĐžŅŅŅŅ
и ŅŅŅаĐŊОвиŅŅ ĐēОд ŅĐžŅŅĐžŅĐŊĐ¸Ņ Đ˛ ĐŊиŅ
. ĐĐž ĐŋĐžĐŧĐŊиŅĐĩ, ŅŅĐž ĐŋĐžŅĐģĐĩĐ´ĐŊĐĩĐĩ ŅŅŅаĐŊОвĐģĐĩĐŊĐŊĐžĐĩ СĐŊаŅĐĩĐŊиĐĩ ĐąŅĐ´ĐĩŅ Đ¸ĐŧĐĩŅŅ ĐŋŅиОŅиŅĐĩŅ.
diff --git a/docs/ru/docs/advanced/response-directly.md b/docs/ru/docs/advanced/response-directly.md
new file mode 100644
index 000000000..ee83d22b1
--- /dev/null
+++ b/docs/ru/docs/advanced/response-directly.md
@@ -0,0 +1,65 @@
+# ĐОСвŅĐ°Ņ ĐžŅвĐĩŅа ĐŊаĐŋŅŅĐŧŅŅ
+
+ĐĐžĐŗĐ´Đ° Đ˛Ņ ŅОСдаŅŅĐĩ **FastAPI** *ĐžĐŋĐĩŅаŅĐ¸Ņ ĐŋŅŅи*, Đ˛Ņ ĐŧĐžĐļĐĩŅĐĩ вОСвŅаŅаŅŅ Đ¸Đˇ ĐŊĐĩŅ ĐģŅĐąŅĐĩ даĐŊĐŊŅĐĩ: `dict`, `list`, Pydantic-ĐŧОдĐĩĐģŅ, ĐŧОдĐĩĐģŅ ĐąĐ°ĐˇŅ Đ´Đ°ĐŊĐŊŅŅ
и Ņ.Đ´.
+
+ĐĐž ŅĐŧĐžĐģŅаĐŊĐ¸Ņ **FastAPI** авŅĐžĐŧаŅиŅĐĩŅĐēи ĐŋŅĐĩОйŅаСŅĐĩŅ Đ˛ĐžĐˇĐ˛ŅаŅаĐĩĐŧĐžĐĩ СĐŊаŅĐĩĐŊиĐĩ в JSON Ņ ĐŋĐžĐŧĐžŅŅŅ `jsonable_encoder`, ĐēаĐē ĐžĐŋиŅаĐŊĐž в [JSON ĐēОдиŅОвŅиĐē](../tutorial/encoder.md){.internal-link target=_blank}.
+
+ĐаŅĐĩĐŧ "ĐŋОд ĐēаĐŋĐžŅĐžĐŧ" ŅŅи даĐŊĐŊŅĐĩ, ŅОвĐŧĐĩŅŅиĐŧŅĐĩ Ņ JSON (ĐŊаĐŋŅиĐŧĐĩŅ `dict`), ĐŋĐžĐŧĐĩŅаŅŅŅŅ Đ˛ `JSONResponse`, ĐēĐžŅĐžŅŅĐš иŅĐŋĐžĐģŅСŅĐĩŅŅŅ Đ´ĐģŅ ĐžŅĐŋŅавĐēи ĐžŅвĐĩŅа ĐēĐģиĐĩĐŊŅŅ.
+
+ĐĐž Đ˛Ņ ĐŧĐžĐļĐĩŅĐĩ вОСвŅаŅаŅŅ `JSONResponse` ĐŊаĐŋŅŅĐŧŅŅ Đ¸Đˇ ваŅиŅ
*ĐžĐŋĐĩŅаŅиК ĐŋŅŅи*.
+
+ĐŅĐž ĐŧĐžĐļĐĩŅ ĐąŅŅŅ ĐŋĐžĐģĐĩСĐŊĐž, ĐŊаĐŋŅиĐŧĐĩŅ, ĐĩŅĐģи ĐŊŅĐļĐŊĐž вĐĩŅĐŊŅŅŅ ĐŋĐžĐģŅСОваŅĐĩĐģŅŅĐēиĐĩ ĐˇĐ°ĐŗĐžĐģОвĐēи иĐģи ĐēŅĐēи.
+
+## ĐОСвŅĐ°Ņ `Response`
+
+Đа ŅаĐŧĐžĐŧ Đ´ĐĩĐģĐĩ, Đ˛Ņ ĐŧĐžĐļĐĩŅĐĩ вОСвŅаŅаŅŅ ĐģŅйОК ОйŅĐĩĐēŅ `Response` иĐģи ĐĩĐŗĐž ĐŋОдĐēĐģаŅŅ.
+
+/// tip | ĐОдŅĐēаСĐēа
+
+`JSONResponse` ŅаĐŧ ĐŋĐž ŅĐĩĐąĐĩ ŅвĐģŅĐĩŅŅŅ ĐŋОдĐēĐģаŅŅĐžĐŧ `Response`.
+
+///
+
+Đ ĐēĐžĐŗĐ´Đ° Đ˛Ņ Đ˛ĐžĐˇĐ˛ŅаŅаĐĩŅĐĩ `Response`, **FastAPI** ĐŋĐĩŅĐĩдаŅŅ ĐĩĐŗĐž ĐŊаĐŋŅŅĐŧŅŅ.
+
+ĐŅĐž ĐŊĐĩ ĐŋŅивĐĩĐ´ĐĩŅ Đē ĐŋŅĐĩОйŅаСОваĐŊĐ¸Ņ Đ´Đ°ĐŊĐŊŅŅ
Ņ ĐŋĐžĐŧĐžŅŅŅ Pydantic-ĐŧОдĐĩĐģĐĩĐš, ŅОдĐĩŅĐļиĐŧĐžĐĩ ĐŊĐĩ ĐąŅĐ´ĐĩŅ ĐŋŅĐĩОйŅаСОваĐŊĐž в ĐēаĐēОК-ĐģийО ŅиĐŋ и Ņ.Đ´.
+
+ĐŅĐž даŅŅ Đ˛Đ°Đŧ йОĐģŅŅŅŅ ĐŗĐ¸ĐąĐēĐžŅŅŅ. ĐŅ ĐŧĐžĐļĐĩŅĐĩ вОСвŅаŅаŅŅ ĐģŅĐąŅĐĩ ŅиĐŋŅ Đ´Đ°ĐŊĐŊŅŅ
, ĐŋĐĩŅĐĩĐžĐŋŅĐĩĐ´ĐĩĐģŅŅŅ ĐģŅĐąŅĐĩ ОйŅŅвĐģĐĩĐŊĐ¸Ņ Đ¸Đģи ваĐģидаŅĐ¸Ņ Đ´Đ°ĐŊĐŊŅŅ
и Ņ.Đ´.
+
+## ĐŅĐŋĐžĐģŅСОваĐŊиĐĩ `jsonable_encoder` в `Response`
+
+ĐĐžŅĐēĐžĐģŅĐēŅ **FastAPI** ĐŊĐĩ иСĐŧĐĩĐŊŅĐĩŅ ĐžĐąŅĐĩĐēŅ `Response`, ĐēĐžŅĐžŅŅĐš Đ˛Ņ Đ˛ĐžĐˇĐ˛ŅаŅаĐĩŅĐĩ, Đ˛Ņ Đ´ĐžĐģĐļĐŊŅ ŅĐąĐĩдиŅŅŅŅ, ŅŅĐž ĐĩĐŗĐž ŅОдĐĩŅĐļиĐŧĐžĐĩ ĐŗĐžŅОвО Đē ĐžŅĐŋŅавĐēĐĩ.
+
+ĐаĐŋŅиĐŧĐĩŅ, Đ˛Ņ ĐŊĐĩ ĐŧĐžĐļĐĩŅĐĩ ĐŋĐžĐŧĐĩŅŅиŅŅ Pydantic-ĐŧОдĐĩĐģŅ Đ˛ `JSONResponse`, ĐŊĐĩ ĐŋŅĐĩОйŅаСОвав ĐĩŅ ŅĐŊаŅаĐģа в `dict` Ņ ĐŋĐžĐŧĐžŅŅŅ ĐŋŅĐĩОйŅаСОваĐŊĐ¸Ņ Đ˛ŅĐĩŅ
ŅиĐŋОв даĐŊĐŊŅŅ
(ŅаĐēиŅ
ĐēаĐē `datetime`, `UUID` и Ņ.Đ´.) в ŅОвĐŧĐĩŅŅиĐŧŅĐĩ Ņ JSON ŅиĐŋŅ.
+
+Đ ŅаĐēиŅ
ŅĐģŅŅаŅŅ
Đ˛Ņ ĐŧĐžĐļĐĩŅĐĩ иŅĐŋĐžĐģŅСОваŅŅ `jsonable_encoder` Đ´ĐģŅ ĐŋŅĐĩОйŅаСОваĐŊĐ¸Ņ Đ´Đ°ĐŊĐŊŅŅ
ĐŋĐĩŅĐĩĐ´ ĐŋĐĩŅĐĩдаŅĐĩĐš иŅ
в ĐžŅвĐĩŅ:
+
+{* ../../docs_src/response_directly/tutorial001.py hl[6:7,21:22] *}
+
+/// note | ĐĸĐĩŅ
ĐŊиŅĐĩŅĐēиĐĩ Đ´ĐĩŅаĐģи
+
+ĐŅ ŅаĐēĐļĐĩ ĐŧĐžĐļĐĩŅĐĩ иŅĐŋĐžĐģŅСОваŅŅ `from starlette.responses import JSONResponse`.
+
+**FastAPI** ĐŋŅĐĩĐ´ĐžŅŅавĐģŅĐĩŅ `starlette.responses` ŅĐĩŅĐĩС `fastapi.responses` ĐŋŅĐžŅŅĐž Đ´ĐģŅ Đ˛Đ°ŅĐĩĐŗĐž ŅдОйŅŅва, ĐēаĐē ŅаСŅайОŅŅиĐēа. ĐĐž йОĐģŅŅиĐŊŅŅвО Đ´ĐžŅŅŅĐŋĐŊŅŅ
Response-ĐēĐģаŅŅОв ĐŋĐžŅŅŅĐŋаŅŅ ĐŊаĐŋŅŅĐŧŅŅ Đ¸Đˇ Starlette.
+
+///
+
+## ĐОСвŅĐ°Ņ ĐŋĐžĐģŅСОваŅĐĩĐģŅŅĐēĐžĐŗĐž `Response`
+
+ĐŅиĐŧĐĩŅ Đ˛ŅŅĐĩ ĐŋĐžĐēаСŅваĐĩŅ Đ˛ŅĐĩ ĐŊĐĩОйŅ
ОдиĐŧŅĐĩ ŅаŅŅи, ĐŊĐž ĐžĐŊ ĐŋĐžĐēа ĐŊĐĩ ĐžŅĐĩĐŊŅ ĐŋĐžĐģĐĩСĐĩĐŊ, ŅаĐē ĐēаĐē Đ˛Ņ ĐŧĐžĐŗĐģи ĐąŅ ĐŋŅĐžŅŅĐž вĐĩŅĐŊŅŅŅ `item` ĐŊаĐŋŅŅĐŧŅŅ, и **FastAPI** ĐŋĐžĐŧĐĩŅŅиĐģ ĐąŅ ĐĩĐŗĐž в `JSONResponse`, ĐŋŅĐĩОйŅаСОвав в `dict` и Ņ.Đ´. ĐŅŅ ŅŅĐž ĐŋŅОиŅŅ
ĐžĐ´Đ¸Ņ ĐŋĐž ŅĐŧĐžĐģŅаĐŊиŅ.
+
+ĐĸĐĩĐŋĐĩŅŅ Đ´Đ°Đ˛Đ°ĐšŅĐĩ ĐŋĐžŅĐŧĐžŅŅиĐŧ, ĐēаĐē ĐŧĐžĐļĐŊĐž иŅĐŋĐžĐģŅСОваŅŅ ŅŅĐž Đ´ĐģŅ Đ˛ĐžĐˇĐ˛ŅаŅа ĐŋĐžĐģŅСОваŅĐĩĐģŅŅĐēĐžĐŗĐž ĐžŅвĐĩŅа.
+
+ĐĐžĐŋŅŅŅиĐŧ, Đ˛Ņ Ņ
ĐžŅиŅĐĩ вĐĩŅĐŊŅŅŅ ĐžŅвĐĩŅ Đ˛ ŅĐžŅĐŧаŅĐĩ XML .
+
+ĐŅ ĐŧĐžĐļĐĩŅĐĩ ĐŋĐžĐŧĐĩŅŅиŅŅ Đ˛Đ°Ņ XML-ĐēĐžĐŊŅĐĩĐŊŅ Đ˛ ŅŅŅĐžĐēŅ, ĐŋĐžĐŧĐĩŅŅиŅŅ ĐĩŅ Đ˛ `Response` и вĐĩŅĐŊŅŅŅ:
+
+{* ../../docs_src/response_directly/tutorial002.py hl[1,18] *}
+
+## ĐŅиĐŧĐĩŅаĐŊиŅ
+
+ĐĐžĐŗĐ´Đ° Đ˛Ņ Đ˛ĐžĐˇĐ˛ŅаŅаĐĩŅĐĩ ОйŅĐĩĐēŅ `Response` ĐŊаĐŋŅŅĐŧŅŅ, ĐĩĐŗĐž даĐŊĐŊŅĐĩ ĐŊĐĩ ваĐģидиŅŅŅŅŅŅ, ĐŊĐĩ ĐŋŅĐĩОйŅаСŅŅŅŅŅ (ĐŊĐĩ ŅĐĩŅиаĐģиСŅŅŅŅŅ) и ĐŊĐĩ Đ´ĐžĐēŅĐŧĐĩĐŊŅиŅŅŅŅŅŅ Đ°Đ˛ŅĐžĐŧаŅиŅĐĩŅĐēи.
+
+ĐĐž Đ˛Ņ Đ˛ŅŅ ŅавĐŊĐž ĐŧĐžĐļĐĩŅĐĩ СадОĐēŅĐŧĐĩĐŊŅиŅОваŅŅ ŅŅĐž, ĐēаĐē ĐžĐŋиŅаĐŊĐž в [ĐĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ ĐžŅвĐĩŅŅ Đ˛ OpenAPI](additional-responses.md){.internal-link target=_blank}.
+
+Đ ŅĐģĐĩĐ´ŅŅŅиŅ
ŅаСдĐĩĐģаŅ
Đ˛Ņ ŅвидиŅĐĩ, ĐēаĐē иŅĐŋĐžĐģŅСОваŅŅ/ОйŅŅвĐģŅŅŅ ŅаĐēиĐĩ ĐēаŅŅĐžĐŧĐŊŅĐĩ `Response`, ĐŋŅи ŅŅĐžĐŧ ŅĐžŅ
ŅаĐŊŅŅ Đ°Đ˛ŅĐžĐŧаŅиŅĐĩŅĐēĐžĐĩ ĐŋŅĐĩОйŅаСОваĐŊиĐĩ даĐŊĐŊŅŅ
, Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅĐ¸Ņ Đ¸ Ņ.Đ´.
diff --git a/docs/ru/docs/deployment/concepts.md b/docs/ru/docs/deployment/concepts.md
index 7cdc29526..acfa1f4fe 100644
--- a/docs/ru/docs/deployment/concepts.md
+++ b/docs/ru/docs/deployment/concepts.md
@@ -216,7 +216,7 @@
ĐаĐļĐ´ŅĐš иС ŅŅиŅ
ĐŋŅĐžŅĐĩŅŅОв ĐąŅĐ´ĐĩŅ ĐˇĐ°ĐŋŅŅĐēаŅŅ Đ˛Đ°ŅĐĩ ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩ Đ´ĐģŅ ĐžĐąŅайОŅĐēи ĐŋĐžĐģŅŅĐĩĐŊĐŊĐžĐŗĐž **СаĐŋŅĐžŅа** и вОСвŅаŅĐĩĐŊĐ¸Ņ Đ˛ŅŅиŅĐģĐĩĐŊĐŊĐžĐŗĐž **ĐžŅвĐĩŅа** и ĐžĐŊи ĐąŅĐ´ŅŅ Đ¸ŅĐŋĐžĐģŅСОваŅŅ ĐžĐŋĐĩŅаŅивĐŊŅŅ ĐŋаĐŧŅŅŅ.
-
+
ĐĐĩСŅŅĐģОвĐŊĐž, ĐŊа ŅŅĐžĐŧ ĐļĐĩ ŅĐĩŅвĐĩŅĐĩ ĐąŅĐ´ŅŅ ŅайОŅаŅŅ Đ¸ **Đ´ŅŅĐŗĐ¸Đĩ ĐŋŅĐžŅĐĩŅŅŅ**, ĐēĐžŅĐžŅŅĐĩ ĐŊĐĩ ĐžŅĐŊĐžŅŅŅŅŅ Đē ваŅĐĩĐŧŅ ĐŋŅиĐģĐžĐļĐĩĐŊиŅ.
diff --git a/docs/ru/docs/deployment/https.md b/docs/ru/docs/deployment/https.md
index 85c4cce60..d8877a9a1 100644
--- a/docs/ru/docs/deployment/https.md
+++ b/docs/ru/docs/deployment/https.md
@@ -92,7 +92,7 @@
DNS-ŅĐĩŅвĐĩŅа ĐŋŅиŅŅĐģаŅŅ ĐąŅаŅСĐĩŅŅ ĐžĐŋŅĐĩĐ´ĐĩĐģŅĐŊĐŊŅĐš **IP-адŅĐĩŅ**, ŅĐžŅ ŅаĐŧŅĐš ĐŋŅĐąĐģиŅĐŊŅĐš IP-адŅĐĩŅ Đ˛Đ°ŅĐĩĐŗĐž ŅĐĩŅвĐĩŅа, ĐēĐžŅĐžŅŅĐš Đ˛Ņ ŅĐēаСаĐģи в ŅĐĩŅŅŅŅĐŊОК "СаĐŋиŅи Đ" ĐŋŅи ĐŊаŅŅŅОКĐēĐĩ.
-
+
### Đ ŅĐēĐžĐŋĐžĐļаŅиĐĩ TLS
@@ -100,7 +100,7 @@ DNS-ŅĐĩŅвĐĩŅа ĐŋŅиŅŅĐģаŅŅ ĐąŅаŅСĐĩŅŅ ĐžĐŋŅĐĩĐ´ĐĩĐģŅĐŊĐŊŅĐš
ĐĐĩŅвŅĐŧ ŅĐ°ĐŗĐžĐŧ ĐąŅĐ´ĐĩŅ ŅŅŅаĐŊОвĐģĐĩĐŊиĐĩ ŅĐžĐĩдиĐŊĐĩĐŊĐ¸Ņ ĐŧĐĩĐļĐ´Ņ ĐēĐģиĐĩĐŊŅĐžĐŧ (ĐąŅаŅСĐĩŅĐžĐŧ) и ŅĐĩŅвĐĩŅĐžĐŧ и вŅĐąĐžŅ ĐēŅиĐŋŅĐžĐŗŅаŅиŅĐĩŅĐēĐžĐŗĐž ĐēĐģŅŅа (Đ´ĐģŅ ŅиŅŅОваĐŊиŅ).
-
+
ĐŅа ŅаŅŅŅ ĐēĐģиĐĩĐŊŅ-ŅĐĩŅвĐĩŅĐŊĐžĐŗĐž вСаиĐŧОдĐĩĐšŅŅĐ˛Đ¸Ņ ŅŅŅаĐŊавĐģиваĐĩŅ TLS-ŅĐžĐĩдиĐŊĐĩĐŊиĐĩ и ĐŊаСŅваĐĩŅŅŅ **TLS-ŅŅĐēĐžĐŋĐžĐļаŅиĐĩĐŧ**.
@@ -118,7 +118,7 @@ DNS-ŅĐĩŅвĐĩŅа ĐŋŅиŅŅĐģаŅŅ ĐąŅаŅСĐĩŅŅ ĐžĐŋŅĐĩĐ´ĐĩĐģŅĐŊĐŊŅĐš
ĐĸĐž ĐĩŅŅŅ ĐąŅĐ´ĐĩŅ Đ˛ŅĐąŅаĐŊ ŅĐĩŅŅиŅиĐēĐ°Ņ Đ´ĐģŅ Đ´ĐžĐŧĐĩĐŊа `someapp.example.com`.
-
+
ĐĐģиĐĩĐŊŅ ŅĐļĐĩ **дОвĐĩŅŅĐĩŅ** ŅĐžĐŧŅ, ĐēŅĐž вŅдаĐģ ŅŅĐžŅ TLS-ŅĐĩŅŅиŅиĐēĐ°Ņ (в ĐŊаŅĐĩĐŧ ŅĐģŅŅаĐĩ - Let's Encrypt, ĐŊĐž ĐŧŅ ĐĩŅŅ ĐžĐąŅŅдиĐŧ ŅŅĐž), ĐŋĐžŅĐžĐŧŅ ĐŧĐžĐļĐĩŅ **ĐŋŅОвĐĩŅиŅŅ**, Đ´ĐĩĐšŅŅвиŅĐĩĐģĐĩĐŊ Đģи ĐŋĐžĐģŅŅĐĩĐŊĐŊŅĐš ĐžŅ ŅĐĩŅвĐĩŅа ŅĐĩŅŅиŅиĐēаŅ.
@@ -140,19 +140,19 @@ DNS-ŅĐĩŅвĐĩŅа ĐŋŅиŅŅĐģаŅŅ ĐąŅаŅСĐĩŅŅ ĐžĐŋŅĐĩĐ´ĐĩĐģŅĐŊĐŊŅĐš
ĐĸаĐē ĐēĐģиĐĩĐŊŅ ĐžŅĐŋŅавĐģŅĐĩŅ **HTTPS-СаĐŋŅĐžŅ**. ĐĸĐž ĐĩŅŅŅ ĐžĐąŅŅĐŊŅĐš HTTP-СаĐŋŅĐžŅ, ĐŊĐž ŅĐĩŅĐĩС СаŅиŅŅОваĐŊĐŊĐžĐĩ TLS-ŅОдиĐŊĐĩĐŊиĐĩ.
-
+
### РаŅŅиŅŅОвĐēа СаĐŋŅĐžŅа
ĐŅĐžĐēŅи-ŅĐĩŅвĐĩŅ, иŅĐŋĐžĐģŅСŅŅ ŅĐžĐŗĐģаŅОваĐŊĐŊŅĐš Ņ ĐēĐģиĐĩĐŊŅĐžĐŧ ĐēĐģŅŅ, ŅаŅŅиŅŅŅĐĩŅ ĐŋĐžĐģŅŅĐĩĐŊĐŊŅĐš **СаŅиŅŅОваĐŊĐŊŅĐš СаĐŋŅĐžŅ** и ĐŋĐĩŅĐĩдаŅŅ **ОйŅŅĐŊŅĐš (ĐŊĐĩСаŅиŅŅОваĐŊĐŊŅĐš) HTTP-СаĐŋŅĐžŅ** ĐŋŅĐžŅĐĩŅŅŅ, СаĐŋŅŅĐēаŅŅĐĩĐŧŅ ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩ (ĐŊаĐŋŅиĐŧĐĩŅ, ĐŋŅĐžŅĐĩŅŅŅ Uvicorn СаĐŋŅŅĐēаŅŅĐĩĐŧŅ ĐŋŅиĐģĐžĐļĐĩĐŊиĐĩ FastAPI).
-
+
### HTTP-ĐžŅвĐĩŅ
ĐŅиĐģĐžĐļĐĩĐŊиĐĩ ОйŅайОŅаĐĩŅ ĐˇĐ°ĐŋŅĐžŅ Đ¸ вĐĩŅĐŊŅŅ **ОйŅŅĐŊŅĐš (ĐŊĐĩСаŅиŅŅОваĐŊĐŊŅĐš) HTTP-ĐžŅвĐĩŅ** ĐŋŅĐžĐēŅи-ŅĐĩŅвĐĩŅŅ.
-
+
### HTTPS-ĐžŅвĐĩŅ
@@ -160,7 +160,7 @@ DNS-ŅĐĩŅвĐĩŅа ĐŋŅиŅŅĐģаŅŅ ĐąŅаŅСĐĩŅŅ ĐžĐŋŅĐĩĐ´ĐĩĐģŅĐŊĐŊŅĐš
ĐаĐēĐžĐŊĐĩŅ, ĐąŅаŅСĐĩŅ ĐŋŅОвĐĩŅĐ¸Ņ ĐžŅвĐĩŅ, в ŅĐžĐŧ ŅиŅĐģĐĩ, ŅŅĐž ŅĐžŅ ĐˇĐ°ŅиŅŅОваĐŊ Ņ ĐŊŅĐļĐŊŅĐŧ ĐēĐģŅŅĐžĐŧ, **ŅаŅŅиŅŅŅĐĩŅ ĐĩĐŗĐž** и ОйŅайОŅаĐĩŅ.
-
+
ĐĐģиĐĩĐŊŅ (ĐąŅаŅСĐĩŅ) СĐŊаĐĩŅ, ŅŅĐž ĐžŅвĐĩŅ ĐŋŅиŅŅĐģ ĐžŅ ĐŋŅавиĐģŅĐŊĐžĐŗĐž ŅĐĩŅвĐĩŅа, ŅаĐē ĐēаĐē иŅĐŋĐžĐģŅСŅĐĩŅ ĐŧĐĩŅĐžĐ´Ņ ŅиŅŅОваĐŊиŅ, ŅĐžĐŗĐģаŅОваĐŊĐŊŅĐĩ иĐŧи ŅаĐŊĐŊĐĩĐĩ ŅĐĩŅĐĩС **HTTPS-ŅĐĩŅŅиŅиĐēаŅ**.
@@ -171,7 +171,7 @@ DNS-ŅĐĩŅвĐĩŅа ĐŋŅиŅŅĐģаŅŅ ĐąŅаŅСĐĩŅŅ ĐžĐŋŅĐĩĐ´ĐĩĐģŅĐŊĐŊŅĐš
ĐаĐŋĐžĐŧĐŊŅ, ŅŅĐž ŅĐžĐģŅĐēĐž ОдиĐŊ ĐŋŅĐžŅĐĩŅŅ (ĐŊаĐŋŅиĐŧĐĩŅ, ĐŋŅĐžĐēŅи-ŅĐĩŅвĐĩŅ) ĐŧĐžĐļĐĩŅ ĐŋŅĐžŅĐģŅŅиваŅŅ ĐžĐŋŅĐĩĐ´ĐĩĐģŅĐŊĐŊŅĐš ĐŋĐžŅŅ ĐžĐŋŅĐĩĐ´ĐĩĐģŅĐŊĐŊĐžĐŗĐž IP-адŅĐĩŅа.
ĐĐž Đ´ŅŅĐŗĐ¸Đĩ ĐŋŅĐžŅĐĩŅŅŅ Đ¸ ĐŋŅиĐģĐžĐļĐĩĐŊĐ¸Ņ ŅĐžĐļĐĩ ĐŧĐžĐŗŅŅ ŅайОŅаŅŅ ĐŊа ŅŅĐžĐŧ ĐļĐĩ ŅĐĩŅвĐĩŅĐĩ (ŅĐĩŅвĐĩŅаŅ
), ĐĩŅĐģи ĐžĐŊи ĐŊĐĩ ĐŋŅŅаŅŅŅŅ Đ¸ŅĐŋĐžĐģŅСОваŅŅ ŅĐļĐĩ СаĐŊŅŅŅŅ **ĐēĐžĐŧйиĐŊаŅĐ¸Ņ IP-адŅĐĩŅа и ĐŋĐžŅŅа** (ŅĐžĐēĐĩŅ).
-
+
ĐĸаĐēиĐŧ ОйŅаСОĐŧ, ŅĐĩŅвĐĩŅ ĐˇĐ°Đ˛ĐĩŅŅĐĩĐŊĐ¸Ņ TLS ĐŧĐžĐļĐĩŅ ĐžĐąŅайаŅŅваŅŅ HTTPS-СаĐŋŅĐžŅŅ Đ¸ иŅĐŋĐžĐģŅСОваŅŅ ŅĐĩŅŅиŅиĐēаŅŅ Đ´ĐģŅ **ĐŧĐŊĐžĐļĐĩŅŅва Đ´ĐžĐŧĐĩĐŊОв** иĐģи ĐŋŅиĐģĐžĐļĐĩĐŊиК и ĐŋĐĩŅĐĩдаваŅŅ ĐˇĐ°ĐŋŅĐžŅŅ ĐŋŅавиĐģŅĐŊŅĐŧ адŅĐĩŅаŅаĐŧ (Đ´ŅŅĐŗĐ¸Đŧ ĐŋŅиĐģĐžĐļĐĩĐŊиŅĐŧ).
@@ -181,7 +181,7 @@ DNS-ŅĐĩŅвĐĩŅа ĐŋŅиŅŅĐģаŅŅ ĐąŅаŅСĐĩŅŅ ĐžĐŋŅĐĩĐ´ĐĩĐģŅĐŊĐŊŅĐš
ĐĐžĐŗĐ´Đ° ŅŅĐž ĐŋŅОиСОКдŅŅ, ĐŧĐžĐļĐŊĐž СаĐŋŅŅŅиŅŅ Đ´ŅŅĐŗŅŅ ĐŋŅĐžĐŗŅаĐŧĐŧŅ, ĐēĐžŅĐžŅĐ°Ņ ĐŋОдĐēĐģŅŅиŅŅŅ Đē Let's Encrypt и ОйĐŊĐžĐ˛Đ¸Ņ ŅĐĩŅŅиŅиĐēаŅ(Ņ). ĐĄŅŅĐĩŅŅвŅŅŅ ĐŋŅĐžĐēŅи-ŅĐĩŅвĐĩŅŅ, ĐēĐžŅĐžŅŅĐĩ ĐŧĐžĐŗŅŅ ŅĐ´ĐĩĐģаŅŅ ŅŅĐž Đ´ĐĩĐšŅŅвиĐĩ ŅаĐŧĐžŅŅĐžŅŅĐĩĐģŅĐŊĐž.
-
+
**TLS-ŅĐĩŅŅиŅиĐēаŅŅ** ĐŊĐĩ ĐŋŅивŅСаĐŊŅ Đē IP-адŅĐĩŅŅ, ĐŊĐž **ŅвŅСаĐŊŅ Ņ Đ¸ĐŧĐĩĐŊĐĩĐŧ Đ´ĐžĐŧĐĩĐŊа**.
diff --git a/docs/ru/docs/tutorial/bigger-applications.md b/docs/ru/docs/tutorial/bigger-applications.md
index 7c3dc288f..8b9080d39 100644
--- a/docs/ru/docs/tutorial/bigger-applications.md
+++ b/docs/ru/docs/tutorial/bigger-applications.md
@@ -52,7 +52,7 @@ from app.routers import items
* ĐОдĐēаŅаĐģĐžĐŗ `app/internal/`, ŅОдĐĩŅĐļаŅиК ŅаКĐģ `__init__.py`, ŅвĐģŅĐĩŅŅŅ ĐĩŅŅ ĐžĐ´ĐŊиĐŧ ŅŅĐą-ĐŋаĐēĐĩŅĐžĐŧ: `app.internal`.
* Đ ŅаКĐģ `app/internal/admin.py` ŅвĐģŅĐĩŅŅŅ ĐĩŅŅ ĐžĐ´ĐŊиĐŧ ŅŅĐą-ĐŧОдŅĐģĐĩĐŧ: `app.internal.admin`.
-
+
Đĸа ĐļĐĩ ŅаĐŧĐ°Ņ ŅаКĐģĐžĐ˛Đ°Ņ ŅŅŅŅĐēŅŅŅа ĐŋŅиĐģĐžĐļĐĩĐŊиŅ, ĐŊĐž Ņ ĐēĐžĐŧĐŧĐĩĐŊŅаŅиŅĐŧи:
@@ -269,7 +269,7 @@ from .dependencies import get_token_header
ĐŅĐŋĐžĐŧĐŊиŅĐĩ, ĐēаĐē вŅĐŗĐģŅĐ´Đ¸Ņ ŅаКĐģĐžĐ˛Đ°Ņ ŅŅŅŅĐēŅŅŅа ĐŊаŅĐĩĐŗĐž ĐŋŅиĐģĐžĐļĐĩĐŊиŅ:
-
+
---
diff --git a/docs/ru/docs/tutorial/cookie-param-models.md b/docs/ru/docs/tutorial/cookie-param-models.md
new file mode 100644
index 000000000..3a57443bb
--- /dev/null
+++ b/docs/ru/docs/tutorial/cookie-param-models.md
@@ -0,0 +1,76 @@
+# ĐОдĐĩĐģи ĐŋаŅаĐŧĐĩŅŅОв cookie
+
+ĐŅĐģи Ņ Đ˛Đ°Ņ ĐĩŅŅŅ ĐŗŅŅĐŋĐŋа **cookies**, ĐēĐžŅĐžŅŅĐĩ ŅвŅСаĐŊŅ ĐŧĐĩĐļĐ´Ņ ŅОйОК, Đ˛Ņ ĐŧĐžĐļĐĩŅĐĩ ŅОСдаŅŅ **Pydantic-ĐŧОдĐĩĐģŅ** Đ´ĐģŅ Đ¸Ņ
ОйŅŅвĐģĐĩĐŊиŅ. đĒ
+
+ĐŅĐž ĐŋОСвОĐģĐ¸Ņ Đ˛Đ°Đŧ **ĐŋĐĩŅĐĩиŅĐŋĐžĐģŅСОваŅŅ ĐŧОдĐĩĐģŅ** в **ŅаСĐŊŅŅ
ĐŧĐĩŅŅаŅ
**, а ŅаĐēĐļĐĩ ОйŅŅвиŅŅ ĐŋŅОвĐĩŅĐēи и ĐŧĐĩŅадаĐŊĐŊŅĐĩ ŅŅĐ°ĐˇŅ Đ´ĐģŅ Đ˛ŅĐĩŅ
ĐŋаŅаĐŧĐĩŅŅОв. đ
+
+/// note | ĐаĐŧĐĩŅĐēа
+
+ĐŅĐžŅ ŅŅĐŊĐēŅиОĐŊаĐģ Đ´ĐžŅŅŅĐŋĐĩĐŊ Ņ Đ˛ĐĩŅŅии `0.115.0`. đ¤
+
+///
+
+/// tip | ХОвĐĩŅ
+
+ĐĸаĐēОК ĐļĐĩ ĐŋОдŅ
Од ĐŋŅиĐŧĐĩĐŊŅĐĩŅŅŅ Đ´ĐģŅ `Query`, `Cookie`, и `Header`. đ
+
+///
+
+## Pydantic-ĐŧОдĐĩĐģŅ Đ´ĐģŅ cookies
+
+ĐĐąŅŅвиŅĐĩ ĐŋаŅаĐŧĐĩŅŅŅ **cookie**, ĐēĐžŅĐžŅŅĐĩ ваĐŧ ĐŊŅĐļĐŊŅ, в **Pydantic-ĐŧОдĐĩĐģи**, а СаŅĐĩĐŧ ОйŅŅвиŅĐĩ ĐŋаŅаĐŧĐĩŅŅ ĐēаĐē `Cookie`:
+
+{* ../../docs_src/cookie_param_models/tutorial001_an_py310.py hl[9:12,16] *}
+
+**FastAPI** **иСвĐģĐĩŅŅŅ** даĐŊĐŊŅĐĩ Đ´ĐģŅ **ĐēаĐļĐ´ĐžĐŗĐž ĐŋĐžĐģŅ** иС **cookies**, ĐŋĐžĐģŅŅĐĩĐŊĐŊŅŅ
в СаĐŋŅĐžŅĐĩ, и вŅдаŅŅ Đ˛Đ°Đŧ ОйŅŅвĐģĐĩĐŊĐŊŅŅ Pydantic-ĐŧОдĐĩĐģŅ.
+
+## ĐŅОвĐĩŅĐēа ŅĐŗĐĩĐŊĐĩŅиŅОваĐŊĐŊОК Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅии
+
+ĐŅ ĐŧĐžĐļĐĩŅĐĩ ĐŋĐžŅĐŧĐžŅŅĐĩŅŅ ĐžĐąŅŅвĐģĐĩĐŊĐŊŅĐĩ cookies в ĐŗŅаŅиŅĐĩŅĐēĐžĐŧ иĐŊŅĐĩŅŅĐĩĐšŅĐĩ ĐĐžĐēŅĐŧĐĩĐŊŅаŅии ĐŋĐž ĐŋŅŅи `/docs`:
+
+
+
+
+
+/// info | ĐĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊĐ°Ņ Đ¸ĐŊŅĐžŅĐŧаŅиŅ
+
+ĐĐŧĐĩĐšŅĐĩ в видŅ, ŅŅĐž, ĐŋĐžŅĐēĐžĐģŅĐēŅ **ĐąŅаŅСĐĩŅŅ ĐžĐąŅайаŅŅваŅŅ cookies** ĐžŅОйŅĐŧ ОйŅаСОĐŧ и ĐŋОд ĐēаĐŋĐžŅĐžĐŧ, ĐžĐŊи **ĐŊĐĩ** ĐŋОСвОĐģŅŅ **JavaScript** ĐģĐĩĐŗĐēĐž ĐŋĐžĐģŅŅиŅŅ Đ´ĐžŅŅŅĐŋ Đē ĐŊиĐŧ.
+
+ĐŅĐģи Đ˛Ņ ĐŋĐĩŅĐĩКдŅŅĐĩ Đē **ĐŗŅаŅиŅĐĩŅĐēĐžĐŧŅ Đ¸ĐŊŅĐĩŅŅĐĩĐšŅŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅии API** ĐŋĐž ĐŋŅŅи `/docs`, ŅĐž ŅĐŧĐžĐļĐĩŅĐĩ ŅвидĐĩŅŅ **Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅиŅ** ĐŋĐž cookies Đ´ĐģŅ Đ˛Đ°ŅиŅ
*ĐžĐŋĐĩŅаŅиК ĐŋŅŅĐĩĐš*.
+
+ĐĐž даĐļĐĩ ĐĩŅĐģи Đ˛Ņ **СаĐŋĐžĐģĐŊиŅĐĩ даĐŊĐŊŅĐĩ** и ĐŊаĐļĐŧŅŅĐĩ "Execute", ĐŋĐžŅĐēĐžĐģŅĐēŅ ĐŗŅаŅиŅĐĩŅĐēиК иĐŊŅĐĩŅŅĐĩĐšŅ ĐĐžĐēŅĐŧĐĩĐŊŅаŅии ŅайОŅаĐĩŅ Ņ **JavaScript**, cookies ĐŊĐĩ ĐąŅĐ´ŅŅ ĐžŅĐŋŅавĐģĐĩĐŊŅ, и Đ˛Ņ ŅвидиŅĐĩ ŅООйŅĐĩĐŊиĐĩ Ой **ĐžŅийĐēĐĩ** ĐēаĐē ĐąŅĐ´ŅĐž ĐŊĐĩ ŅĐēаСŅваĐģи ĐŊиĐēаĐēиŅ
СĐŊаŅĐĩĐŊиК.
+
+///
+
+## ĐаĐŋŅĐĩŅ Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅŅ
cookies
+
+Đ ĐŊĐĩĐēĐžŅĐžŅŅŅ
ŅĐģŅŅаŅŅ
(ĐŊĐĩ ĐžŅОйО ŅаŅŅĐž вŅŅŅĐĩŅаŅŅиŅ
ŅŅ) ваĐŧ ĐŧĐžĐļĐĩŅ ĐŋĐžĐŊадОйиŅŅŅŅ **ĐžĐŗŅаĐŊиŅиŅŅ** cookies, ĐēĐžŅĐžŅŅĐĩ Đ˛Ņ Ņ
ĐžŅиŅĐĩ ĐŋĐžĐģŅŅаŅŅ.
+
+ĐĸĐĩĐŋĐĩŅŅ Đ˛Đ°Ņ API ŅаĐŧ ŅĐĩŅаĐĩŅ, ĐŋŅиĐŊиĐŧаŅŅ Đģи cookies . đ¤ĒđĒ
+
+ĐŅ ĐŧĐžĐļĐĩŅĐĩ ŅĐēĐžĐŊŅĐ¸ĐŗŅŅиŅОваŅŅ Pydantic-ĐŧОдĐĩĐģŅ ŅаĐē, ŅŅĐžĐąŅ ĐˇĐ°ĐŋŅĐĩŅиŅŅ (`forbid`) ĐģŅĐąŅĐĩ Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ (`extra`) ĐŋĐžĐģŅ:
+
+{* ../../docs_src/cookie_param_models/tutorial002_an_py39.py hl[10] *}
+
+ĐŅĐģи ĐēĐģиĐĩĐŊŅ ĐŋĐžĐŋŅОйŅĐĩŅ ĐžŅĐŋŅавиŅŅ **Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ cookies**, ŅĐž в ĐžŅвĐĩŅ ĐžĐŊ ĐŋĐžĐģŅŅĐ¸Ņ **ĐžŅийĐēŅ**.
+
+ĐĐĩĐ´ĐŊŅĐĩ йаĐŊĐŊĐĩŅŅ cookies, ĐžĐŊи вŅĐĩĐŧи ŅиĐģаĐŧи ĐŋŅŅаŅŅŅŅ ĐŋĐžĐģŅŅиŅŅ Đ˛Đ°ŅĐĩ ŅĐžĐŗĐģаŅиĐĩ â и вŅŅ Ņади ŅĐžĐŗĐž, ŅŅĐžĐąŅ API ĐĩĐŗĐž ĐžŅĐēĐģĐžĐŊиĐģ . đĒ
+
+ĐаĐŋŅиĐŧĐĩŅ, ĐĩŅĐģи ĐēĐģиĐĩĐŊŅ ĐŋĐžĐŋŅŅаĐĩŅŅŅ ĐžŅĐŋŅавиŅŅ cookie `santa_tracker` ŅĐž СĐŊаŅĐĩĐŊиĐĩĐŧ `good-list-please`, ŅĐž в ĐžŅвĐĩŅ ĐžĐŊ ĐŋĐžĐģŅŅĐ¸Ņ **ĐžŅийĐēŅ**, ŅООйŅаŅŅŅŅ ĐĩĐŧŅ, ŅŅĐž cookie `santa_tracker` ĐŊĐĩ ŅаСŅĐĩŅŅĐŊ :
+
+```json
+{
+ "detail": [
+ {
+ "type": "extra_forbidden",
+ "loc": ["cookie", "santa_tracker"],
+ "msg": "Extra inputs are not permitted",
+ "input": "good-list-please"
+ }
+ ]
+}
+```
+
+## ĐаĐēĐģŅŅĐĩĐŊиĐĩ
+
+ĐŅ ĐŧĐžĐļĐĩŅĐĩ иŅĐŋĐžĐģŅСОваŅŅ **Pydantic-ĐŧОдĐĩĐģи** Đ´ĐģŅ ĐžĐąŅŅвĐģĐĩĐŊĐ¸Ņ **cookies** в **FastAPI**. đ
diff --git a/docs/ru/docs/tutorial/header-param-models.md b/docs/ru/docs/tutorial/header-param-models.md
new file mode 100644
index 000000000..4f54e3e15
--- /dev/null
+++ b/docs/ru/docs/tutorial/header-param-models.md
@@ -0,0 +1,72 @@
+# ĐОдĐĩĐģи Header-ĐŋаŅаĐŧĐĩŅŅОв
+
+ĐŅĐģи Ņ Đ˛Đ°Ņ ĐĩŅŅŅ ĐŗŅŅĐŋĐŋа ŅвŅСаĐŊĐŊŅŅ
**header-ĐŋаŅаĐŧĐĩŅŅОв**, ŅĐž Đ˛Ņ ĐŧĐžĐļĐĩŅĐĩ ОйŅĐĩдиĐŊиŅŅ Đ¸Ņ
в ОдĐŊŅ **Pydantic-ĐŧОдĐĩĐģŅ**.
+
+ĐŅĐž ĐŋОСвОĐģĐ¸Ņ Đ˛Đ°Đŧ **ĐŋĐĩŅĐĩиŅĐŋĐžĐģŅСОваŅŅ ĐŧОдĐĩĐģŅ** в **ŅаСĐŊŅŅ
ĐŧĐĩŅŅаŅ
**, а ŅаĐēĐļĐĩ СадаŅŅ Đ˛Đ°ĐģидаŅĐ¸Ņ Đ¸ ĐŧĐĩŅадаĐŊĐŊŅĐĩ ŅŅĐ°ĐˇŅ Đ´ĐģŅ Đ˛ŅĐĩŅ
ĐŋаŅаĐŧĐĩŅŅОв. đ
+
+/// note | ĐаĐŧĐĩŅĐēа
+
+ĐŅĐžŅ ŅŅĐŊĐēŅиОĐŊаĐģ Đ´ĐžŅŅŅĐŋĐĩĐŊ в FastAPI ĐŊаŅиĐŊĐ°Ņ Ņ Đ˛ĐĩŅŅии `0.115.0`. đ¤
+
+///
+
+## Header-ĐŋаŅаĐŧĐĩŅŅŅ Đ˛ видĐĩ Pydantic-ĐŧОдĐĩĐģи
+
+ĐĐąŅŅвиŅĐĩ ĐŊŅĐļĐŊŅĐĩ **header-ĐŋаŅаĐŧĐĩŅŅŅ** в **Pydantic-ĐŧОдĐĩĐģи** и СаŅĐĩĐŧ аĐŊĐŊĐžŅиŅŅĐšŅĐĩ ĐŋаŅаĐŧĐĩŅŅ ĐēаĐē `Header`:
+
+{* ../../docs_src/header_param_models/tutorial001_an_py310.py hl[9:14,18] *}
+
+**FastAPI** **иСвĐģĐĩŅŅŅ** даĐŊĐŊŅĐĩ Đ´ĐģŅ **ĐēаĐļĐ´ĐžĐŗĐž ĐŋĐžĐģŅ** иС **ĐˇĐ°ĐŗĐžĐģОвĐēОв** СаĐŋŅĐžŅа и вŅдаŅŅ ĐˇĐ°Đ´Đ°ĐŊĐŊŅŅ Đ˛Đ°Đŧи Pydantic-ĐŧОдĐĩĐģŅ.
+
+## ĐŅОвĐĩŅŅŅĐĩ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅиŅ
+
+ĐŅ ĐŧĐžĐļĐĩŅĐĩ ĐŋĐžŅĐŧĐžŅŅĐĩŅŅ ĐŊŅĐļĐŊŅĐĩ header-ĐŋаŅаĐŧĐĩŅŅŅ Đ˛ ĐŗŅаŅиŅĐĩŅĐēĐžĐŧ иĐŊŅĐĩŅŅĐĩĐšŅĐĩ ŅĐŗĐĩĐŊĐĩŅиŅОваĐŊĐŊОК Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅии ĐŋĐž ĐŋŅŅи `/docs`:
+
+
+
+
+
+## ĐаĐē СаĐŋŅĐĩŅиŅŅ Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ ĐˇĐ°ĐŗĐžĐģОвĐēи
+
+Đ ĐŊĐĩĐēĐžŅĐžŅŅŅ
ŅĐģŅŅаŅŅ
(ĐŊĐĩ ĐžŅОйО ŅаŅŅĐž вŅŅŅĐĩŅаŅŅиŅ
ŅŅ) ваĐŧ ĐŧĐžĐļĐĩŅ ĐŋĐžĐŊадОйиŅŅŅŅ **ĐžĐŗŅаĐŊиŅиŅŅ** ĐˇĐ°ĐŗĐžĐģОвĐēи, ĐēĐžŅĐžŅŅĐĩ Đ˛Ņ Ņ
ĐžŅиŅĐĩ ĐŋĐžĐģŅŅаŅŅ.
+
+ĐŅ ĐŧĐžĐļĐĩŅĐĩ иŅĐŋĐžĐģŅСОваŅŅ Đ˛ĐžĐˇĐŧĐžĐļĐŊĐžŅŅи ĐēĐžĐŊŅĐ¸ĐŗŅŅаŅии Pydantic-ĐŧОдĐĩĐģи Đ´ĐģŅ ŅĐžĐŗĐž, ŅŅĐžĐąŅ ĐˇĐ°ĐŋŅĐĩŅиŅŅ (`forbid`) ĐģŅĐąŅĐĩ Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ (`extra`) ĐŋĐžĐģŅ:
+
+{* ../../docs_src/header_param_models/tutorial002_an_py310.py hl[10] *}
+
+ĐŅĐģи ĐēĐģиĐĩĐŊŅ ĐŋĐžĐŋŅОйŅĐĩŅ ĐžŅĐŋŅавиŅŅ **Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ ĐˇĐ°ĐŗĐžĐģОвĐēи**, ŅĐž в ĐžŅвĐĩŅ ĐžĐŊ ĐŋĐžĐģŅŅĐ¸Ņ **ĐžŅийĐēŅ**.
+
+ĐаĐŋŅиĐŧĐĩŅ, ĐĩŅĐģи ĐēĐģиĐĩĐŊŅ ĐŋĐžĐŋŅŅаĐĩŅŅŅ ĐžŅĐŋŅавиŅŅ ĐˇĐ°ĐŗĐžĐģОвОĐē `tool` ŅĐž СĐŊаŅĐĩĐŊиĐĩĐŧ `plumbus`, ŅĐž в ĐžŅвĐĩŅ ĐžĐŊ ĐŋĐžĐģŅŅĐ¸Ņ ĐžŅийĐēŅ, ŅООйŅаŅŅŅŅ ĐĩĐŧŅ, ŅŅĐž header-ĐŋаŅаĐŧĐĩŅŅ `tool` ĐŊĐĩ ŅаСŅĐĩŅĐĩĐŊ:
+
+```json
+{
+ "detail": [
+ {
+ "type": "extra_forbidden",
+ "loc": ["header", "tool"],
+ "msg": "Extra inputs are not permitted",
+ "input": "plumbus",
+ }
+ ]
+}
+```
+
+## ĐаĐē ĐžŅĐēĐģŅŅиŅŅ Đ°Đ˛ŅĐžĐŧаŅиŅĐĩŅĐēĐžĐĩ ĐŋŅĐĩОйŅаСОваĐŊиĐĩ ĐŋОдŅĐĩŅĐēиваĐŊиК
+
+ĐаĐē и в ŅĐģŅŅаĐĩ Ņ ĐžĐąŅŅĐŊŅĐŧи ĐˇĐ°ĐŗĐžĐģОвĐēаĐŧи, ĐĩŅĐģи Ņ Đ˛Đ°Ņ Đ˛ иĐŧĐĩĐŊаŅ
ĐŋаŅаĐŧĐĩŅŅОв иĐŧĐĩŅŅŅŅ ŅиĐŧвОĐģŅ ĐŋОдŅĐĩŅĐēиваĐŊиŅ, ĐžĐŊи **авŅĐžĐŧаŅиŅĐĩŅĐēи ĐŋŅĐĩОйŅаСОвŅваŅŅŅŅ Đ˛ Đ´ĐĩŅиŅ**.
+
+ĐаĐŋŅиĐŧĐĩŅ, ĐĩŅĐģи в ĐēОдĐĩ ĐĩŅŅŅ header-ĐŋаŅаĐŧĐĩŅŅ `save_data`, ŅĐž ĐžĐļидаĐĩĐŧŅĐš HTTP-ĐˇĐ°ĐŗĐžĐģОвОĐē ĐąŅĐ´ĐĩŅ `save-data` и иĐŧĐĩĐŊĐŊĐž ŅаĐē ĐžĐŊ ĐąŅĐ´ĐĩŅ ĐžŅОйŅаĐļаŅŅŅŅ Đ˛ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅии.
+
+ĐŅĐģи ĐŋĐž ĐēаĐēиĐŧ-ŅĐž ĐŋŅиŅиĐŊаĐŧ ваĐŧ ĐŊŅĐļĐŊĐž ĐžŅĐēĐģŅŅиŅŅ Đ´Đ°ĐŊĐŊĐžĐĩ авŅĐžĐŧаŅиŅĐĩŅĐēĐžĐĩ ĐŋŅĐĩОйŅаСОваĐŊиĐĩ, ŅŅĐž ĐŧĐžĐļĐŊĐž ŅĐ´ĐĩĐģаŅŅ Đ¸ Đ´ĐģŅ Pydantic-ĐŧОдĐĩĐģĐĩĐš Đ´ĐģŅ header-ĐŋаŅаĐŧĐĩŅŅОв.
+
+{* ../../docs_src/header_param_models/tutorial003_an_py310.py hl[19] *}
+
+/// warning | ĐĐŊиĐŧаĐŊиĐĩ
+
+ĐĐĩŅĐĩĐ´ ŅĐĩĐŧ ĐēаĐē ŅŅŅаĐŊавĐģиваŅŅ Đ´ĐģŅ ĐŋаŅаĐŧĐĩŅŅа `convert_underscores` СĐŊаŅĐĩĐŊиĐĩ `False`, иĐŧĐĩĐšŅĐĩ в видŅ, ŅŅĐž ĐŊĐĩĐēĐžŅĐžŅŅĐĩ HTTP-ĐŋŅĐžĐēŅи и ŅĐĩŅвĐĩŅŅ ĐŊĐĩ ŅаСŅĐĩŅаŅŅ Đ¸ŅĐŋĐžĐģŅСОваŅŅ ĐˇĐ°ĐŗĐžĐģОвĐēи Ņ ŅиĐŧвОĐģаĐŧи ĐŋОдŅĐĩŅĐēиваĐŊиŅ.
+
+///
+
+## Đ ĐĩСŅĐŧĐĩ
+
+ĐŅ ĐŧĐžĐļĐĩŅĐĩ иŅĐŋĐžĐģŅСОваŅŅ **Pydantic-ĐŧОдĐĩĐģи** Đ´ĐģŅ ĐžĐąŅŅвĐģĐĩĐŊĐ¸Ņ **header-ĐŋаŅаĐŧĐĩŅŅОв** в **FastAPI**. đ
diff --git a/docs/ru/docs/tutorial/request-form-models.md b/docs/ru/docs/tutorial/request-form-models.md
new file mode 100644
index 000000000..1034ed27f
--- /dev/null
+++ b/docs/ru/docs/tutorial/request-form-models.md
@@ -0,0 +1,78 @@
+# ĐОдĐĩĐģи ŅĐžŅĐŧ
+
+ĐŅ ĐŧĐžĐļĐĩŅĐĩ иŅĐŋĐžĐģŅСОваŅŅ **Pydantic-ĐŧОдĐĩĐģи** Đ´ĐģŅ ĐžĐąŅŅвĐģĐĩĐŊĐ¸Ņ **ĐŋĐžĐģĐĩĐš ŅĐžŅĐŧ** в FastAPI.
+
+/// info | ĐĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊĐ°Ņ Đ¸ĐŊŅĐžŅĐŧаŅиŅ
+
+ЧŅĐžĐąŅ Đ¸ŅĐŋĐžĐģŅСОваŅŅ ŅĐžŅĐŧŅ, ŅĐŊаŅаĐģа ŅŅŅаĐŊОвиŅĐĩ `python-multipart` .
+
+ĐŖĐąĐĩдиŅĐĩŅŅ, ŅŅĐž Đ˛Ņ ŅОСдаĐģи и аĐēŅивиŅОваĐģи [виŅŅŅаĐģŅĐŊĐžĐĩ ĐžĐēŅŅĐļĐĩĐŊиĐĩ](../virtual-environments.md){.internal-link target=_blank}, а СаŅĐĩĐŧ ŅŅŅаĐŊОвиŅĐĩ ĐŋаĐēĐĩŅ, ĐŊаĐŋŅиĐŧĐĩŅ:
+
+```console
+$ pip install python-multipart
+```
+
+///
+
+/// note | ĐаĐŧĐĩŅĐēа
+
+ĐŅĐžŅ ŅŅĐŊĐēŅиОĐŊаĐģ Đ´ĐžŅŅŅĐŋĐĩĐŊ Ņ Đ˛ĐĩŅŅии `0.113.0`. đ¤
+
+///
+
+## Pydantic-ĐŧОдĐĩĐģŅ Đ´ĐģŅ ŅĐžŅĐŧŅ
+
+ĐаĐŧ ĐŋŅĐžŅŅĐž ĐŊŅĐļĐŊĐž ОйŅŅвиŅŅ **Pydantic-ĐŧОдĐĩĐģŅ** Ņ ĐŋĐžĐģŅĐŧи, ĐēĐžŅĐžŅŅĐĩ Đ˛Ņ Ņ
ĐžŅиŅĐĩ ĐŋĐžĐģŅŅиŅŅ ĐēаĐē **ĐŋĐžĐģŅ ŅĐžŅĐŧŅ**, а СаŅĐĩĐŧ ОйŅŅвиŅŅ ĐŋаŅаĐŧĐĩŅŅ ĐēаĐē `Form`:
+
+{* ../../docs_src/request_form_models/tutorial001_an_py39.py hl[9:11,15] *}
+
+**FastAPI** **иСвĐģĐĩŅŅŅ** даĐŊĐŊŅĐĩ Đ´ĐģŅ **ĐēаĐļĐ´ĐžĐŗĐž ĐŋĐžĐģŅ** иС **даĐŊĐŊŅŅ
ŅĐžŅĐŧŅ** в СаĐŋŅĐžŅĐĩ и вŅдаŅŅ Đ˛Đ°Đŧ ОйŅŅвĐģĐĩĐŊĐŊŅŅ Pydantic-ĐŧОдĐĩĐģŅ.
+
+## ĐŅОвĐĩŅĐēа ŅĐŗĐĩĐŊĐĩŅиŅОваĐŊĐŊОК Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅии
+
+ĐŅ ĐŧĐžĐļĐĩŅĐĩ ĐŋĐžŅĐŧĐžŅŅĐĩŅŅ ĐŋĐžĐģŅ ŅĐžŅĐŧŅ Đ˛ ĐŗŅаŅиŅĐĩŅĐēĐžĐŧ иĐŊŅĐĩŅŅĐĩĐšŅĐĩ ĐĐžĐēŅĐŧĐĩĐŊŅаŅии ĐŋĐž ĐŋŅŅи `/docs`:
+
+
+
+
+
+## ĐаĐŋŅĐĩŅ Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅŅ
ĐŋĐžĐģĐĩĐš ŅĐžŅĐŧŅ
+
+Đ ĐŊĐĩĐēĐžŅĐžŅŅŅ
ŅĐģŅŅаŅŅ
(ĐŊĐĩ ĐžŅОйО ŅаŅŅĐž вŅŅŅĐĩŅаŅŅиŅ
ŅŅ) ваĐŧ ĐŧĐžĐļĐĩŅ ĐŋĐžĐŊадОйиŅŅŅŅ **ĐžĐŗŅаĐŊиŅиŅŅ** ĐŋĐžĐģŅ ŅĐžŅĐŧŅ ŅĐžĐģŅĐēĐž ŅĐĩĐŧи, ĐēĐžŅĐžŅŅĐĩ ОйŅŅвĐģĐĩĐŊŅ Đ˛ Pydantic-ĐŧОдĐĩĐģи. Đ **СаĐŋŅĐĩŅиŅŅ** ĐģŅĐąŅĐĩ **Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ** ĐŋĐžĐģŅ.
+
+/// note | ĐаĐŧĐĩŅĐēа
+
+ĐŅĐžŅ ŅŅĐŊĐēŅиОĐŊаĐģ Đ´ĐžŅŅŅĐŋĐĩĐŊ Ņ Đ˛ĐĩŅŅии `0.114.0`. đ¤
+
+///
+
+ĐŅ ĐŧĐžĐļĐĩŅĐĩ ŅĐēĐžĐŊŅĐ¸ĐŗŅŅиŅОваŅŅ Pydantic-ĐŧОдĐĩĐģŅ ŅаĐē, ŅŅĐžĐąŅ ĐˇĐ°ĐŋŅĐĩŅиŅŅ (`forbid`) вŅĐĩ Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ (`extra`) ĐŋĐžĐģŅ:
+
+{* ../../docs_src/request_form_models/tutorial002_an_py39.py hl[12] *}
+
+ĐŅĐģи ĐēĐģиĐĩĐŊŅ ĐŋĐžĐŋŅОйŅĐĩŅ ĐžŅĐŋŅавиŅŅ Đ´ĐžĐŋĐžĐģĐŊиŅĐĩĐģŅĐŊŅĐĩ даĐŊĐŊŅĐĩ, ŅĐž в ĐžŅвĐĩŅ ĐžĐŊ ĐŋĐžĐģŅŅĐ¸Ņ **ĐžŅийĐēŅ**.
+
+ĐаĐŋŅиĐŧĐĩŅ, ĐĩŅĐģи ĐēĐģиĐĩĐŊŅ ĐŋĐžĐŋŅŅаĐĩŅŅŅ ĐžŅĐŋŅавиŅŅ ĐŋĐžĐģŅ ŅĐžŅĐŧŅ:
+
+* `username`: `Rick`
+* `password`: `Portal Gun`
+* `extra`: `Mr. Poopybutthole`
+
+ĐĸĐž в ĐžŅвĐĩŅ ĐžĐŊ ĐŋĐžĐģŅŅĐ¸Ņ **ĐžŅийĐēŅ**, ŅООйŅаŅŅŅŅ ĐĩĐŧŅ, ŅŅĐž ĐŋĐžĐģĐĩ `extra` ĐŊĐĩ ŅаСŅĐĩŅĐĩĐŊĐž:
+
+```json
+{
+ "detail": [
+ {
+ "type": "extra_forbidden",
+ "loc": ["body", "extra"],
+ "msg": "Extra inputs are not permitted",
+ "input": "Mr. Poopybutthole"
+ }
+ ]
+}
+```
+
+## ĐаĐēĐģŅŅĐĩĐŊиĐĩ
+
+ĐŅ ĐŧĐžĐļĐĩŅĐĩ иŅĐŋĐžĐģŅСОваŅŅ Pydantic-ĐŧОдĐĩĐģи Đ´ĐģŅ ĐžĐąŅŅвĐģĐĩĐŊĐ¸Ņ ĐŋĐžĐģĐĩĐš ŅĐžŅĐŧ в FastAPI. đ
diff --git a/docs/uk/docs/tutorial/background-tasks.md b/docs/uk/docs/tutorial/background-tasks.md
new file mode 100644
index 000000000..912ba8c2a
--- /dev/null
+++ b/docs/uk/docs/tutorial/background-tasks.md
@@ -0,0 +1,85 @@
+# ФОĐŊĐžĐ˛Ņ ĐˇĐ°Đ´Đ°ŅŅ
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ŅŅвОŅŅваŅи ŅĐžĐŊĐžĐ˛Ņ ĐˇĐ°Đ´Đ°ŅŅ, ŅĐēŅ ĐąŅĐ´ŅŅŅ Đ˛Đ¸ĐēĐžĐŊŅваŅиŅŅ *ĐŋŅŅĐģŅ* ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ.
+
+ĐĻĐĩ ĐēĐžŅиŅĐŊĐž Đ´ĐģŅ ĐžĐŋĐĩŅаŅŅĐš, ŅĐēŅ ĐŋĐžŅŅŅĐąĐŊĐž виĐēĐžĐŊаŅи ĐŋŅŅĐģŅ ĐžĐąŅОйĐēи СаĐŋиŅŅ, аĐģĐĩ ĐēĐģŅŅĐŊŅŅ ĐŊĐĩ ОйОвâŅСĐēОвО ŅĐĩĐēаŅи СавĐĩŅŅĐĩĐŊĐŊŅ ŅŅŅŅ ĐžĐŋĐĩŅаŅŅŅ ĐŋĐĩŅĐĩĐ´ ĐžŅŅиĐŧаĐŊĐŊŅĐŧ вŅĐ´ĐŋОвŅĐ´Ņ.
+
+ĐŅиĐēĐģади виĐēĐžŅиŅŅаĐŊĐŊŅ:
+
+* ĐадŅиĐģаĐŊĐŊŅ email-ŅĐŋОвŅŅĐĩĐŊŅ ĐŋŅŅĐģŅ Đ˛Đ¸ĐēĐžĐŊаĐŊĐŊŅ ĐŋĐĩвĐŊĐžŅ Đ´ŅŅ:
+ * ĐŅĐ´ĐēĐģŅŅĐĩĐŊĐŊŅ Đ´Đž ĐŋĐžŅŅĐžĐ˛ĐžĐŗĐž ŅĐĩŅвĐĩŅа Ņа ĐŊадŅиĐģаĐŊĐŊŅ ĐģиŅŅа ĐŧĐžĐļĐĩ СаКĐŧаŅи ĐēŅĐģŅĐēа ŅĐĩĐēŅĐŊĐ´. Đи ĐŧĐžĐļĐĩŅĐĩ вŅĐ´ŅĐ°ĐˇŅ ĐŋОвĐĩŅĐŊŅŅи вŅĐ´ĐŋОвŅĐ´Ņ, а email вŅĐ´ĐŋŅавиŅи Ņ ŅĐžĐŊŅ.
+* ĐĐąŅОйĐēа даĐŊиŅ
:
+ * ĐаĐŋŅиĐēĐģад, ŅĐēŅĐž ĐžŅŅиĐŧаĐŊĐž ŅаКĐģ, ŅĐēиК ĐŋĐžŅŅŅĐąĐŊĐž ОйŅОйиŅи Đ´ĐžĐ˛ĐŗĐžŅŅиваĐģиĐŧ ĐŋŅĐžŅĐĩŅĐžĐŧ, ĐŧĐžĐļĐŊа ĐŋОвĐĩŅĐŊŅŅи вŅĐ´ĐŋОвŅĐ´Ņ "Accepted" ("ĐŅиКĐŊŅŅĐž", HTTP 202) Ņ Đ˛Đ¸ĐēĐžĐŊаŅи ОйŅОйĐēŅ ŅаКĐģŅ Ņ ŅĐžĐŊŅ.
+
+## ĐиĐēĐžŅиŅŅаĐŊĐŊŅ `BackgroundTasks`
+
+ĐĄĐŋĐžŅаŅĐēŅ ŅĐŧĐŋĐžŅŅŅĐšŅĐĩ `BackgroundTasks` Ņ Đ´ĐžĐ´Đ°ĐšŅĐĩ ĐšĐžĐŗĐž ŅĐē ĐŋаŅаĐŧĐĩŅŅ Ņ ĐаŅŅ *ŅŅĐŊĐēŅŅŅ ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ* (path operation function) Đ´Đž `BackgroundTasks`:
+
+{* ../../docs_src/background_tasks/tutorial001.py hl[1,13] *}
+
+**FastAPI** авŅĐžĐŧаŅиŅĐŊĐž ŅŅвОŅиŅŅ ĐžĐą'ŅĐēŅ `BackgroundTasks` Ņ ĐŋĐĩŅĐĩдаŅŅŅ ĐšĐžĐŗĐž Ņ ŅĐĩĐš ĐŋаŅаĐŧĐĩŅŅ.
+
+
+## ĐĄŅвОŅĐĩĐŊĐŊŅ ŅŅĐŊĐēŅŅŅ ĐˇĐ°Đ´Đ°ŅŅ
+
+ĐĄŅвОŅŅŅŅ ŅŅĐŊĐēŅŅŅ, ŅĐēа ĐąŅĐ´Đĩ виĐēĐžĐŊŅваŅи ŅĐžĐŊĐžĐ˛Ņ ĐˇĐ°Đ´Đ°ŅŅ.
+
+ĐĻĐĩ СвиŅаКĐŊа ŅŅĐŊĐēŅŅŅ, ŅĐēа ĐŧĐžĐļĐĩ ĐžŅŅиĐŧŅваŅи ĐŋаŅаĐŧĐĩŅŅи.
+
+ĐĐžĐŊа ĐŧĐžĐļĐĩ ĐąŅŅи аŅиĐŊŅ
ŅĐžĐŊĐŊĐžŅ `async def` айО СвиŅаКĐŊĐžŅ `def` ŅŅĐŊĐēŅŅŅŅ â **FastAPI** ОйŅОйиŅŅ ŅŅ ĐŋŅавиĐģŅĐŊĐž.
+
+ĐŖ ĐŊаŅĐžĐŧŅ Đ˛Đ¸ĐŋадĐēŅ ŅŅĐŊĐēŅŅŅ ĐˇĐ°ĐŋиŅŅŅ Ņ ŅаКĐģ (ŅĐŧŅŅŅŅŅи ĐŊадŅиĐģаĐŊĐŊŅ email).
+
+Đ ĐžŅĐēŅĐģŅĐēи ĐžĐŋĐĩŅаŅŅŅ ĐˇĐ°ĐŋиŅŅ ĐŊĐĩ виĐēĐžŅиŅŅОвŅŅ `async` Ņа `await`, Đŧи виСĐŊаŅаŅĐŧĐž ŅŅĐŊĐēŅŅŅ ŅĐē СвиŅаКĐŊŅ `def`:
+
+{* ../../docs_src/background_tasks/tutorial001.py hl[6:9] *}
+
+## ĐОдаваĐŊĐŊŅ ŅĐžĐŊĐžĐ˛ĐžŅ ĐˇĐ°Đ´Đ°ŅŅ
+
+ĐŖŅĐĩŅĐĩдиĐŊŅ ĐаŅĐžŅ *ŅŅĐŊĐēŅŅŅ ĐžĐąŅОйĐēи ŅĐģŅŅ
Ņ*, ĐŋĐĩŅĐĩдаКŅĐĩ ŅŅĐŊĐēŅŅŅ ĐˇĐ°Đ´Đ°ŅŅ Đ˛ Ой'ŅĐēŅ *background tasks*, виĐēĐžŅиŅŅОвŅŅŅи ĐŧĐĩŅОд `.add_task()`:
+
+{* ../../docs_src/background_tasks/tutorial001.py hl[14] *}
+
+`.add_task()` ĐŋŅиКĐŧĐ°Ņ Đ°ŅĐŗŅĐŧĐĩĐŊŅи:
+
+* ФŅĐŊĐēŅŅŅ ĐˇĐ°Đ´Đ°Ņа, ŅĐēа ĐąŅĐ´Đĩ виĐēĐžĐŊŅваŅиŅŅ Ņ ŅĐžĐŊОвОĐŧŅ ŅĐĩĐļиĐŧŅ (`write_notification`). ĐвĐĩŅĐŊŅŅŅ ŅĐ˛Đ°ĐŗŅ, ŅĐž ĐŋĐĩŅĐĩдаŅŅŅŅŅ ĐžĐąĘŧŅĐēŅ ĐąĐĩС Đ´ŅĐļĐžĐē.
+* ĐŅĐ´Ņ-ŅĐēа ĐŋĐžŅĐģŅдОвĐŊŅŅŅŅ Đ°ŅĐŗŅĐŧĐĩĐŊŅŅв, ŅĐēŅ ĐŋĐžŅŅŅĐąĐŊĐž ĐŋĐĩŅĐĩдаŅи Ņ ŅŅĐŊĐēŅŅŅ ĐˇĐ°Đ˛Đ´Đ°ĐŊĐŊŅ Ņ Đ˛ŅĐ´ĐŋОвŅĐ´ĐŊĐžĐŧŅ ĐŋĐžŅŅĐ´ĐēŅ (`email`).
+* ĐŅĐ´Ņ-ŅĐēŅ ŅĐŧĐĩĐŊОваĐŊŅ Đ°ŅĐŗŅĐŧĐĩĐŊŅи, ŅĐēŅ ĐŋĐžŅŅŅĐąĐŊĐž ĐŋĐĩŅĐĩдаŅи Ņ ŅŅĐŊĐēŅŅŅ ĐˇĐ°Đ´Đ°ŅŅ (`message="some notification"`).
+
+## ĐĐŋŅОвадĐļĐĩĐŊĐŊŅ ĐˇĐ°ĐģĐĩĐļĐŊĐžŅŅĐĩĐš
+
+ĐиĐēĐžŅиŅŅаĐŊĐŊŅ `BackgroundTasks` ŅаĐēĐžĐļ ĐŋŅаŅŅŅ Đˇ ŅиŅŅĐĩĐŧĐžŅ Đ˛ĐŋŅОвадĐļĐĩĐŊĐŊŅ ĐˇĐ°ĐģĐĩĐļĐŊĐžŅŅĐĩĐš. Đи ĐŧĐžĐļĐĩŅĐĩ ĐžĐŗĐžĐģĐžŅиŅи ĐŋаŅаĐŧĐĩŅŅ ŅиĐŋŅ `BackgroundTasks` ĐŊа ŅŅСĐŊиŅ
ŅŅвĐŊŅŅ
: Ņ *ŅŅĐŊĐēŅŅŅ ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ*, Ņ ĐˇĐ°ĐģĐĩĐļĐŊĐžŅŅŅ (dependable), Ņ ĐŋŅĐ´ СаĐģĐĩĐļĐŊĐžŅŅŅ ŅĐžŅĐž.
+
+**FastAPI** СĐŊаŅ, ŅĐē Đ´ŅŅŅи в ĐēĐžĐļĐŊĐžĐŧŅ Đ˛Đ¸ĐŋадĐēŅ Ņ ŅĐē ĐŋОвŅĐžŅĐŊĐž виĐēĐžŅиŅŅОвŅваŅи ОдиĐŊ Ņ ŅОК ŅаĐŧиК Ой'ŅĐēŅ, ŅОй ŅŅŅ ŅĐžĐŊĐžĐ˛Ņ ĐˇĐ°Đ´Đ°ŅŅ ĐąŅĐģи ОйâŅĐ´ĐŊаĐŊŅ Ņа виĐēĐžĐŊŅваĐģиŅŅ Ņ ŅĐžĐŊОвОĐŧŅ ŅĐĩĐļиĐŧŅ ĐŋŅŅĐģŅ ĐˇĐ°Đ˛ĐĩŅŅĐĩĐŊĐŊŅ ĐžŅĐŊОвĐŊĐžĐŗĐž СаĐŋиŅŅ.
+
+{* ../../docs_src/background_tasks/tutorial002_an_py310.py hl[13,15,22,25] *}
+
+ĐŖ ŅŅĐžĐŧŅ ĐŋŅиĐēĐģĐ°Đ´Ņ ĐŋОвŅĐ´ĐžĐŧĐģĐĩĐŊĐŊŅ ĐąŅĐ´ŅŅŅ ĐˇĐ°ĐŋиŅаĐŊŅ Ņ ŅаКĐģ `log.txt` *ĐŋŅŅĐģŅ* ŅĐžĐŗĐž, ŅĐē вŅĐ´ĐŋОвŅĐ´Ņ ĐąŅĐ´Đĩ ĐŊадŅŅĐģаĐŊа.
+
+Đ¯ĐēŅĐž Ņ ĐˇĐ°ĐŋиŅŅ ĐąŅв ĐŋĐĩŅĐĩдаĐŊиК query-ĐŋаŅаĐŧĐĩŅŅ, вŅĐŊ ĐąŅĐ´Đĩ СаĐŋиŅаĐŊиК Ņ ĐģĐžĐŗ Ņ ŅĐžĐŊОвŅĐš СадаŅŅ.
+
+Đ ĐŋĐžŅŅĐŧ ŅĐŊŅа ŅĐžĐŊОва СадаŅа, ŅĐēа ŅŅвОŅŅŅŅŅŅŅ Ņ *ŅŅĐŊĐēŅŅŅ ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ*, СаĐŋиŅĐĩ ĐŋОвŅĐ´ĐžĐŧĐģĐĩĐŊĐŊŅ Đˇ виĐēĐžŅиŅŅаĐŊĐŊŅĐŧ path ĐŋаŅаĐŧĐĩŅŅа `email`.
+
+## ĐĸĐĩŅ
ĐŊŅŅĐŊŅ Đ´ĐĩŅаĐģŅ
+
+ĐĐģĐ°Ņ `BackgroundTasks` ĐŋĐžŅ
ОдиŅŅ ĐąĐĩСĐŋĐžŅĐĩŅĐĩĐ´ĐŊŅĐž С `starlette.background` .
+
+ĐŅĐŊ ŅĐŧĐŋĐžŅŅŅŅŅŅŅŅ ĐąĐĩСĐŋĐžŅĐĩŅĐĩĐ´ĐŊŅĐž Ņ FastAPI, ŅОй Đи ĐŧĐžĐŗĐģи виĐēĐžŅиŅŅОвŅваŅи ĐšĐžĐŗĐž С `fastapi` Ņ Đ˛Đ¸ĐŋадĐēОвО ĐŊĐĩ ŅĐŧĐŋĐžŅŅŅваĐģи `BackgroundTask` (ĐąĐĩС s в ĐēŅĐŊŅŅ) С `starlette.background`.
+
+Đ¯ĐēŅĐž виĐēĐžŅиŅŅОвŅваŅи ĐģиŅĐĩ `BackgroundTasks` (а ĐŊĐĩ `BackgroundTask`), ŅĐž ĐšĐžĐŗĐž ĐŧĐžĐļĐŊа ĐŋĐĩŅĐĩдаваŅи ŅĐē ĐŋаŅаĐŧĐĩŅŅ Ņ *ŅŅĐŊĐēŅŅŅ ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ*, Ņ **FastAPI** ĐŋĐžĐ´ĐąĐ°Ņ ĐŋŅĐž вŅĐĩ ŅĐŊŅĐĩ, ŅаĐē ŅаĐŧĐž ŅĐē Ņ ĐŋŅĐž виĐēĐžŅиŅŅаĐŊĐŊŅ ĐžĐą'ŅĐēŅа `Request`.
+
+ĐĸаĐēĐžĐļ ĐŧĐžĐļĐŊа виĐēĐžŅиŅŅОвŅваŅи `BackgroundTask` ĐžĐēŅĐĩĐŧĐž в FastAPI, аĐģĐĩ Đ´ĐģŅ ŅŅĐžĐŗĐž ĐаĐŧ дОвĐĩĐ´ĐĩŅŅŅŅ ŅŅвОŅиŅи Ой'ŅĐēŅ Ņ ĐēĐžĐ´Ņ Ņа ĐŋОвĐĩŅĐŊŅŅи Starlette `Response`, вĐēĐģŅŅаŅŅи ĐšĐžĐŗĐž.
+
+ĐĐĩŅаĐģŅĐŊŅŅĐĩ ĐŧĐžĐļĐŊа ĐŋĐžŅиŅаŅи в ĐžŅŅŅŅĐšĐŊŅĐš Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ Starlette ĐŋŅĐž ŅĐžĐŊĐžĐ˛Ņ ĐˇĐ°Đ´Đ°ŅŅ .
+
+## ĐаŅŅĐĩŅĐĩĐļĐĩĐŊĐŊŅ
+
+Đ¯ĐēŅĐž ĐаĐŧ ĐŋĐžŅŅŅĐąĐŊĐž виĐēĐžĐŊŅваŅи ŅĐēĐģадĐŊŅ ŅĐžĐŊĐžĐ˛Ņ ĐžĐąŅиŅĐģĐĩĐŊĐŊŅ, Ņ ĐŋŅи ŅŅĐžĐŧŅ ĐŊĐĩĐŧа ĐŋĐžŅŅĐĩйи СаĐŋŅŅĐēаŅи ŅŅ
Ņ ŅĐžĐŧŅ Đļ ĐŋŅĐžŅĐĩŅŅ (ĐŊаĐŋŅиĐēĐģад, ĐŊĐĩ ĐŋĐžŅŅŅĐąĐŊĐž ŅĐŋŅĐģŅĐŊĐžĐŗĐž Đ´ĐžŅŅŅĐŋŅ Đ´Đž ĐŋаĐŧâŅŅŅ Ņи СĐŧŅĐŊĐŊиŅ
), ĐŧĐžĐļĐģивО, ваŅŅĐž ŅĐēĐžŅиŅŅаŅиŅŅ ĐąŅĐģŅŅ ĐŋĐžŅŅĐļĐŊиĐŧи ŅĐŊŅŅŅŅĐŧĐĩĐŊŅаĐŧи, ŅаĐēиĐŧи ŅĐē Celery .
+
+ĐĸаĐēŅ ŅĐŊŅŅŅŅĐŧĐĩĐŊŅи СаСвиŅаК ĐŋĐžŅŅĐĩĐąŅŅŅŅ ŅĐēĐģадĐŊŅŅĐžŅ ĐēĐžĐŊŅŅĐŗŅŅаŅŅŅ Ņа ĐŧĐĩĐŊĐĩĐ´ĐļĐĩŅа ŅĐĩŅĐŗĐ¸ ĐŋОвŅĐ´ĐžĐŧĐģĐĩĐŊŅ/СавдаĐŊŅ, ĐŊаĐŋŅиĐēĐģад, RabbitMQ айО Redis. ĐĐ´ĐŊаĐē вОĐŊи дОСвОĐģŅŅŅŅ Đ˛Đ¸ĐēĐžĐŊŅваŅи ŅĐžĐŊĐžĐ˛Ņ ĐˇĐ°Đ´Đ°ŅŅ Đ˛ ĐēŅĐģŅĐēĐžŅ
ĐŋŅĐžŅĐĩŅаŅ
Ņ ĐŊавŅŅŅ ĐŊа ĐēŅĐģŅĐēĐžŅ
ŅĐĩŅвĐĩŅаŅ
.
+
+Đ¯ĐēŅĐž Đļ ĐаĐŧ ĐŋĐžŅŅŅĐąĐŊĐž ĐžŅŅиĐŧаŅи Đ´ĐžŅŅŅĐŋ Đ´Đž СĐŧŅĐŊĐŊиŅ
Ņ ĐžĐąâŅĐēŅŅв ŅС ŅŅŅŅ Đļ **FastAPI** - ĐŋŅĐžĐŗŅаĐŧи айО виĐēĐžĐŊŅваŅи ĐŊĐĩвĐĩĐģиĐēŅ ŅĐžĐŊĐžĐ˛Ņ ĐˇĐ°Đ˛Đ´Đ°ĐŊĐŊŅ (ĐŊаĐŋŅиĐēĐģад, ĐŊадŅиĐģаŅи ŅĐŋОвŅŅĐĩĐŊĐŊŅ ĐĩĐģĐĩĐēŅŅĐžĐŊĐŊĐžŅ ĐŋĐžŅŅĐžŅ), Đ´ĐžŅŅаŅĐŊŅĐž ĐŋŅĐžŅŅĐž виĐēĐžŅиŅŅОвŅваŅи `BackgroundTasks`.
+
+## ĐŅĐ´ŅŅĐŧĐžĐē
+
+ĐĐŧĐŋĐžŅŅŅĐšŅĐĩ Ņа виĐēĐžŅиŅŅОвŅĐšŅĐĩ `BackgroundTasks` ŅĐē ĐŋаŅаĐŧĐĩŅŅ Ņ *ŅŅĐŊĐēŅŅŅŅ
ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ* Ņа СаĐģĐĩĐļĐŊĐžŅŅŅŅ
, ŅОй дОдаваŅи ŅĐžĐŊĐžĐ˛Ņ ĐˇĐ°Đ´Đ°ŅŅ.
diff --git a/docs/uk/docs/tutorial/body-updates.md b/docs/uk/docs/tutorial/body-updates.md
new file mode 100644
index 000000000..e78b5a5bf
--- /dev/null
+++ b/docs/uk/docs/tutorial/body-updates.md
@@ -0,0 +1,116 @@
+# ĐĸŅĐģĐž â ĐĐŊОвĐģĐĩĐŊĐŊŅ
+
+## ĐĐŊОвĐģĐĩĐŊĐŊŅ Đˇ виĐēĐžŅиŅŅаĐŊĐŊŅĐŧ `PUT`
+
+ЊОй ĐžĐŊОвиŅи ĐĩĐģĐĩĐŧĐĩĐŊŅ, Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅаŅи HTTP `PUT` ĐžĐŋĐĩŅаŅŅŅ.
+
+Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅаŅи `jsonable_encoder`, ŅОй ĐŋĐĩŅĐĩŅвОŅиŅи вŅ
ŅĐ´ĐŊŅ Đ´Đ°ĐŊŅ ĐŊа ŅаĐēŅ, ŅĐēŅ ĐŧĐžĐļĐŊа СйĐĩŅŅĐŗĐ°Ņи ŅĐē JSON (ĐŊаĐŋŅиĐēĐģад, Ņ NoSQL ĐąĐ°ĐˇŅ Đ´Đ°ĐŊиŅ
). ĐаĐŋŅиĐēĐģад, ĐŋĐĩŅĐĩŅвОŅŅŅŅи `datetime` Ņ `str`.
+
+{* ../../docs_src/body_updates/tutorial001_py310.py hl[28:33] *}
+
+`PUT` виĐēĐžŅиŅŅОвŅŅŅŅŅŅ Đ´ĐģŅ ĐžŅŅиĐŧаĐŊĐŊŅ Đ´Đ°ĐŊиŅ
, ŅĐēŅ ĐŧаŅŅŅ ĐˇĐ°ĐŧŅĐŊиŅи ŅиĐŊĐŊŅ Đ´Đ°ĐŊŅ.
+
+### ĐĐžĐŋĐĩŅĐĩĐ´ĐļĐĩĐŊĐŊŅ ĐŋŅĐž СаĐŧŅĐŊŅ
+
+ĐĻĐĩ ОСĐŊаŅаŅ, ŅĐž ŅĐēŅĐž Đи Ņ
ĐžŅĐĩŅĐĩ ĐžĐŊОвиŅи ĐĩĐģĐĩĐŧĐĩĐŊŅ `bar`, виĐēĐžŅиŅŅОвŅŅŅи `PUT` С ŅŅĐģĐžĐŧ:
+
+```Python
+{
+ "name": "Barz",
+ "price": 3,
+ "description": None,
+}
+```
+
+ĐžŅĐēŅĐģŅĐēи вŅĐŊ ĐŊĐĩ ĐŧŅŅŅиŅŅ Đ˛ĐļĐĩ СйĐĩŅĐĩĐļĐĩĐŊĐžĐŗĐž аŅŅийŅŅа `"tax": 20.2`, ĐŧОдĐĩĐģŅ Đ˛Đ˛ĐĩĐ´ĐĩĐŊĐŊŅ ĐŋŅиКĐŧĐĩ СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ `"tax": 10.5`.
+
+РдаĐŊŅ ĐąŅĐ´ŅŅŅ ĐˇĐąĐĩŅĐĩĐļĐĩĐŊŅ Đˇ ŅиĐŧ "ĐŊОвиĐŧ" СĐŊаŅĐĩĐŊĐŊŅĐŧ `tax` = `10.5`.
+
+## ЧаŅŅĐēĐžĐ˛Ņ ĐžĐŊОвĐģĐĩĐŊĐŊŅ Đˇ `PATCH`
+
+Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи ĐžĐŋĐĩŅаŅŅŅ HTTP `PATCH` Đ´ĐģŅ *ŅаŅŅĐēĐžĐ˛ĐžĐŗĐž* ĐžĐŊОвĐģĐĩĐŊĐŊŅ Đ´Đ°ĐŊиŅ
.
+
+ĐĻĐĩ ОСĐŊаŅаŅ, ŅĐž Đи ĐŧĐžĐļĐĩŅĐĩ ĐŊадŅŅĐģаŅи ĐģиŅĐĩ ŅŅ Đ´Đ°ĐŊŅ, ŅĐēŅ Ņ
ĐžŅĐĩŅĐĩ ĐžĐŊОвиŅи, СаĐģиŅаŅŅи ŅĐŊŅŅ ĐąĐĩС СĐŧŅĐŊ.
+
+/// note | ĐŅиĐŧŅŅĐēа
+
+`PATCH` ĐŧĐĩĐŊŅ Đ˛ŅĐ´ĐžĐŧиК Ņ ŅŅĐ´ŅĐĩ виĐēĐžŅиŅŅОвŅŅŅŅŅŅ, ĐŊŅĐļ `PUT`.
+
+Đ ĐąĐ°ĐŗĐ°ŅĐž ĐēĐžĐŧаĐŊĐ´ виĐēĐžŅиŅŅОвŅŅŅŅ ĐģиŅĐĩ `PUT`, ĐŊавŅŅŅ Đ´ĐģŅ ŅаŅŅĐēОвиŅ
ĐžĐŊОвĐģĐĩĐŊŅ.
+
+Đи **вŅĐģŅĐŊŅ** виĐēĐžŅиŅŅОвŅваŅи ŅŅ
ŅаĐē, ŅĐē Ņ
ĐžŅĐĩŅĐĩ, **FastAPI** ĐŊĐĩ ĐŊаĐēĐģĐ°Đ´Đ°Ņ ĐžĐąĐŧĐĩĐļĐĩĐŊŅ.
+
+ĐĐģĐĩ ŅĐĩĐš ĐŋĐžŅŅĐąĐŊиĐē ĐŋĐžĐēаСŅŅ ĐаĐŧ ĐąŅĐģŅŅ-ĐŧĐĩĐŊŅ ŅĐē ŅŅ
СадŅĐŧаĐŊĐž виĐēĐžŅиŅŅОвŅваŅи.
+
+///
+
+### ĐиĐēĐžŅиŅŅаĐŊĐŊŅ ĐŋаŅаĐŧĐĩŅŅа `exclude_unset` Ņ Pydantic
+
+Đ¯ĐēŅĐž Đи Ņ
ĐžŅĐĩŅĐĩ ĐžŅŅиĐŧаŅи ŅаŅŅĐēĐžĐ˛Ņ ĐžĐŊОвĐģĐĩĐŊĐŊŅ, Đ´ŅĐļĐĩ СŅŅŅĐŊĐž виĐēĐžŅиŅŅОвŅваŅи ĐŋаŅаĐŧĐĩŅŅ `exclude_unset` Ņ ĐŧĐĩŅĐžĐ´Ņ `.model_dump()` ĐŧОдĐĩĐģŅ Pydantic.
+
+ĐаĐŋŅиĐēĐģад: `item.model_dump(exclude_unset=True)`.
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+ĐŖ Pydantic v1 ŅĐĩĐš ĐŧĐĩŅОд ĐŊаСивавŅŅ `.dict()`, вŅĐŊ ĐąŅв СаŅŅаŅŅĐģиК (аĐģĐĩ вŅĐĩ ŅĐĩ ĐŋŅĐ´ŅŅиĐŧŅŅŅŅŅŅ) Ņ Pydantic v2, Ņ ĐąŅв ĐŋĐĩŅĐĩĐšĐŧĐĩĐŊОваĐŊиК Ņ `.model_dump()`.
+
+ĐŅиĐēĐģади ŅŅŅ Đ˛Đ¸ĐēĐžŅиŅŅОвŅŅŅŅ `.dict()` Đ´ĐģŅ ŅŅĐŧŅŅĐŊĐžŅŅŅ Đˇ Pydantic v1, аĐģĐĩ ĐаĐŧ ŅĐģŅĐ´ виĐēĐžŅиŅŅОвŅваŅи `.model_dump()`, ŅĐēŅĐž ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи Pydantic v2.
+
+///
+
+ĐĻĐĩ ŅŅвОŅиŅŅ `dict` ĐģиŅĐĩ С ŅиĐŧи даĐŊиĐŧи, ŅĐēŅ ĐąŅĐģи ŅвĐŊĐž вŅŅаĐŊОвĐģĐĩĐŊŅ ĐŋŅĐ´ ŅĐ°Ņ ŅŅвОŅĐĩĐŊĐŊŅ ĐŧОдĐĩĐģŅ `item`, виĐēĐģŅŅаŅŅи СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ.
+
+ĐĸĐžĐ´Ņ Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи ŅĐĩ, ŅОй ŅŅвОŅиŅи `dict` ĐģиŅĐĩ С даĐŊиĐŧи, ŅĐēŅ ĐąŅĐģи вŅŅаĐŊОвĐģĐĩĐŊŅ (ĐŊадŅŅĐģаĐŊŅ Ņ ĐˇĐ°ĐŋиŅŅ), ĐŋŅĐžĐŋŅŅĐēаŅŅи СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ:
+
+{* ../../docs_src/body_updates/tutorial002_py310.py hl[32] *}
+
+### ĐиĐēĐžŅиŅŅаĐŊĐŊŅ ĐŋаŅаĐŧĐĩŅŅа `update` Ņ Pydantic
+
+ĐĸĐĩĐŋĐĩŅ Đи ĐŧĐžĐļĐĩŅĐĩ ŅŅвОŅиŅи ĐēĐžĐŋŅŅ ĐŊаŅвĐŊĐžŅ ĐŧОдĐĩĐģŅ ĐˇĐ° Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ `.model_copy()`, Ņ ĐŋĐĩŅĐĩдаŅи ĐŋаŅаĐŧĐĩŅŅ `update` С `dict` , ŅĐēиК ĐŧŅŅŅиŅŅ Đ´Đ°ĐŊŅ Đ´ĐģŅ ĐžĐŊОвĐģĐĩĐŊĐŊŅ.
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+ĐŖ Pydantic v1 ĐŧĐĩŅОд ĐŊаСивавŅŅ `.copy()`, вŅĐŊ ĐąŅв СаŅŅаŅŅĐģиК (аĐģĐĩ вŅĐĩ ŅĐĩ ĐŋŅĐ´ŅŅиĐŧŅŅŅŅŅŅ) Ņ Pydantic v2, Ņ ĐąŅв ĐŋĐĩŅĐĩĐšĐŧĐĩĐŊОваĐŊиК Ņ `.model_copy()`.
+
+ĐŅиĐēĐģади ŅŅŅ Đ˛Đ¸ĐēĐžŅиŅŅОвŅŅŅŅ `.copy()` Đ´ĐģŅ ŅŅĐŧŅŅĐŊĐžŅŅŅ Đˇ Pydantic v1, аĐģĐĩ ŅĐēŅĐž Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи Pydantic v2 â ĐаĐŧ ŅĐģŅĐ´ виĐēĐžŅиŅŅОвŅваŅи `.model_copy()` СаĐŧŅŅŅŅ ŅŅĐžĐŗĐž.
+
+///
+
+ĐаĐŋŅиĐēĐģад: `stored_item_model.model_copy(update=update_data)`:
+
+{* ../../docs_src/body_updates/tutorial002_py310.py hl[33] *}
+
+### ĐŅĐ´ŅŅĐŧĐžĐē ŅаŅŅĐēОвиŅ
ĐžĐŊОвĐģĐĩĐŊŅ
+
+ĐŖ ĐŋŅĐ´ŅŅĐŧĐēŅ, ŅОй СаŅŅĐžŅŅваŅи ŅаŅŅĐēĐžĐ˛Ņ ĐžĐŊОвĐģĐĩĐŊĐŊŅ, Đи:
+
+* (ĐĐŋŅŅĐžĐŊаĐģŅĐŊĐž) виĐēĐžŅиŅŅОвŅŅŅĐĩ `PATCH` СаĐŧŅŅŅŅ `PUT`.
+* ĐŅŅиĐŧŅŅŅĐĩ СйĐĩŅĐĩĐļĐĩĐŊŅ Đ´Đ°ĐŊŅ.
+* ĐĐžĐŧŅŅаŅŅĐĩ ŅŅ Đ´Đ°ĐŊŅ Đ˛ ĐŧОдĐĩĐģŅ Pydantic.
+* ĐĐĩĐŊĐĩŅŅŅŅĐĩ `dict` ĐąĐĩС СĐŊаŅĐĩĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ С ĐŧОдĐĩĐģŅ Đ˛Đ˛ĐĩĐ´ĐĩĐŊĐŊŅ (виĐēĐžŅиŅŅОвŅŅŅи `exclude_unset`).
+ * ĐĸаĐēиĐŧ ŅиĐŊĐžĐŧ Đи ĐžĐŊОвиŅĐĩ ĐģиŅĐĩ ŅŅ ĐˇĐŊаŅĐĩĐŊĐŊŅ, ŅĐēŅ ĐąŅĐģи ŅвĐŊĐž СадаĐŊŅ ĐēĐžŅиŅŅŅваŅĐĩĐŧ, СаĐŧŅŅŅŅ ŅĐžĐŗĐž, ŅОй ĐŋĐĩŅĐĩСаĐŋиŅŅваŅи вĐļĐĩ СйĐĩŅĐĩĐļĐĩĐŊŅ ĐˇĐŊаŅĐĩĐŊĐŊŅ ĐˇĐŊаŅĐĩĐŊĐŊŅĐŧи Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ С ваŅĐžŅ ĐŧОдĐĩĐģŅ.
+* ĐĄŅвОŅŅŅŅĐĩ ĐēĐžĐŋŅŅ ĐˇĐąĐĩŅĐĩĐļĐĩĐŊĐžŅ ĐŧОдĐĩĐģŅ, ĐžĐŊОвĐģŅŅŅи ŅŅ Đ°ŅŅийŅŅи ĐžŅŅиĐŧаĐŊиĐŧи ŅаŅŅĐēОвиĐŧи ĐžĐŊОвĐģĐĩĐŊĐŊŅĐŧи (виĐēĐžŅиŅŅОвŅŅŅи ĐŋаŅаĐŧĐĩŅŅ `update`).
+* ĐĐĩŅĐĩŅвОŅŅŅŅĐĩ ŅĐēĐžĐŋŅКОваĐŊŅ ĐŧОдĐĩĐģŅ ĐŊа ŅĐžŅŅ, ŅĐž ĐŧĐžĐļĐŊа СйĐĩŅĐĩĐŗŅи Ņ Đ˛Đ°ŅŅ ĐĐ (ĐŊаĐŋŅиĐēĐģад, виĐēĐžŅиŅŅОвŅŅŅи `jsonable_encoder`).
+ * ĐĻĐĩ ĐŧĐžĐļĐŊа ĐŋĐžŅŅвĐŊŅŅи С ĐŋОвŅĐžŅĐŊиĐŧ виĐēĐžŅиŅŅаĐŊĐŊŅĐŧ ĐŧĐĩŅĐžĐ´Ņ `.model_dump()` ĐŧОдĐĩĐģŅ, аĐģĐĩ ŅĐĩ ĐŗĐ°ŅаĐŊŅŅŅ (Ņ ĐŋĐĩŅĐĩŅвОŅŅŅ) СĐŊаŅĐĩĐŊĐŊŅ Ņ ŅиĐŋи даĐŊиŅ
, ŅĐēŅ ĐŧĐžĐļĐŊа ĐŋĐĩŅĐĩŅвОŅиŅи ĐŊа JSON, ĐŊаĐŋŅиĐēĐģад, `datetime` ĐŊа `str`.
+* ĐĐąĐĩŅŅĐŗĐ°ŅŅĐĩ даĐŊŅ Ņ Đ˛Đ°ŅŅ ĐĐ.
+* ĐОвĐĩŅŅаŅŅĐĩ ĐžĐŊОвĐģĐĩĐŊŅ ĐŧОдĐĩĐģŅ.
+
+{* ../../docs_src/body_updates/tutorial002_py310.py hl[28:35] *}
+
+/// tip | ĐĐžŅада
+
+ĐаŅĐŋŅĐ°Đ˛Đ´Ņ Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи ŅŅ ŅаĐŧŅ ŅĐĩŅ
ĐŊŅĐēŅ Ņ Đˇ ĐžĐŋĐĩŅаŅŅŅŅ HTTP `PUT`.
+
+ĐĐģĐĩ ĐŋŅиĐēĐģад ŅŅŅ Đ˛Đ¸ĐēĐžŅиŅŅОвŅŅ `PATCH`, ŅĐžĐŧŅ ŅĐž вŅĐŊ ĐąŅв ŅŅвОŅĐĩĐŊиК ŅаĐŧĐĩ Đ´ĐģŅ ŅаĐēиŅ
виĐŋадĐēŅв.
+
+///
+
+/// note | ĐŅиĐŧŅŅĐēа
+
+ĐвĐĩŅĐŊŅŅŅ ŅĐ˛Đ°ĐŗŅ, ŅĐž ĐŧОдĐĩĐģŅ ĐˇĐ°ĐŋиŅŅ Đ˛ŅĐĩ ŅĐĩ ĐŋŅĐžŅ
ОдиŅŅ Đ˛Đ°ĐģŅдаŅŅŅ.
+
+ĐĸĐžĐļ, ŅĐēŅĐž Đи Ņ
ĐžŅĐĩŅĐĩ ĐžŅŅиĐŧŅваŅи ŅаŅŅĐēĐžĐ˛Ņ ĐžĐŊОвĐģĐĩĐŊĐŊŅ, ŅĐēŅ ĐŧĐžĐļŅŅŅ ĐŊĐĩ ĐŧŅŅŅиŅи ĐļОдĐŊĐžĐŗĐž аŅŅийŅŅа, ĐаĐŧ ĐŋĐžŅŅŅĐąĐŊĐž ĐŧаŅи ĐŧОдĐĩĐģŅ, Đ´Đĩ вŅŅ Đ°ŅŅийŅŅи ĐŋОСĐŊаŅĐĩĐŊŅ ŅĐē ĐŊĐĩОйОвâŅСĐēĐžĐ˛Ņ (ĐˇŅ ĐˇĐŊаŅĐĩĐŊĐŊŅĐŧи Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ айО `None`).
+
+ЊОй ŅОСŅŅСĐŊŅŅи ĐŧОдĐĩĐģŅ Đˇ ŅŅŅĐŧа ĐŊĐĩОйОвâŅСĐēОвиĐŧи СĐŊаŅĐĩĐŊĐŊŅĐŧи Đ´ĐģŅ **ĐžĐŊОвĐģĐĩĐŊĐŊŅ** Ņ ĐŧОдĐĩĐģŅ Đˇ ОйОвâŅСĐēОвиĐŧи СĐŊаŅĐĩĐŊĐŊŅĐŧи Đ´ĐģŅ **ŅŅвОŅĐĩĐŊĐŊŅ**, Đи ĐŧĐžĐļĐĩŅĐĩ ŅĐēĐžŅиŅŅаŅиŅŅ ŅĐ´ĐĩŅĐŧи, ĐžĐŋиŅаĐŊиĐŧи Ņ [ĐОдаŅĐēĐžĐ˛Ņ ĐŧОдĐĩĐģŅ](extra-models.md){.internal-link target=_blank}.
+
+///
diff --git a/docs/uk/docs/tutorial/cookie-param-models.md b/docs/uk/docs/tutorial/cookie-param-models.md
new file mode 100644
index 000000000..f070b6ac8
--- /dev/null
+++ b/docs/uk/docs/tutorial/cookie-param-models.md
@@ -0,0 +1,76 @@
+# ĐОдĐĩĐģŅ Đ´ĐģŅ Cookie-ĐŋаŅаĐŧĐĩŅŅŅв
+
+Đ¯ĐēŅĐž Ņ ĐĐ°Ņ Ņ ĐŗŅŅĐŋа **cookies** ĐŋаŅаĐŧĐĩŅŅŅв, ŅĐēŅ ĐŋОв'ŅСаĐŊŅ ĐŧŅĐļ ŅОйОŅ, Đи ĐŧĐžĐļĐĩŅĐĩ ŅŅвОŅиŅи **Pydantic-ĐŧОдĐĩĐģŅ**, ŅОй ĐžĐŗĐžĐģĐžŅиŅи ŅŅ
. đĒ
+
+ĐĻĐĩ дОСвОĐģиŅŅ ĐаĐŧ ĐŋОвŅĐžŅĐŊĐž **виĐēĐžŅиŅŅОвŅваŅи ĐŧОдĐĩĐģŅ** Ņ **ŅŅСĐŊиŅ
ĐŧŅŅŅŅŅ
**, а ŅаĐēĐžĐļ ĐžĐŗĐžĐģĐžŅиŅи ваĐģŅдаŅŅŅ Ņа ĐŧĐĩŅадаĐŊŅ Đ´ĐģŅ Đ˛ŅŅŅ
ĐŋаŅаĐŧĐĩŅŅŅв ОдĐŊĐžŅаŅĐŊĐž. đ
+
+/// note | ĐĐžŅаŅĐēи
+
+ĐĻĐĩ ĐŋŅĐ´ŅŅиĐŧŅŅŅŅŅŅ Đˇ вĐĩŅŅŅŅ FastAPI `0.115.0`. đ¤
+
+///
+
+/// tip | ĐĐžŅада
+
+ĐĻŅ Đļ ŅĐĩŅ
ĐŊŅĐēа СаŅŅĐžŅОвŅŅŅŅŅŅ Đ´Đž `Query`, `Cookie`, Ņа `Header`. đ
+
+///
+
+## Cookie С Pydantic-ĐŧОдĐĩĐģĐģŅ
+
+ĐĐŗĐžĐģĐžŅŅŅŅ **cookie-ĐŋаŅаĐŧĐĩŅŅи**, ŅĐēŅ ĐаĐŧ ĐŋĐžŅŅŅĐąĐŊŅ, Ņ **Pydantic-ĐŧОдĐĩĐģŅ**, а ĐŋĐžŅŅĐŧ ĐžĐŗĐžĐģĐžŅŅŅŅ ĐŋаŅаĐŧĐĩŅŅ ŅĐē `Cookie`:
+
+{* ../../docs_src/cookie_param_models/tutorial001_an_py310.py hl[9:12,16] *}
+
+**FastAPI** ĐąŅĐ´Đĩ **виŅŅĐŗŅваŅи** даĐŊŅ Đ´ĐģŅ **ĐēĐžĐļĐŊĐžĐŗĐž ĐŋĐžĐģŅ** С **cookie** ĐŋаŅаĐŧĐĩŅŅŅв, ĐžŅŅиĐŧаĐŊиŅ
Ņ ĐˇĐ°ĐŋиŅŅ, Ņ ĐŋĐĩŅĐĩдаваŅи ĐаĐŧ Pydantic-ĐŧОдĐĩĐģŅ, ŅĐēŅ Đи виСĐŊаŅиĐģи.
+
+## ĐĐĩŅĐĩвŅŅĐēа Ņ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ĐŋОйаŅиŅи виСĐŊаŅĐĩĐŊŅ cookie в ŅĐŊŅĐĩŅŅĐĩĐšŅŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ ĐˇĐ° адŅĐĩŅĐžŅ `/docs`:
+
+
+
+
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+ĐаКŅĐĩ ĐŊа ŅваСŅ, ŅĐž ĐžŅĐēŅĐģŅĐēи **ĐąŅаŅСĐĩŅи ОйŅОйĐģŅŅŅŅ cookie** ĐžŅОйĐģивиĐŧ ŅиĐŊĐžĐŧ Ņ "Са ĐģаŅŅŅĐŊĐēаĐŧи", вОĐŊи **ĐŊĐĩ** дОСвОĐģŅŅŅŅ **JavaScript** ĐģĐĩĐŗĐēĐž С ĐŊиĐŧи ĐŋŅаŅŅваŅи.
+
+Đ¯ĐēŅĐž Đи СаКдĐĩŅĐĩ Đ´Đž **ŅĐŊŅĐĩŅŅĐĩĐšŅŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ API** Са адŅĐĩŅĐžŅ `/docs`, Đи СĐŧĐžĐļĐĩŅĐĩ ĐŋОйаŅиŅи **Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ** Đ´ĐģŅ cookie Ņ ĐаŅиŅ
**ĐžĐŋĐĩŅаŅŅŅŅ
ŅĐģŅŅ
Ņ**.
+
+ĐĐģĐĩ ĐŊавŅŅŅ ŅĐēŅĐž Đи СаĐŋОвĐŊиŅĐĩ даĐŊŅ Đš ĐŊаŅиŅĐŊĐĩŅĐĩ "Execute", ĐžŅĐēŅĐģŅĐēи ŅĐŊŅĐĩŅŅĐĩĐšŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ ĐŋŅаŅŅŅ Đˇ **JavaScript**, cookie ĐŊĐĩ ĐąŅĐ´ŅŅŅ Đ˛ŅĐ´ĐŋŅавĐģĐĩĐŊŅ, Ņ Đи ĐŋОйаŅиŅĐĩ **ĐŋĐžĐŧиĐģĐēŅ**, ĐŊŅйи Đи ĐŊĐĩ ввĐĩĐģи ĐļОдĐŊиŅ
СĐŊаŅĐĩĐŊŅ.
+
+///
+
+## ĐайОŅĐžĐŊа дОдаŅĐēОвиŅ
cookie
+
+ĐŖ Đ´ĐĩŅĐēиŅ
ŅĐŋĐĩŅŅаĐģŅĐŊиŅ
виĐŋадĐēаŅ
(ĐšĐŧОвŅŅĐŊĐž, ĐŊĐĩ Đ´ŅĐļĐĩ ĐŋĐžŅиŅĐĩĐŊиŅ
) Đи ĐŧĐžĐļĐĩŅĐĩ СаŅ
ĐžŅŅŅи **ОйĐŧĐĩĐļиŅи** ŅĐŋиŅĐžĐē cookie, ŅĐēŅ Ņ
ĐžŅĐĩŅĐĩ ĐžŅŅиĐŧŅваŅи.
+
+ĐаŅа API ŅĐĩĐŋĐĩŅ ĐŧĐ°Ņ ĐŧĐžĐļĐģивŅŅŅŅ ĐēĐžĐŊŅŅĐžĐģŅваŅи вĐģаŅĐŊŅ ĐˇĐŗĐžĐ´Ņ ĐŊа cookie . đ¤ĒđĒ
+
+Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи ĐŊаĐģаŅŅŅваĐŊĐŊŅ ĐŧОдĐĩĐģŅ Pydantic, ŅОй `СайОŅĐžĐŊиŅи` ĐąŅĐ´Ņ-ŅĐēŅ `дОдаŅĐēОвŅ` ĐŋĐžĐģŅ:
+
+{* ../../docs_src/cookie_param_models/tutorial002_an_py39.py hl[10] *}
+
+Đ¯ĐēŅĐž ĐēĐģŅŅĐŊŅ ŅĐŋŅОйŅŅ ĐŊадŅŅĐģаŅи ŅĐēŅŅŅ **дОдаŅĐēĐžĐ˛Ņ cookie**, вŅĐŊ ĐžŅŅиĐŧĐ°Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ Đˇ **ĐŋĐžĐŧиĐģĐēĐžŅ**.
+
+ĐŅĐ´ĐŊŅ ĐąĐ°ĐŊĐĩŅи cookie, ŅĐēŅ ŅаĐē ŅŅаŅаĐŊĐŊĐž ĐŊаĐŧĐ°ĐŗĐ°ŅŅŅŅŅ ĐžŅŅиĐŧаŅи ĐаŅŅ ĐˇĐŗĐžĐ´Ņ, ŅОй API ŅŅ Đ˛ŅĐ´Ņ
иĐģиĐģа . đĒ
+
+ĐаĐŋŅиĐēĐģад, ŅĐēŅĐž ĐēĐģŅŅĐŊŅ ŅĐŋŅОйŅŅ ĐŊадŅŅĐģаŅи cookie `santa_tracker` ĐˇŅ ĐˇĐŊаŅĐĩĐŊĐŊŅĐŧ `good-list-please`, вŅĐŊ ĐžŅŅиĐŧĐ°Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ Đˇ ĐŋĐžĐŧиĐģĐēĐžŅ, ŅĐēа ĐŋОвŅĐ´ĐžĐŧиŅŅ, ŅĐž cookie `santa_tracker` ĐŊĐĩ дОСвОĐģĐĩĐŊĐž :
+
+```json
+{
+ "detail": [
+ {
+ "type": "extra_forbidden",
+ "loc": ["cookie", "santa_tracker"],
+ "msg": "Extra inputs are not permitted",
+ "input": "good-list-please",
+ }
+ ]
+}
+```
+
+## ĐŅĐ´ŅŅĐŧĐžĐē
+
+Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи **Pydantic-ĐŧОдĐĩĐģŅ** Đ´ĐģŅ ĐžĐŗĐžĐģĐžŅĐĩĐŊĐŊŅ cookie Ņ FastAPI. đ
diff --git a/docs/uk/docs/tutorial/cors.md b/docs/uk/docs/tutorial/cors.md
new file mode 100644
index 000000000..95b204d0f
--- /dev/null
+++ b/docs/uk/docs/tutorial/cors.md
@@ -0,0 +1,89 @@
+# CORS (ĐĐąĐŧŅĐŊ ŅĐĩŅŅŅŅаĐŧи ĐŧŅĐļ ŅŅСĐŊиĐŧи Đ´ĐļĐĩŅĐĩĐģаĐŧи)
+
+CORS айО "ĐĐąĐŧŅĐŊ ŅĐĩŅŅŅŅаĐŧи ĐŧŅĐļ ŅŅСĐŊиĐŧи Đ´ĐļĐĩŅĐĩĐģаĐŧи" Ņ ŅиŅŅаŅŅŅ, ĐēĐžĐģи ŅŅĐžĐŊŅĐĩĐŊĐ´, ŅĐž ĐŋŅаŅŅŅ Đ˛ ĐąŅаŅСĐĩŅŅ, ĐŧŅŅŅиŅŅ JavaScript-ĐēОд, ŅĐēиК вСаŅĐŧОдŅŅ Đˇ ĐąĐĩĐēĐĩĐŊĐ´ĐžĐŧ, ŅОСŅаŅОваĐŊиĐŧ в ŅĐŊŅĐžĐŧŅ "Đ´ĐļĐĩŅĐĩĐģŅ" (origin).
+
+## ĐĐļĐĩŅĐĩĐģĐž (Origin)
+
+ĐĐļĐĩŅĐĩĐģĐž виСĐŊаŅаŅŅŅŅŅ ĐēĐžĐŧĐąŅĐŊаŅŅŅŅ ĐŋŅĐžŅĐžĐēĐžĐģŅ (`http`, `https`), Đ´ĐžĐŧĐĩĐŊŅ (`myapp.com`, `localhost`, `localhost.tiangolo.com`), ĐŋĐžŅŅŅ (`80`, `443`, `8080`).
+
+
+ĐаĐŋŅиĐēĐģад, ŅаĐēŅ Đ°Đ´ŅĐĩŅи вваĐļаŅŅŅŅŅ ŅŅСĐŊиĐŧи Đ´ĐļĐĩŅĐĩĐģаĐŧи:
+
+* `http://localhost`
+* `https://localhost`
+* `http://localhost:8080`
+
+ĐавŅŅŅ ŅĐēŅĐž вОĐŊи вŅŅ ĐŧŅŅŅŅŅŅ `localhost`, вОĐŊи ĐŧаŅŅŅ ŅŅСĐŊŅ ĐŋŅĐžŅĐžĐēĐžĐģи айО ĐŋĐžŅŅи, ŅĐž ŅОйиŅŅ ŅŅ
ĐžĐēŅĐĩĐŧиĐŧи "Đ´ĐļĐĩŅĐĩĐģаĐŧи".
+
+## ĐŅĐžĐēи
+
+ĐŅиĐŋŅŅŅиĐŧĐž, ŅĐž ĐĐ°Ņ ŅŅĐžĐŊŅĐĩĐŊĐ´ ĐŋŅаŅŅŅ Đ˛ ĐąŅаŅСĐĩŅŅ ĐŊа `http://localhost:8080`, а ĐšĐžĐŗĐž JavaScript ĐŊаĐŧĐ°ĐŗĐ°ŅŅŅŅŅ Đ˛ŅĐ´ĐŋŅавиŅи СаĐŋĐ¸Ņ Đ´Đž ĐąĐĩĐēĐĩĐŊĐ´Ņ, ŅĐēиК ĐŋŅаŅŅŅ ĐŊа `http://localhost` (ĐŅĐēŅĐģŅĐēи Đŧи ĐŊĐĩ вĐēаСŅŅĐŧĐž ĐŋĐžŅŅ, ĐąŅаŅСĐĩŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ ĐŋŅиĐŋŅŅĐēĐ°Ņ ĐŋĐžŅŅ `80`).
+
+ĐĐžŅŅĐŧ ĐąŅаŅСĐĩŅ ĐŊадŅŅĐģĐĩ HTTP-СаĐŋĐ¸Ņ `OPTIONS` Đ´Đž ĐąĐĩĐēĐĩĐŊĐ´Ņ ĐŊа ĐŋĐžŅŅŅ `:80`, Ņ ŅĐēŅĐž ĐąĐĩĐēĐĩĐŊĐ´ ĐŊадŅŅĐģĐĩ вŅĐ´ĐŋОвŅĐ´ĐŊŅ ĐˇĐ°ĐŗĐžĐģОвĐēи, ŅĐž дОСвОĐģŅŅŅŅ ĐēĐžĐŧŅĐŊŅĐēаŅŅŅ Đˇ ŅŅĐžĐŗĐž ŅĐŊŅĐžĐŗĐž Đ´ĐļĐĩŅĐĩĐģа (`http://localhost:8080`), ŅĐžĐ´Ņ ĐąŅаŅСĐĩŅ ĐŊа ĐŋĐžŅŅŅ `:8080` дОСвОĐģиŅŅ JavaScript Ņ ŅŅĐžĐŊŅĐĩĐŊĐ´Ņ ĐŊадŅŅĐģаŅи ŅвŅĐš СаĐŋĐ¸Ņ Đ´Đž ĐąĐĩĐēĐĩĐŊĐ´Ņ ĐŊа ĐŋĐžŅŅŅ `:80`.
+
+ЊОй Đ´ĐžŅŅĐŗŅи ŅŅĐžĐŗĐž, ĐąĐĩĐēĐĩĐŊĐ´ ĐŊа ĐŋĐžŅŅŅ `:80` ĐŋОвиĐŊĐĩĐŊ ĐŧаŅи ŅĐŋиŅĐžĐē "дОСвОĐģĐĩĐŊиŅ
Đ´ĐļĐĩŅĐĩĐģ".
+
+ĐŖ ŅŅĐžĐŧŅ Đ˛Đ¸ĐŋадĐēŅ ŅĐŋиŅĐžĐē ĐŧĐ°Ņ ĐŧŅŅŅиŅи `http://localhost:8080`, ŅОй ŅŅĐžĐŊŅĐĩĐŊĐ´ ĐŊа ĐŋĐžŅŅŅ `:8080` ĐŋŅаŅŅвав ĐēĐžŅĐĩĐēŅĐŊĐž.
+
+## ХиĐŧвОĐģŅĐŊĐĩ ĐŋŅĐ´ŅŅавĐģŅĐŊĐŊŅ
+
+ĐĐžĐļĐŊа ŅаĐēĐžĐļ ĐžĐŗĐžĐģĐžŅиŅи ŅĐŋиŅĐžĐē ŅĐē `"*"` ("ŅиĐŧвОĐģŅĐŊĐĩ ĐŋŅĐ´ŅŅавĐģŅĐŊĐŊŅ"), ŅĐž ОСĐŊаŅĐ°Ņ Đ´ĐžĐˇĐ˛ŅĐģ Đ´ĐģŅ Đ˛ŅŅŅ
Đ´ĐļĐĩŅĐĩĐģ.
+
+ĐĐ´ĐŊаĐē ŅĐĩ дОСвОĐģиŅŅ ĐģиŅĐĩ ĐŋĐĩвĐŊŅ ŅиĐŋи ĐēĐžĐŧŅĐŊŅĐēаŅŅŅ, виĐēĐģŅŅаŅŅи вŅĐĩ, ŅĐž ĐŋОв'ŅСаĐŊĐĩ С ОйĐģŅĐēОвиĐŧи даĐŊиĐŧи: Cookies, ĐˇĐ°ĐŗĐžĐģОвĐēи авŅĐžŅиСаŅŅŅ, ŅаĐēŅ ŅĐē ŅŅ, ŅĐž виĐēĐžŅиŅŅОвŅŅŅŅŅŅ Đˇ Bearer ŅĐžĐēĐĩĐŊаĐŧи ŅĐžŅĐž.
+
+ĐĸĐžĐŧŅ Đ´ĐģŅ ĐēĐžŅĐĩĐēŅĐŊĐžŅ ŅОйОŅи ĐēŅаŅĐĩ ŅвĐŊĐž вĐēаСŅваŅи дОСвОĐģĐĩĐŊŅ Đ´ĐļĐĩŅĐĩĐģа.
+
+## ĐиĐēĐžŅиŅŅаĐŊĐŊŅ `CORSMiddleware`
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ĐŊаĐģаŅŅŅваŅи ŅĐĩ Ņ ĐаŅĐžĐŧŅ Đ´ĐžĐ´Đ°ŅĐēŅ **FastAPI** Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ `CORSMiddleware`.
+
+* ĐĐŧĐŋĐžŅŅŅĐšŅĐĩ `CORSMiddleware`.
+* ĐĄŅвОŅŅŅŅ ŅĐŋиŅĐžĐē дОСвОĐģĐĩĐŊиŅ
Đ´ĐļĐĩŅĐĩĐģ (Ņ Đ˛Đ¸ĐŗĐģŅĐ´Ņ ŅŅĐ´ĐēŅв).
+* ĐОдаКŅĐĩ ĐšĐžĐŗĐž ŅĐē "middleware" Ņ ĐĐ°Ņ Đ´ĐžĐ´Đ°ŅĐžĐē **FastAPI**.
+
+
+ĐĸаĐēĐžĐļ ĐŧĐžĐļĐŊа вĐēаСаŅи, Ņи дОСвОĐģŅŅ ĐĐ°Ņ ĐąĐĩĐēĐĩĐŊĐ´:
+
+* ĐĐąĐģŅĐēĐžĐ˛Ņ Đ´Đ°ĐŊŅ (ĐˇĐ°ĐŗĐžĐģОвĐēи авŅĐžŅиСаŅŅŅ, Ņookies, ŅĐžŅĐž).
+* ĐĐžĐŊĐēŅĐĩŅĐŊŅ HTTP-ĐŧĐĩŅОди (`POST`, `PUT`) айО вŅŅ ĐˇĐ° Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ `"*"`
+* ĐĐžĐŊĐēŅĐĩŅĐŊŅ HTTP-ĐˇĐ°ĐŗĐžĐģОвĐēи айО вŅŅ ĐˇĐ° Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ `"*"`.
+
+
+{* ../../docs_src/cors/tutorial001.py hl[2,6:11,13:19] *}
+
+ĐаŅаĐŧĐĩŅŅи Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ Ņ `CORSMiddleware` Ņ Đ´ĐžŅиŅŅ ĐžĐąĐŧĐĩĐļĐĩĐŊиĐŧи, ŅĐžĐŧŅ ĐаĐŧ ĐŋĐžŅŅŅĐąĐŊĐž ŅвĐŊĐž вĐēаСаŅи ĐēĐžĐŊĐēŅĐĩŅĐŊŅ Đ´ĐļĐĩŅĐĩĐģа, ĐŧĐĩŅОди айО ĐˇĐ°ĐŗĐžĐģОвĐēи, ŅОй ĐąŅаŅСĐĩŅи ĐŧĐžĐŗĐģи виĐēĐžŅиŅŅОвŅваŅи ŅŅ
Ņ ĐēĐžĐŊŅĐĩĐēŅŅŅ ĐˇĐ°ĐŋиŅŅв ĐŧŅĐļ ŅŅСĐŊиĐŧи Đ´ĐžĐŧĐĩĐŊаĐŧи.
+
+
+ĐŅĐ´ŅŅиĐŧŅŅŅŅŅŅ ŅаĐēŅ Đ°ŅĐŗŅĐŧĐĩĐŊŅи:
+
+* `allow_origins` - ĐĄĐŋиŅĐžĐē Đ´ĐļĐĩŅĐĩĐģ, ŅĐēиĐŧ дОСвОĐģĐĩĐŊĐž СдŅĐšŅĐŊŅваŅи ĐŧŅĐļĐ´ĐžĐŧĐĩĐŊĐŊŅ ĐˇĐ°ĐŋиŅи. ĐаĐŋŅиĐēĐģад `['https://example.org', 'https://www.example.org']`. Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи ['*'], ŅОй дОСвОĐģиŅи вŅŅ Đ´ĐļĐĩŅĐĩĐģа.
+* `allow_origin_regex` - Đ ŅĐ´ĐžĐē ŅĐĩĐŗŅĐģŅŅĐŊĐžĐŗĐž виŅĐ°ĐˇŅ Đ´ĐģŅ Đ˛ŅĐ´ĐŋОвŅĐ´ĐŊĐžŅŅŅ Đ´ĐļĐĩŅĐĩĐģаĐŧ, ŅĐēиĐŧ дОСвОĐģĐĩĐŊĐž СдŅĐšŅĐŊŅваŅи ĐŧŅĐļĐ´ĐžĐŧĐĩĐŊĐŊŅ ĐˇĐ°ĐŋиŅи. ĐаĐŋŅиĐēĐģад, `'https://.*\.example\.org'`.
+* `allow_methods` - ĐĄĐŋиŅĐžĐē HTTP-ĐŧĐĩŅОдŅв, дОСвОĐģĐĩĐŊиŅ
Đ´ĐģŅ ĐŧŅĐļĐ´ĐžĐŧĐĩĐŊĐŊиŅ
СаĐŋиŅŅв. Đа СаĐŧОвŅŅваĐŊĐŊŅĐŧ `['GET']`. Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи `['*']`, ŅОй дОСвОĐģиŅи вŅŅ ŅŅаĐŊдаŅŅĐŊŅ ĐŧĐĩŅОди.
+* `allow_headers` - ĐĄĐŋиŅĐžĐē HTTP-ĐˇĐ°ĐŗĐžĐģОвĐēŅв, ŅĐēŅ ĐŋŅĐ´ŅŅиĐŧŅŅŅŅŅŅ Đ´ĐģŅ ĐŧŅĐļĐ´ĐžĐŧĐĩĐŊĐŊиŅ
СаĐŋиŅŅв. Đа СаĐŧОвŅŅваĐŊĐŊŅĐŧ `[]`. Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи `['*']`, ŅОй дОСвОĐģиŅи вŅŅ ĐˇĐ°ĐŗĐžĐģОвĐēи. ĐĐ°ĐŗĐžĐģОвĐēи `Accept`, `Accept-Language`, `Content-Language` Ņ `Content-Type` СавĐļди дОСвОĐģĐĩĐŊŅ Đ´ĐģŅ ĐŋŅĐžŅŅиŅ
CORS-СаĐŋиŅŅв .
+* `allow_credentials` - ĐиСĐŊаŅаŅ, Ņи ĐŋŅĐ´ŅŅиĐŧŅŅŅŅŅŅ ŅаКĐģи cookie Đ´ĐģŅ ĐŧŅĐļĐ´ĐžĐŧĐĩĐŊĐŊиŅ
СаĐŋиŅŅв. Đа СаĐŧОвŅŅваĐŊĐŊŅĐŧ `False`. ĐĸаĐēĐžĐļ, ŅĐēŅĐž ĐŋĐžŅŅŅĐąĐŊĐž дОСвОĐģиŅи ОйĐŧŅĐŊ ОйĐģŅĐēОвиĐŧи даĐŊиĐŧи (`allow_credentials = True`), ĐŋаŅаĐŧĐĩŅŅ `allow_origins` ĐŊĐĩ ĐŧĐžĐļĐĩ ĐąŅŅи вŅŅаĐŊОвĐģĐĩĐŊиК ŅĐē `['*']`, ĐŊĐĩОйŅ
ŅĐ´ĐŊĐž вĐēаСаŅи ĐēĐžĐŊĐēŅĐĩŅĐŊŅ Đ´ĐļĐĩŅĐĩĐģа.
+* `expose_headers` - ĐĐēаСŅŅ, ŅĐēŅ ĐˇĐ°ĐŗĐžĐģОвĐēи вŅĐ´ĐŋОвŅĐ´Ņ ĐŋОвиĐŊĐŊŅ ĐąŅŅи Đ´ĐžŅŅŅĐŋĐŊŅ Đ´ĐģŅ ĐąŅаŅСĐĩŅа. Đа СаĐŧОвŅŅваĐŊĐŊŅĐŧ `[]`.
+* `max_age` - ĐŅŅаĐŊОвĐģŅŅ ĐŧаĐēŅиĐŧаĐģŅĐŊиК ŅĐ°Ņ (Ņ ŅĐĩĐēŅĐŊдаŅ
) Đ´ĐģŅ ĐēĐĩŅŅваĐŊĐŊŅ CORS-вŅĐ´ĐŋОвŅĐ´ĐĩĐš Ņ ĐąŅаŅСĐĩŅаŅ
. Đа СаĐŧОвŅŅваĐŊĐŊŅĐŧ `600`.
+
+ĐĻĐĩĐš middleware ОйŅОйĐģŅŅ Đ´Đ˛Đ° ŅиĐŋи HTTP-СаĐŋиŅŅв...
+
+### ĐĐžĐŋĐĩŅĐĩĐ´ĐŊŅ CORS-СаĐŋиŅи (preflight requests)
+
+ĐĻĐĩ ĐąŅĐ´Ņ-ŅĐēŅ `OPTIONS` - СаĐŋиŅи, ŅĐž ĐŧŅŅŅŅŅŅ ĐˇĐ°ĐŗĐžĐģОвĐēи `Origin` Ņа `Access-Control-Request-Method`.
+
+ĐŖ ŅаĐēĐžĐŧŅ Đ˛Đ¸ĐŋадĐēŅ middleware ĐŋĐĩŅĐĩŅ
ĐžĐŋиŅŅ Đ˛Ņ
ŅĐ´ĐŊиК СаĐŋĐ¸Ņ Ņ Đ˛ŅĐ´ĐŋОвŅŅŅŅ Đ˛ŅĐ´ĐŋОвŅĐ´ĐŊиĐŧи CORS-ĐˇĐ°ĐŗĐžĐģОвĐēаĐŧи, ĐŋОвĐĩŅŅаŅŅи айО `200`, айО `400` Đ´ĐģŅ ŅĐŊŅĐžŅĐŧаŅŅĐšĐŊиŅ
ŅŅĐģĐĩĐš.
+
+### ĐŅĐžŅŅŅ ĐˇĐ°ĐŋиŅи
+
+ĐŅĐ´Ņ-ŅĐēŅ ĐˇĐ°ĐŋиŅи ŅС ĐˇĐ°ĐŗĐžĐģОвĐēĐžĐŧ `Origin`. ĐŖ ŅŅĐžĐŧŅ Đ˛Đ¸ĐŋадĐēŅ middleware ĐŋŅĐžĐŋŅŅŅиŅŅ ĐˇĐ°ĐŋĐ¸Ņ ŅĐē СвиŅаКĐŊиК, аĐģĐĩ дОдаŅŅŅ Đ˛ŅĐ´ĐŋОвŅĐ´ĐŊŅ CORS-ĐˇĐ°ĐŗĐžĐģОвĐēи Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ.
+
+## ĐОдаŅĐēОва ŅĐŊŅĐžŅĐŧаŅŅŅ
+
+ĐŅĐģŅŅĐĩ ĐŋŅĐž CORS ĐŧĐžĐļĐŊа Đ´ŅСĐŊаŅиŅŅ Đ˛ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ Mozilla .
+
+/// note | ĐĸĐĩŅ
ĐŊŅŅĐŊŅ Đ´ĐĩŅаĐģŅ
+
+ĐĸаĐēĐžĐļ ĐŧĐžĐļĐŊа виĐēĐžŅиŅŅОвŅваŅи `from starlette.middleware.cors import CORSMiddleware`.
+
+**FastAPI** ĐŊĐ°Đ´Đ°Ņ ĐēŅĐģŅĐēа middleware Ņ `fastapi.middleware` Đ´ĐģŅ ĐˇŅŅŅĐŊĐžŅŅŅ ŅОСŅОйĐŊиĐēŅв. ĐĐģĐĩ ĐąŅĐģŅŅŅŅŅŅ Đ´ĐžŅŅŅĐŋĐŊиŅ
middleware ĐŋĐžŅ
ОдŅŅŅ ĐąĐĩСĐŋĐžŅĐĩŅĐĩĐ´ĐŊŅĐž ĐˇŅ Starlette.
+
+///
diff --git a/docs/uk/docs/tutorial/handling-errors.md b/docs/uk/docs/tutorial/handling-errors.md
new file mode 100644
index 000000000..12a356cd0
--- /dev/null
+++ b/docs/uk/docs/tutorial/handling-errors.md
@@ -0,0 +1,255 @@
+# ĐĐąŅОйĐēа ĐĐžĐŧиĐģĐžĐē
+
+Đ ĐąĐ°ĐŗĐ°ŅĐž ŅиŅŅаŅŅĐš, ĐēĐžĐģи ĐŋĐžŅŅŅĐąĐŊĐž ĐŋОвŅĐ´ĐžĐŧиŅи ĐēĐģŅŅĐŊŅа, ŅĐēиК виĐēĐžŅиŅŅОвŅŅ ĐĐ°Ņ API, ĐŋŅĐž ĐŋĐžĐŧиĐģĐēŅ.
+
+ĐĻиĐŧ ĐēĐģŅŅĐŊŅĐžĐŧ ĐŧĐžĐļĐĩ ĐąŅŅи ĐąŅаŅСĐĩŅ ŅС ŅŅĐžĐŊŅĐĩĐŊĐ´ĐžĐŧ, ĐēОд ŅĐŊŅĐžĐŗĐž ŅОСŅОйĐŊиĐēа, IoT-ĐŋŅиŅŅŅŅĐš ŅĐžŅĐž.
+
+ĐĐžĐļĐģивО, ĐаĐŧ ĐŋĐžŅŅŅĐąĐŊĐž ĐŋОвŅĐ´ĐžĐŧиŅи ĐēĐģŅŅĐŊŅа, ŅĐž:
+
+* ĐŖ ĐŊŅĐžĐŗĐž ĐŊĐĩĐ´ĐžŅŅаŅĐŊŅĐž ĐŋŅав Đ´ĐģŅ Đ˛Đ¸ĐēĐžĐŊаĐŊĐŊŅ ŅŅŅŅ ĐžĐŋĐĩŅаŅŅŅ.
+* ĐŅĐŊ ĐŊĐĩ ĐŧĐ°Ņ Đ´ĐžŅŅŅĐŋŅ Đ´Đž ŅŅĐžĐŗĐž ŅĐĩŅŅŅŅŅ.
+* ĐĐģĐĩĐŧĐĩĐŊŅ, Đ´Đž ŅĐēĐžĐŗĐž вŅĐŊ ĐŊаĐŧĐ°ĐŗĐ°ŅŅŅŅŅ ĐžŅŅиĐŧаŅи Đ´ĐžŅŅŅĐŋ, ĐŊĐĩ ŅŅĐŊŅŅ.
+* ŅĐžŅĐž.
+
+ĐŖ ŅаĐēиŅ
виĐŋадĐēаŅ
СаСвиŅаК ĐŋОвĐĩŅŅаŅŅŅŅŅ **HTTP ŅŅаŅŅŅ-ĐēОд** в Đ´ŅаĐŋаСОĐŊŅ **400** (вŅĐ´ 400 Đ´Đž 499).
+
+ĐĻĐĩ ŅŅ
ĐžĐļĐĩ ĐŊа HTTP ŅŅаŅŅŅ-ĐēОди 200 (вŅĐ´ 200 Đ´Đž 299). ĐĻŅ "200" ŅŅаŅŅŅ-ĐēОди ОСĐŊаŅаŅŅŅ, ŅĐž СаĐŋĐ¸Ņ ĐŋŅОКŅОв ŅŅĐŋŅŅĐŊĐž.
+
+ĐĄŅаŅŅŅ-ĐēОди в Đ´ŅаĐŋаСОĐŊŅ 400 ОСĐŊаŅаŅŅŅ, ŅĐž ŅŅаĐģаŅŅ ĐŋĐžĐŧиĐģĐēа С йОĐēŅ ĐēĐģŅŅĐŊŅа.
+
+ĐаĐŧ'ŅŅаŅŅĐĩ вŅŅ ŅŅ ĐŋĐžĐŧиĐģĐēи **404 Not Found** (Ņ ĐļаŅŅи ĐŋŅĐž ĐŊиŅ
)?
+
+## ĐиĐēĐžŅиŅŅаĐŊĐŊŅ `HTTPException`
+
+ЊОй ĐŋОвĐĩŅĐŊŅŅи HTTP-вŅĐ´ĐŋОвŅĐ´Ņ Đˇ ĐŋĐžĐŧиĐģĐēаĐŧи ĐēĐģŅŅĐŊŅŅ, виĐēĐžŅиŅŅОвŅĐšŅĐĩ `HTTPException`.
+
+### ĐĐŧĐŋĐžŅŅ `HTTPException`
+
+{* ../../docs_src/handling_errors/tutorial001.py hl[1] *}
+
+### ĐиĐēĐžŅиŅŅаĐŊĐŊŅ `HTTPException` Ņ ĐēОдŅ
+
+`HTTPException` â ŅĐĩ СвиŅаКĐŊа ĐŋĐžĐŧиĐģĐēа Python ŅС дОдаŅĐēОвиĐŧи даĐŊиĐŧи, ŅĐēŅ ŅŅĐžŅŅŅŅŅŅŅ API.
+
+ĐŅĐēŅĐģŅĐēи ŅĐĩ ĐŋĐžĐŧиĐģĐēа Python, Đи ĐŊĐĩ `ĐŋОвĐĩŅŅаŅŅĐĩ` ĐšĐžĐŗĐž, а `ĐŗĐĩĐŊĐĩŅŅŅŅĐĩ` (ĐŗĐĩĐŊĐĩŅŅŅŅĐĩ ĐŋĐžĐŧиĐģĐēŅ).
+
+ĐĻĐĩ ŅаĐēĐžĐļ ОСĐŊаŅаŅ, ŅĐž ŅĐēŅĐž Đи ĐŋĐĩŅĐĩĐąŅваŅŅĐĩ вŅĐĩŅĐĩдиĐŊŅ Đ´ĐžĐŋĐžĐŧŅĐļĐŊĐžŅ ŅŅĐŊĐēŅŅŅ, ŅĐēŅ Đ˛Đ¸ĐēĐģиĐēаŅŅĐĩ вŅĐĩŅĐĩдиĐŊŅ ŅвОŅŅ *ŅŅĐŊĐēŅŅŅ ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ*, Ņ ŅаĐŧ ĐŗĐĩĐŊĐĩŅŅŅŅĐĩ `HTTPException`, вŅĐĩŅĐĩдиĐŊŅ ŅŅŅŅ Đ´ĐžĐŋĐžĐŧŅĐļĐŊĐžŅ ŅŅĐŊĐēŅŅŅ, ŅĐž ŅĐĩŅŅа ĐēĐžĐ´Ņ Đ˛ *ŅŅĐŊĐēŅŅŅ ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ* ĐŊĐĩ ĐąŅĐ´Đĩ виĐēĐžĐŊаĐŊа. ĐаĐŋĐ¸Ņ ĐžĐ´ŅĐ°ĐˇŅ ĐˇĐ°Đ˛ĐĩŅŅиŅŅŅŅ, Ņ HTTP-ĐŋĐžĐŧиĐģĐēа С `HTTPException` ĐąŅĐ´Đĩ ĐŊадŅŅĐģаĐŊа ĐēĐģŅŅĐŊŅŅ.
+
+ĐĐĩŅĐĩĐ˛Đ°ĐŗĐ° виĐēĐžŅиŅŅаĐŊĐŊŅ `ĐŗĐĩĐŊĐĩŅаŅŅŅ` (raise) ĐŋĐžĐŧиĐģĐēи СаĐŧŅŅŅŅ `ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ` СĐŊаŅĐĩĐŊĐŊŅ (return) ŅŅаĐŊĐĩ ĐąŅĐģŅŅ ĐžŅĐĩвидĐŊиĐŧ в ŅОСдŅĐģŅ ĐŋŅĐž ĐаĐģĐĩĐļĐŊĐžŅŅŅ Ņа ĐĐĩСĐŋĐĩĐēŅ.
+
+ĐŖ ŅŅĐžĐŧŅ ĐŋŅиĐēĐģадŅ, ŅĐēŅĐž ĐēĐģŅŅĐŊŅ ĐˇĐ°ĐŋиŅŅŅ ĐĩĐģĐĩĐŧĐĩĐŊŅ ĐˇĐ° ID, ŅĐēĐžĐŗĐž ĐŊĐĩ ŅŅĐŊŅŅ, ĐąŅĐ´Đĩ ĐˇĐŗĐĩĐŊĐĩŅОваĐŊĐž ĐŋĐžĐŧиĐģĐēŅ ĐˇŅ ŅŅаŅŅŅ-ĐēОдОĐŧ `404`:
+
+{* ../../docs_src/handling_errors/tutorial001.py hl[11] *}
+
+### ĐŅŅиĐŧаĐŊа вŅĐ´ĐŋОвŅĐ´Ņ
+
+Đ¯ĐēŅĐž ĐēĐģŅŅĐŊŅ ŅОйиŅŅ ĐˇĐ°ĐŋĐ¸Ņ ĐˇĐ° ŅĐģŅŅ
ĐžĐŧ `http://example.com/items/foo` (Đ´Đĩ `item_id` `"foo"`), вŅĐŊ ĐžŅŅиĐŧĐ°Ņ ŅŅаŅŅŅ-ĐēОд 200 Ņ JSON вŅĐ´ĐŋОвŅĐ´Ņ:
+
+```JSON
+{
+ "item": "The Foo Wrestlers"
+}
+```
+
+ĐĐģĐĩ ŅĐēŅĐž ĐēĐģŅŅĐŊŅ ŅОйиŅŅ ĐˇĐ°ĐŋĐ¸Ņ ĐŊа `http://example.com/items/bar` (Đ´Đĩ `item_id` ĐŧĐ°Ņ ĐŊĐĩ ŅŅĐŊŅŅŅĐĩ СĐŊаŅĐĩĐŊĐŊŅ `"bar"`), ŅĐž ĐžŅŅиĐŧĐ°Ņ ŅŅаŅŅŅ-ĐēОд 404 (ĐŋĐžĐŧиĐģĐēа "ĐŊĐĩ СĐŊаКдĐĩĐŊĐž") Ņа вŅĐ´ĐŋОвŅĐ´Ņ:
+
+```JSON
+{
+ "detail": "Item not found"
+}
+```
+
+/// tip | ĐĐžŅада
+
+ĐŅĐ´ ŅĐ°Ņ Đ˛Đ¸ĐēĐģиĐēŅ `HTTPException` Đи ĐŧĐžĐļĐĩŅĐĩ ĐŋĐĩŅĐĩдаŅи ĐąŅĐ´Ņ-ŅĐēĐĩ СĐŊаŅĐĩĐŊĐŊŅ, ŅĐēĐĩ ĐŧĐžĐļĐĩ ĐąŅŅи ĐŋĐĩŅĐĩŅвОŅĐĩĐŊĐĩ в JSON, ŅĐē ĐŋаŅаĐŧĐĩŅŅ `detail`, а ĐŊĐĩ ĐģиŅĐĩ ŅŅĐ´ĐžĐē (`str`).
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ĐŋĐĩŅĐĩдаŅи `dict`, `list` ŅĐžŅĐž.
+
+ĐĐžĐŊи ОйŅОйĐģŅŅŅŅŅŅ Đ°Đ˛ŅĐžĐŧаŅиŅĐŊĐž Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ **FastAPI** Ņа ĐŋĐĩŅĐĩŅвОŅŅŅŅŅŅŅ Đ˛ JSON.
+
+///
+
+## ĐОдаваĐŊĐŊŅ Đ˛ĐģаŅĐŊиŅ
ĐˇĐ°ĐŗĐžĐģОвĐēŅв
+
+ĐĐŊĐžĐ´Ņ ĐŋĐžŅŅŅĐąĐŊĐž дОдаŅи вĐģаŅĐŊŅ ĐˇĐ°ĐŗĐžĐģОвĐēи Đ´Đž HTTP-ĐŋĐžĐŧиĐģĐēи, ĐŊаĐŋŅиĐēĐģад, Đ´ĐģŅ ĐŋĐĩвĐŊиŅ
ŅиĐŋŅв ĐąĐĩСĐŋĐĩĐēи.
+
+ĐĐŧОвŅŅĐŊĐž, ĐаĐŧ ĐŊĐĩ дОвĐĩĐ´ĐĩŅŅŅŅ Đ˛Đ¸ĐēĐžŅиŅŅОвŅваŅи ŅĐĩ ĐąĐĩСĐŋĐžŅĐĩŅĐĩĐ´ĐŊŅĐž Ņ ŅвОŅĐŧŅ ĐēОдŅ.
+
+ĐĐģĐĩ ŅĐēŅĐž ĐаĐŧ СĐŊадОйиŅŅŅŅ ŅĐĩ Đ´ĐģŅ ŅĐēĐģадĐŊĐžĐŗĐž ŅŅĐĩĐŊаŅŅŅ, Đи ĐŧĐžĐļĐĩŅĐĩ дОдаŅи вĐģаŅĐŊŅ ĐˇĐ°ĐŗĐžĐģОвĐēи:
+
+{* ../../docs_src/handling_errors/tutorial002.py hl[14] *}
+
+## ĐŅŅаĐŊОвĐģĐĩĐŊĐŊŅ Đ˛ĐģаŅĐŊиŅ
ОйŅОйĐŊиĐēŅв ĐŋĐžĐŧиĐģĐžĐē
+
+Đи ĐŧĐžĐļĐĩŅĐĩ дОдаŅи вĐģаŅĐŊŅ ĐžĐąŅОйĐŊиĐēи ĐŋĐžĐŧиĐģĐžĐē Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ ŅиŅ
ŅаĐŧиŅ
ŅŅиĐģŅŅ ĐžĐąŅОйĐēи ĐŋĐžĐŧиĐģĐžĐē ĐˇŅ Starlette .
+
+ĐŅиĐŋŅŅŅиĐŧĐž, Ņ ĐĐ°Ņ Ņ Đ˛ĐģаŅĐŊиК ОйĘŧŅĐēŅ ĐŋĐžĐŧиĐģĐēи `UnicornException`, ŅĐēĐĩ Đи (айО ĐąŅĐąĐģŅĐžŅĐĩĐēа, ŅĐēŅ Đи виĐēĐžŅиŅŅОвŅŅŅĐĩ) ĐŧĐžĐļĐĩ `ĐˇĐŗĐĩĐŊĐĩŅŅваŅи` (`raise`).
+
+Đ Đи Ņ
ĐžŅĐĩŅĐĩ ОйŅОйĐģŅŅи ŅĐĩ виĐēĐģŅŅĐĩĐŊĐŊŅ ĐŗĐģОйаĐģŅĐŊĐž Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ FastAPI.
+
+Đи ĐŧĐžĐļĐĩŅĐĩ дОдаŅи вĐģаŅĐŊиК ОйŅОйĐŊиĐē виĐēĐģŅŅĐĩĐŊŅ ĐˇĐ° Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ `@app.exception_handler()`:
+
+{* ../../docs_src/handling_errors/tutorial003.py hl[5:7,13:18,24] *}
+
+ĐĸŅŅ, ŅĐēŅĐž Đи СвĐĩŅĐŊĐĩŅĐĩŅŅ Đ´Đž `/unicorns/yolo`, ŅĐž ĐˇĐŗĐĩĐŊĐĩŅŅŅŅŅŅŅ ĐŋĐžĐŧиĐģĐēа `UnicornException`.
+
+ĐĐģĐĩ вОĐŊа ĐąŅĐ´Đĩ ОйŅОйĐģĐĩĐŊа ŅŅĐŊĐēŅŅŅŅ-ОйŅОйĐŊиĐēĐžĐŧ `unicorn_exception_handler`.
+
+ĐŅĐļĐĩ, Đи ĐžŅŅиĐŧаŅŅĐĩ СŅОСŅĐŧŅĐģŅ ĐŋĐžĐŧиĐģĐēŅ ĐˇŅ HTTP-ŅŅаŅŅŅĐžĐŧ `418` Ņ JSON-вŅĐ´ĐŋОвŅĐ´Đ´Ņ:
+
+```JSON
+{"message": "Oops! yolo did something. There goes a rainbow..."}
+```
+
+/// note | ĐĸĐĩŅ
ĐŊŅŅĐŊŅ Đ´ĐĩŅаĐģŅ
+
+Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи `from starlette.requests import Request` Ņ `from starlette.responses import JSONResponse`.
+
+**FastAPI** ĐŊĐ°Đ´Đ°Ņ ŅŅ ŅаĐŧŅ `starlette.responses`, ŅĐž Đš `fastapi.responses`, ĐŋŅĐžŅŅĐž Đ´ĐģŅ ĐˇŅŅŅĐŊĐžŅŅŅ ŅОСŅОйĐŊиĐēа. ĐĐģĐĩ ĐąŅĐģŅŅŅŅŅŅ Đ´ĐžŅŅŅĐŋĐŊиŅ
вŅĐ´ĐŋОвŅĐ´ĐĩĐš ĐŊадŅ
ОдŅŅŅ ĐąĐĩСĐŋĐžŅĐĩŅĐĩĐ´ĐŊŅĐž ĐˇŅ Starlette. ĐĸĐĩ Đļ ŅаĐŧĐĩ ŅŅĐžŅŅŅŅŅŅŅ Ņ `Request`.
+
+///
+
+## ĐĐĩŅĐĩвиСĐŊаŅĐĩĐŊĐŊŅ ĐžĐąŅОйĐŊиĐēŅв ĐŋĐžĐŧиĐģĐžĐē Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ
+
+**FastAPI** ĐŧĐ°Ņ ĐēŅĐģŅĐēа ОйŅОйĐŊиĐēŅв ĐŋĐžĐŧиĐģĐžĐē Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ.
+
+ĐĻŅ ĐžĐąŅОйĐŊиĐēи вŅĐ´ĐŋОвŅдаŅŅŅ ĐˇĐ° ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ ŅŅаĐŊдаŅŅĐŊиŅ
JSON-вŅĐ´ĐŋОвŅĐ´ĐĩĐš, ĐēĐžĐģи Đи `ĐŗĐĩĐŊĐĩŅŅŅŅĐĩ` (`raise`) `HTTPException`, а ŅаĐēĐžĐļ ĐēĐžĐģи СаĐŋĐ¸Ņ ĐŧŅŅŅиŅŅ ĐŊĐĩĐēĐžŅĐĩĐēŅĐŊŅ Đ´Đ°ĐŊŅ.
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ĐŋĐĩŅĐĩвиСĐŊаŅиŅи ŅŅ ĐžĐąŅОйĐŊиĐēи, ŅŅвОŅивŅи вĐģаŅĐŊŅ.
+
+### ĐĐĩŅĐĩвиСĐŊаŅĐĩĐŊĐŊŅ ĐŋĐžĐŧиĐģĐžĐē ваĐģŅдаŅŅŅ ĐˇĐ°ĐŋиŅŅ
+
+ĐĐžĐģи СаĐŋĐ¸Ņ ĐŧŅŅŅиŅŅ ĐŊĐĩĐēĐžŅĐĩĐēŅĐŊŅ Đ´Đ°ĐŊŅ, **FastAPI** ĐŗĐĩĐŊĐĩŅŅŅ `RequestValidationError`.
+
+Đ ŅаĐēĐžĐļ вĐēĐģŅŅĐ°Ņ ĐžĐąŅОйĐŊиĐē ĐŋĐžĐŧиĐģĐžĐē Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ Đ´ĐģŅ ĐŊŅĐžĐŗĐž.
+
+ЊОй ĐŋĐĩŅĐĩвиСĐŊаŅиŅи ĐšĐžĐŗĐž, ŅĐŧĐŋĐžŅŅŅĐšŅĐĩ `RequestValidationError` Ņ Đ˛Đ¸ĐēĐžŅиŅŅОвŅĐšŅĐĩ ĐšĐžĐŗĐž С `@app.exception_handler(RequestValidationError)` Đ´ĐģŅ Đ´ĐĩĐēĐžŅŅваĐŊĐŊŅ ĐžĐąŅОйĐŊиĐēа ĐŋĐžĐŧиĐģĐžĐē.
+
+ĐĐąŅОйĐŊиĐē ĐŋĐžĐŧиĐģĐžĐē ĐžŅŅиĐŧŅŅ `Request` Ņ ŅаĐŧŅ ĐŋĐžĐŧиĐģĐēŅ.
+
+{* ../../docs_src/handling_errors/tutorial004.py hl[2,14:16] *}
+
+ĐĸĐĩĐŋĐĩŅ, ŅĐēŅĐž Đи ĐŋĐĩŅĐĩКдĐĩŅĐĩ Са ĐŋĐžŅиĐģаĐŊĐŊŅĐŧ `/items/foo`, СаĐŧŅŅŅŅ ŅĐžĐŗĐž, ŅОй ĐžŅŅиĐŧаŅи ŅŅаĐŊдаŅŅĐŊŅ JSON-ĐŋĐžĐŧиĐģĐēŅ:
+
+```JSON
+{
+ "detail": [
+ {
+ "loc": [
+ "path",
+ "item_id"
+ ],
+ "msg": "value is not a valid integer",
+ "type": "type_error.integer"
+ }
+ ]
+}
+```
+
+Đи ĐžŅŅиĐŧаŅŅĐĩ ŅĐĩĐēŅŅĐžĐ˛Ņ Đ˛ĐĩŅŅŅŅ:
+
+```
+1 validation error
+path -> item_id
+ value is not a valid integer (type=type_error.integer)
+```
+
+#### `RequestValidationError` ĐŋŅĐžŅи `ValidationError`
+
+/// warning | ĐŖĐ˛Đ°ĐŗĐ°
+
+ĐĻĐĩ ŅĐĩŅ
ĐŊŅŅĐŊŅ Đ´ĐĩŅаĐģŅ, ŅĐēŅ Đи ĐŧĐžĐļĐĩŅĐĩ ĐŋŅĐžĐŋŅŅŅиŅи, ŅĐēŅĐž вОĐŊи СаŅаС ĐŊĐĩ ваĐļĐģĐ¸Đ˛Ņ Đ´ĐģŅ ĐаŅ.
+
+///
+
+`RequestValidationError` Ņ ĐŋŅĐ´ĐēĐģаŅĐžĐŧ Pydantic `ValidationError` .
+
+**FastAPI** виĐēĐžŅиŅŅОвŅŅ ĐšĐžĐŗĐž Đ´ĐģŅ ŅĐžĐŗĐž, ŅĐēŅĐž Đи виĐēĐžŅиŅŅОвŅŅŅĐĩ ĐŧОдĐĩĐģŅ Pydantic Ņ `response_model` Ņ Ņ Đ˛Đ°ŅиŅ
даĐŊиŅ
Ņ ĐŋĐžĐŧиĐģĐēа, Đи ĐŋОйаŅиĐģи ĐŋĐžĐŧиĐģĐēŅ Ņ ŅвОŅĐŧŅ ĐļŅŅĐŊаĐģŅ.
+
+ĐĐģĐĩ ĐēĐģŅŅĐŊŅ/ĐēĐžŅиŅŅŅĐ˛Đ°Ņ ĐŊĐĩ ĐŋОйаŅиŅŅ ŅŅ. ĐаŅĐžĐŧŅŅŅŅ ĐēĐģŅŅĐŊŅ ĐžŅŅиĐŧĐ°Ņ "Internal Server Error" ĐˇŅ ŅŅаŅŅŅĐžĐŧ HTTP `500`.
+
+ĐĸаĐē ĐŧĐ°Ņ ĐąŅŅи, ŅĐēŅĐž Ņ ĐĐ°Ņ Đ˛Đ¸ĐŊиĐēĐģа `ValidationError` Pydantic Ņ *вŅĐ´ĐŋОвŅĐ´Ņ* айО Đ´ĐĩŅĐŊĐ´Đĩ Ņ Đ˛Đ°ŅĐžĐŧŅ ĐēĐžĐ´Ņ (ĐŊĐĩ Ņ *СаĐŋиŅŅ* ĐēĐģŅŅĐŊŅа), ŅĐĩ ĐŊаŅĐŋŅĐ°Đ˛Đ´Ņ Ņ ĐŋĐžĐŧиĐģĐēĐžŅ Ņ ĐаŅĐžĐŧŅ ĐēОдŅ.
+
+Đ ĐŋĐžĐēи Đи ŅŅ Đ˛Đ¸ĐŋŅавĐģŅŅŅĐĩ, ĐēĐģŅŅĐŊŅи/ĐēĐžŅиŅŅŅваŅŅ ĐŊĐĩ ĐŋОвиĐŊĐŊŅ ĐŧаŅи Đ´ĐžŅŅŅĐŋŅ Đ´Đž вĐŊŅŅŅŅŅĐŊŅĐžŅ ŅĐŊŅĐžŅĐŧаŅŅŅ ĐŋŅĐž ĐŋĐžĐŧиĐģĐēŅ, ĐžŅĐēŅĐģŅĐēи ŅĐĩ ĐŧĐžĐļĐĩ ĐŋŅиСвĐĩŅŅи Đ´Đž вŅаСĐģивОŅŅŅ ĐąĐĩСĐŋĐĩĐēи.
+
+### ĐĐĩŅĐĩвиСĐŊаŅĐĩĐŊĐŊŅ ĐžĐąŅОйĐŊиĐēа ĐŋĐžĐŧиĐģĐžĐē `HTTPException`
+
+ĐĐŊаĐģĐžĐŗŅŅĐŊĐž, Đи ĐŧĐžĐļĐĩŅĐĩ ĐŋĐĩŅĐĩвиСĐŊаŅиŅи ОйŅОйĐŊиĐē `HTTPException`.
+
+ĐаĐŋŅиĐēĐģад, Đи ĐŧĐžĐļĐĩŅĐĩ СаŅ
ĐžŅŅŅи ĐŋОвĐĩŅĐŊŅŅи ŅĐĩĐēŅŅĐžĐ˛Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ ĐˇĐ°ĐŧŅŅŅŅ JSON Đ´ĐģŅ ŅиŅ
ĐŋĐžĐŧиĐģĐžĐē:
+
+{* ../../docs_src/handling_errors/tutorial004.py hl[3:4,9:11,22] *}
+
+/// note | ĐĸĐĩŅ
ĐŊŅŅĐŊŅ Đ´ĐĩŅаĐģŅ
+
+Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи `from starlette.responses import PlainTextResponse`.
+
+**FastAPI** ĐŊĐ°Đ´Đ°Ņ ŅŅ ŅаĐŧŅ `starlette.responses`, ŅĐž Đš `fastapi.responses`, ĐŋŅĐžŅŅĐž Đ´ĐģŅ ĐˇŅŅŅĐŊĐžŅŅŅ ŅОСŅОйĐŊиĐēа. ĐĐģĐĩ ĐąŅĐģŅŅŅŅŅŅ Đ´ĐžŅŅŅĐŋĐŊиŅ
вŅĐ´ĐŋОвŅĐ´ĐĩĐš ĐŊадŅ
ОдŅŅŅ ĐąĐĩСĐŋĐžŅĐĩŅĐĩĐ´ĐŊŅĐž ĐˇŅ Starlette.
+
+///
+
+### ĐиĐēĐžŅиŅŅаĐŊĐŊŅ ŅŅĐģа `RequestValidationError`
+
+`RequestValidationError` ĐŧŅŅŅиŅŅ `body`, ŅĐēиК вŅĐŊ ĐžŅŅиĐŧав ŅС ĐŊĐĩĐēĐžŅĐĩĐēŅĐŊиĐŧи даĐŊиĐŧи.
+
+Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи ŅĐĩ ĐŋŅĐ´ ŅĐ°Ņ ŅОСŅОйĐēи ŅĐ˛ĐžĐŗĐž дОдаŅĐēа, ŅОй ĐģĐžĐŗŅваŅи ŅŅĐģĐž СаĐŋиŅŅ Ņа ĐŊаĐģĐ°ĐŗĐžĐ´ĐļŅваŅи ĐšĐžĐŗĐž, ĐŋОвĐĩŅŅаŅи ĐēĐžŅиŅŅŅваŅĐĩĐ˛Ņ ŅĐžŅĐž.
+
+{* ../../docs_src/handling_errors/tutorial005.py hl[14] *}
+
+ĐĸĐĩĐŋĐĩŅ ŅĐŋŅОйŅĐšŅĐĩ ĐŊадŅŅĐģаŅи ĐŊĐĩĐēĐžŅĐĩĐēŅĐŊиК ĐĩĐģĐĩĐŧĐĩĐŊŅ, ĐŊаĐŋŅиĐēĐģад:
+
+```JSON
+{
+ "title": "towel",
+ "size": "XL"
+}
+```
+Đи ĐžŅŅиĐŧаŅŅĐĩ вŅĐ´ĐŋОвŅĐ´Ņ, ŅĐēа ĐŋОвŅĐ´ĐžĐŧиŅŅ ĐаĐŧ, ŅĐēŅ ŅаĐŧĐĩ даĐŊŅ Ņ ĐŊĐĩĐēĐžŅĐĩĐēŅĐŊŅ Ņ Đ˛Đ°ŅĐžĐŧŅ ŅŅĐģŅ ĐˇĐ°ĐŋиŅŅ:
+
+
+```JSON hl_lines="12-15"
+{
+ "detail": [
+ {
+ "loc": [
+ "body",
+ "size"
+ ],
+ "msg": "value is not a valid integer",
+ "type": "type_error.integer"
+ }
+ ],
+ "body": {
+ "title": "towel",
+ "size": "XL"
+ }
+}
+```
+
+#### `HTTPException` FastAPI ĐŋŅĐžŅи `HTTPException` Starlette
+
+**FastAPI** ĐŧĐ°Ņ Đ˛ĐģаŅĐŊиК `HTTPException`.
+
+Đ ĐēĐģĐ°Ņ ĐŋĐžĐŧиĐģĐēи `HTTPException` в **FastAPI** ŅŅĐŋадĐēОвŅŅŅŅŅŅ Đ˛ŅĐ´ ĐēĐģаŅŅ ĐŋĐžĐŧиĐģĐēи `HTTPException` в Starlette.
+
+ĐдиĐŊа ŅŅСĐŊиŅŅ ĐŋĐžĐģŅĐŗĐ°Ņ Đ˛ ŅĐžĐŧŅ, ŅĐž `HTTPException` в **FastAPI** ĐŋŅиКĐŧĐ°Ņ ĐąŅĐ´Ņ-ŅĐēŅ Đ´Đ°ĐŊŅ, ŅĐēŅ ĐŧĐžĐļĐŊа ĐŋĐĩŅĐĩŅвОŅиŅи ĐŊа JSON, Đ´ĐģŅ ĐŋĐžĐģŅ `detail`, ŅĐžĐ´Ņ ŅĐē `HTTPException` Ņ Starlette ĐŋŅиКĐŧĐ°Ņ ŅŅĐģŅĐēи ŅŅĐ´Đēи.
+
+ĐŅĐļĐĩ, Đи ĐŧĐžĐļĐĩŅĐĩ ĐŋŅОдОвĐļŅваŅи виĐēĐžŅиŅŅОвŅваŅи `HTTPException` в **FastAPI** ŅĐē СаСвиŅаК Ņ ŅвОŅĐŧŅ ĐēОдŅ.
+
+ĐĐģĐĩ ĐēĐžĐģи Đи ŅĐĩŅŅŅŅŅŅŅĐĩ ОйŅОйĐŊиĐē виĐēĐģŅŅĐĩĐŊŅ, ŅĐģŅĐ´ ŅĐĩŅŅŅŅŅваŅи ĐšĐžĐŗĐž Đ´ĐģŅ `HTTPException` ĐˇŅ Starlette.
+
+ĐĸаĐēиĐŧ ŅиĐŊĐžĐŧ, ŅĐēŅĐž ĐąŅĐ´Ņ-ŅĐēа ŅаŅŅиĐŊа вĐŊŅŅŅŅŅĐŊŅĐžĐŗĐž ĐēĐžĐ´Ņ Starlette айО ŅОСŅиŅĐĩĐŊĐŊŅ Ņи ĐŋĐģĐ°ĐŗŅĐŊ Starlette ĐˇĐŗĐĩĐŊĐĩŅŅŅ (raise) `HTTPException`, ĐĐ°Ņ ĐžĐąŅОйĐŊиĐē СĐŧĐžĐļĐĩ ĐŋĐĩŅĐĩŅ
ĐžĐŋиŅи Ņа ОйŅОйиŅи ŅŅ.
+
+ĐŖ ŅŅĐžĐŧŅ ĐŋŅиĐēĐģадŅ, ŅОй ĐŧаŅи ĐŧĐžĐļĐģивŅŅŅŅ Đ˛Đ¸ĐēĐžŅиŅŅОвŅваŅи Ойидва `HTTPException` в ОдĐŊĐžĐŧŅ ĐēОдŅ, ĐŋĐžĐŧиĐģĐēа Starlette ĐŋĐĩŅĐĩĐšĐŧĐĩĐŊОвŅŅŅŅŅŅ ĐŊа `StarletteHTTPException`:
+
+```Python
+from starlette.exceptions import HTTPException as StarletteHTTPException
+```
+
+### ĐОвŅĐžŅĐŊĐĩ виĐēĐžŅиŅŅаĐŊĐŊŅ ĐžĐąŅОйĐŊиĐēŅв ĐŋĐžĐŧиĐģĐžĐē **FastAPI**
+
+Đ¯ĐēŅĐž Đи Ņ
ĐžŅĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи ĐŋĐžĐŧиĐģĐēи ŅаСОĐŧ ŅС ŅаĐēиĐŧи Đļ ОйŅОйĐŊиĐēаĐŧи ĐŋĐžĐŧиĐģĐžĐē Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ, ŅĐē Ņ **FastAPI**, Đи ĐŧĐžĐļĐĩŅĐĩ ŅĐŧĐŋĐžŅŅŅваŅи Ņа ĐŋОвŅĐžŅĐŊĐž виĐēĐžŅиŅŅОвŅваŅи ŅŅ
ŅС `fastapi.exception_handlers`:
+
+{* ../../docs_src/handling_errors/tutorial006.py hl[2:5,15,21] *}
+
+ĐŖ ŅŅĐžĐŧŅ ĐŋŅиĐēĐģĐ°Đ´Ņ Đи ĐŋŅĐžŅŅĐž виĐēĐžŅиŅŅОвŅŅŅĐĩ `print` Đ´ĐģŅ Đ˛Đ¸Đ˛ĐĩĐ´ĐĩĐŊĐŊŅ Đ´ŅĐļĐĩ ŅĐŊŅĐžŅĐŧаŅивĐŊĐžĐŗĐž ĐŋОвŅĐ´ĐžĐŧĐģĐĩĐŊĐŊŅ, аĐģĐĩ Đи СŅОСŅĐŧŅĐģи ĐžŅĐŊОвĐŊŅ ŅĐ´ĐĩŅ. Đи ĐŧĐžĐļĐĩŅĐĩ ОйŅОйиŅи ĐŋĐžĐŧиĐģĐēŅ Ņа ĐŋОвŅĐžŅĐŊĐž виĐēĐžŅиŅŅОвŅваŅи ОйŅОйĐŊиĐēи ĐŋĐžĐŧиĐģĐžĐē Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ.
diff --git a/docs/uk/docs/tutorial/header-param-models.md b/docs/uk/docs/tutorial/header-param-models.md
new file mode 100644
index 000000000..6f7b0bdae
--- /dev/null
+++ b/docs/uk/docs/tutorial/header-param-models.md
@@ -0,0 +1,58 @@
+# ĐОдĐĩĐģŅ ĐаŅаĐŧĐĩŅŅŅв ĐĐ°ĐŗĐžĐģОвĐēŅв
+
+Đ¯ĐēŅĐž Ņ ĐĐ°Ņ Ņ ĐŗŅŅĐŋа ĐŋОвâŅСаĐŊиŅ
ĐŋаŅаĐŧĐĩŅŅŅв ĐˇĐ°ĐŗĐžĐģОвĐēŅв, Đи ĐŧĐžĐļĐĩŅĐĩ ŅŅвОŅиŅи **Pydantic ĐŧОдĐĩĐģŅ** Đ´ĐģŅ ŅŅ
ĐžĐŗĐžĐģĐžŅĐĩĐŊĐŊŅ.
+
+ĐĻĐĩ дОСвОĐģиŅŅ ĐаĐŧ ĐŋОвŅĐžŅĐŊĐž **виĐēĐžŅиŅŅОвŅваŅи ĐŧОдĐĩĐģŅ** в **ŅŅСĐŊиŅ
ĐŧŅŅŅŅŅ
**, а ŅаĐēĐžĐļ ĐžĐŗĐžĐģĐžŅиŅи ваĐģŅдаŅŅŅ Ņа ĐŧĐĩŅадаĐŊŅ Đ´ĐģŅ Đ˛ŅŅŅ
ĐŋаŅаĐŧĐĩŅŅŅв ОдĐŊĐžŅаŅĐŊĐž. đ
+
+/// note | ĐĐžŅаŅĐēи
+
+ĐĻŅ ĐŧĐžĐļĐģивŅŅŅŅ ĐŋŅĐ´ŅŅиĐŧŅŅŅŅŅŅ ĐŋĐžŅиĐŊаŅŅи С вĐĩŅŅŅŅ FastAPI `0.115.0`. đ¤
+
+///
+
+## ĐаŅаĐŧĐĩŅŅи ĐĐ°ĐŗĐžĐģОвĐēŅв С ĐиĐēĐžŅиŅŅаĐŊĐŊŅĐŧ Pydantic Model
+
+ĐĐŗĐžĐģĐžŅŅŅŅ ĐŋĐžŅŅŅĐąĐŊŅ **ĐŋаŅаĐŧĐĩŅŅи ĐˇĐ°ĐŗĐžĐģОвĐēŅв** Ņ **Pydantic ĐŧОдĐĩĐģŅ**, а ĐŋĐžŅŅĐŧ ĐžĐŗĐžĐģĐžŅŅŅŅ ĐŋаŅаĐŧĐĩŅŅ ŅĐē `Header`:
+
+{* ../../docs_src/header_param_models/tutorial001_an_py310.py hl[9:14,18] *}
+
+FastAPI ĐąŅĐ´Đĩ виŅŅĐŗŅваŅи даĐŊŅ Đ´ĐģŅ ĐēĐžĐļĐŊĐžĐŗĐž ĐŋĐžĐģŅ Đˇ ĐˇĐ°ĐŗĐžĐģОвĐēŅв Ņ ĐˇĐ°ĐŋиŅŅ Ņа ĐŋĐĩŅĐĩдаваŅи ŅŅ
Ņ ŅŅвОŅĐĩĐŊŅ ĐаĐŧи Pydantic ĐŧОдĐĩĐģŅ.
+
+**FastAPI** ĐąŅĐ´Đĩ **виŅŅĐŗŅваŅи** даĐŊŅ Đ´ĐģŅ **ĐēĐžĐļĐŊĐžĐŗĐž ĐŋĐžĐģŅ** С **ĐˇĐ°ĐŗĐžĐģОвĐēŅв** Ņ ĐˇĐ°ĐŋиŅŅ Ņа ĐŋĐĩŅĐĩдаваŅи ŅŅ
Ņ ŅŅвОŅĐĩĐŊŅ ĐаĐŧи Pydantic ĐŧОдĐĩĐģŅ.
+
+## ĐĐĩŅĐĩвŅŅĐēа в ĐĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ĐŋОйаŅиŅи ĐŊĐĩОйŅ
ŅĐ´ĐŊŅ ĐˇĐ°ĐŗĐžĐģОвĐēи в ŅĐŊŅĐĩŅŅĐĩĐšŅŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ ĐˇĐ° адŅĐĩŅĐžŅ `/docs`:
+
+
+
+
+
+## ĐайОŅĐžĐŊа ĐОдаŅĐēОвиŅ
ĐĐ°ĐŗĐžĐģОвĐēŅв
+
+ĐŖ Đ´ĐĩŅĐēиŅ
ĐžŅОйĐģивиŅ
виĐŋадĐēаŅ
(ĐšĐŧОвŅŅĐŊĐž, ĐŊĐĩ Đ´ŅĐļĐĩ ĐŋĐžŅиŅĐĩĐŊиŅ
) Đи ĐŧĐžĐļĐĩŅĐĩ СаŅ
ĐžŅŅŅи **ОйĐŧĐĩĐļиŅи** ĐˇĐ°ĐŗĐžĐģОвĐēи, ŅĐēŅ Ņ
ĐžŅĐĩŅĐĩ ĐžŅŅиĐŧаŅи.
+
+Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅаŅи ĐēĐžĐŊŅŅĐŗŅŅаŅŅŅ ĐŧОдĐĩĐģŅ Pydantic, ŅОй `СайОŅĐžĐŊиŅи` ĐąŅĐ´Ņ-ŅĐēŅ `дОдаŅĐēОвŅ` ĐŋĐžĐģŅ:
+
+{* ../../docs_src/header_param_models/tutorial002_an_py310.py hl[10] *}
+
+Đ¯ĐēŅĐž ĐēĐģŅŅĐŊŅ ŅĐŋŅОйŅŅ ĐŊадŅŅĐģаŅи **дОдаŅĐēĐžĐ˛Ņ ĐˇĐ°ĐŗĐžĐģОвĐēи**, вŅĐŊ ĐžŅŅиĐŧĐ°Ņ **ĐŋĐžĐŧиĐģĐēŅ** Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ.
+
+ĐаĐŋŅиĐēĐģад, ŅĐēŅĐž ĐēĐģŅŅĐŊŅ ŅĐŋŅОйŅŅ ĐŊадŅŅĐģаŅи ĐˇĐ°ĐŗĐžĐģОвОĐē `tool` ĐˇŅ ĐˇĐŊаŅĐĩĐŊĐŊŅĐŧ `plumbus`, вŅĐŊ ĐžŅŅиĐŧĐ°Ņ **ĐŋĐžĐŧиĐģĐēŅ** С ĐŋОвŅĐ´ĐžĐŧĐģĐĩĐŊĐŊŅĐŧ ĐŋŅĐž ŅĐĩ, ŅĐž ĐŋаŅаĐŧĐĩŅŅ ĐˇĐ°ĐŗĐžĐģОвĐēа `tool` ĐŊĐĩ дОСвОĐģĐĩĐŊиК:
+
+```json
+{
+ "detail": [
+ {
+ "type": "extra_forbidden",
+ "loc": ["header", "tool"],
+ "msg": "Extra inputs are not permitted",
+ "input": "plumbus",
+ }
+ ]
+}
+```
+
+## ĐŅĐ´ŅŅĐŧĐžĐē
+
+Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи **Pydantic ĐŧОдĐĩĐģŅ** Đ´ĐģŅ ĐžĐŗĐžĐģĐžŅĐĩĐŊĐŊŅ **ĐˇĐ°ĐŗĐžĐģОвĐēŅв** Ņ **FastAPI**. đ
diff --git a/docs/uk/docs/tutorial/metadata.md b/docs/uk/docs/tutorial/metadata.md
new file mode 100644
index 000000000..64e667ec6
--- /dev/null
+++ b/docs/uk/docs/tutorial/metadata.md
@@ -0,0 +1,120 @@
+# ĐĐĩŅадаĐŊŅ Ņа URL-адŅĐĩŅи Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ĐŊаĐģаŅŅŅваŅи ĐēŅĐģŅĐēа ĐēĐžĐŊŅŅĐŗŅŅаŅŅĐš ĐŧĐĩŅадаĐŊиŅ
Ņ ĐаŅĐžĐŧŅ Đ´ĐžĐ´Đ°ŅĐēŅ **FastAPI**.
+
+## ĐĐĩŅадаĐŊŅ Đ´ĐģŅ API
+
+Đи ĐŧĐžĐļĐĩŅĐĩ вŅŅаĐŊОвиŅи ŅаĐēŅ ĐŋĐžĐģŅ, ŅĐēŅ Đ˛Đ¸ĐēĐžŅиŅŅОвŅŅŅŅŅŅ Đ˛ ŅĐŋĐĩŅиŅŅĐēаŅŅŅ OpenAPI Ņа в авŅĐžĐŧаŅиŅĐŊĐž ĐˇĐŗĐĩĐŊĐĩŅОваĐŊиŅ
ŅĐŊŅĐĩŅŅĐĩĐšŅаŅ
Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ API:
+
+| ĐаŅаĐŧĐĩŅŅ | ĐĸиĐŋ | ĐĐŋĐ¸Ņ |
+|------------|------|-------------|
+| `title` | `str` | ĐаСва API. |
+| `summary` | `str` | ĐĐžŅĐžŅĐēиК ĐžĐŋĐ¸Ņ API. ĐĐžŅŅŅĐŋĐŊĐž С OpenAPI 3.1.0, FastAPI 0.99.0. |
+| `description` | `str` | ĐŅĐģŅŅ Đ´ĐĩŅаĐģŅĐŊиК ĐžĐŋĐ¸Ņ API. ĐĐžĐļĐĩ виĐēĐžŅиŅŅОвŅваŅи Markdown. |
+| `version` | `string` | ĐĐĩŅŅŅŅ API. ĐĻĐĩ вĐĩŅŅŅŅ ĐаŅĐžĐŗĐž дОдаŅĐēа, а ĐŊĐĩ OpenAPI. ĐаĐŋŅиĐēĐģад, `2.5.0`. |
+| `terms_of_service` | `str` | URL Đ´Đž ŅĐŧОв виĐēĐžŅиŅŅаĐŊĐŊŅ API. Đ¯ĐēŅĐž вĐēаСаĐŊĐž, ĐŧĐ°Ņ ĐąŅŅи Ņ ŅĐžŅĐŧаŅŅ URL. |
+| `contact` | `dict` | ĐĐŊŅĐžŅĐŧаŅŅŅ Đ´ĐģŅ ĐēĐžĐŊŅаĐēŅŅ Đˇ API. ĐĐžĐļĐĩ ĐŧŅŅŅиŅи ĐēŅĐģŅĐēа ĐŋĐžĐģŅв. contact
ĐŋĐžĐģŅĐаŅаĐŧĐĩŅŅ ĐĸиĐŋ ĐĐŋĐ¸Ņ name
str
ĐĐŧ'Ņ ĐēĐžĐŊŅаĐēŅĐŊĐžŅ ĐžŅОйи айО ĐžŅĐŗĐ°ĐŊŅСаŅŅŅ. url
str
URL С ŅĐŊŅĐžŅĐŧаŅŅŅŅ Đ´ĐģŅ ĐēĐžĐŊŅаĐēŅŅ. ĐОвиĐŊĐĩĐŊ ĐąŅŅи Ņ ŅĐžŅĐŧаŅŅ URL. email
str
Email ĐēĐžĐŊŅаĐēŅĐŊĐžŅ ĐžŅОйи айО ĐžŅĐŗĐ°ĐŊŅСаŅŅŅ. ĐОвиĐŊĐĩĐŊ ĐąŅŅи Ņ ŅĐžŅĐŧаŅŅ ĐĩĐģĐĩĐēŅŅĐžĐŊĐŊĐžŅ ĐŋĐžŅŅи.
|
+| `license_info` | `dict` | ĐĐŊŅĐžŅĐŧаŅŅŅ ĐŋŅĐž ĐģŅŅĐĩĐŊСŅŅ Đ´ĐģŅ API. ĐĐžĐļĐĩ ĐŧŅŅŅиŅи ĐēŅĐģŅĐēа ĐŋĐžĐģŅв. license_info
ĐŋĐžĐģŅĐаŅаĐŧĐĩŅŅ ĐĸиĐŋ ĐĐŋĐ¸Ņ name
str
ĐĐĐĐ'Đ¯ĐĐĐĐĐ (ŅĐēŅĐž вŅŅаĐŊОвĐģĐĩĐŊĐž license_info
). ĐаСва ĐģŅŅĐĩĐŊСŅŅ Đ´ĐģŅ API.identifier
str
ĐŅŅĐĩĐŊСŅĐšĐŊиК виŅаС Са SPDX Đ´ĐģŅ API. ĐĐžĐģĐĩ identifier
вСаŅĐŧОвиĐēĐģŅŅĐŊĐĩ С ĐŋĐžĐģĐĩĐŧ url
. ĐĐžŅŅŅĐŋĐŊĐž С OpenAPI 3.1.0, FastAPI 0.99.0. url
str
URL Đ´Đž ĐģŅŅĐĩĐŊСŅŅ, ŅĐēа виĐēĐžŅиŅŅОвŅŅŅŅŅŅ Đ´ĐģŅ API. ĐОвиĐŊĐĩĐŊ ĐąŅŅи Ņ ŅĐžŅĐŧаŅŅ URL.
|
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ĐŊаĐģаŅŅŅваŅи ŅŅ
ĐŊаŅŅŅĐŋĐŊиĐŧ ŅиĐŊĐžĐŧ:
+
+{* ../../docs_src/metadata/tutorial001.py hl[3:16, 19:32] *}
+
+/// tip | ĐŅĐ´ĐēаСĐēа
+
+ĐŖ ĐŋĐžĐģŅ `description` ĐŧĐžĐļĐŊа виĐēĐžŅиŅŅОвŅваŅи Markdown, Ņ Đ˛ŅĐŊ ĐąŅĐ´Đĩ вŅдОйŅаĐļаŅиŅŅ Ņ ŅĐĩСŅĐģŅŅаŅŅ.
+
+///
+
+Đ ŅŅŅŅ ĐēĐžĐŊŅŅĐŗŅŅаŅŅŅŅ Đ°Đ˛ŅĐžĐŧаŅиŅĐŊа Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ API Đ˛Đ¸ĐŗĐģŅдаŅиĐŧĐĩ ŅаĐē:
+
+
+
+## ĐĐ´ĐĩĐŊŅиŅŅĐēаŅĐžŅ ĐģŅŅĐĩĐŊСŅŅ
+
+Đ ĐŋĐžŅаŅĐēŅ Đ˛Đ¸ĐēĐžŅиŅŅаĐŊĐŊŅ OpenAPI 3.1.0 Ņа FastAPI 0.99.0 Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ ĐŊаĐģаŅŅŅваŅи `license_info` Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ `identifier` СаĐŧŅŅŅŅ `url`.
+
+ĐаĐŋŅиĐēĐģад:
+
+{* ../../docs_src/metadata/tutorial001_1.py hl[31] *}
+
+## ĐĐĩŅадаĐŊŅ Đ´ĐģŅ ŅĐĩĐŗŅв
+
+Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ дОдаŅи дОдаŅĐēĐžĐ˛Ņ ĐŧĐĩŅадаĐŊŅ Đ´ĐģŅ ŅŅСĐŊиŅ
ŅĐĩĐŗŅв, ŅĐēŅ Đ˛Đ¸ĐēĐžŅиŅŅОвŅŅŅŅŅŅ Đ´ĐģŅ ĐŗŅŅĐŋŅваĐŊĐŊŅ ĐžĐŋĐĩŅаŅŅĐš ŅĐģŅŅ
Ņв, Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ ĐŋаŅаĐŧĐĩŅŅа `openapi_tags`.
+
+ĐŅĐŊ ĐŋŅиКĐŧĐ°Ņ ŅĐŋиŅĐžĐē, ŅĐēиК ĐŧŅŅŅиŅŅ ĐžĐ´Đ¸ĐŊ ŅĐģОвĐŊиĐē Đ´ĐģŅ ĐēĐžĐļĐŊĐžĐŗĐž ŅĐĩĐŗĐ°.
+
+ĐĐžĐļĐĩĐŊ ŅĐģОвĐŊиĐē ĐŧĐžĐļĐĩ ĐŧŅŅŅиŅи:
+
+* `name` (**ОйОв'ŅСĐēОвО**): `str` С ŅŅŅŅ Đļ ĐŊĐ°ĐˇĐ˛ĐžŅ ŅĐĩĐŗŅ, ŅĐēŅ Đи виĐēĐžŅиŅŅОвŅŅŅĐĩ Ņ ĐŋаŅаĐŧĐĩŅŅŅ `tags` Ņ ĐаŅиŅ
*ĐžĐŋĐĩŅаŅŅŅŅ
ŅĐģŅŅ
Ņ* Ņа `APIRouter`s.
+* `description`: `str` С ĐēĐžŅĐžŅĐēиĐŧ ĐžĐŋиŅĐžĐŧ ŅĐĩĐŗŅ. ĐĐžĐļĐĩ ĐŧŅŅŅиŅи Markdown Ņ ĐąŅĐ´Đĩ вŅдОйŅаĐļĐĩĐŊĐž в ŅĐŊŅĐĩŅŅĐĩĐšŅŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ.
+* `externalDocs`: `dict` ŅĐēиК ĐžĐŋиŅŅŅ ĐˇĐžĐ˛ĐŊŅŅĐŊŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ Đˇ ŅаĐēиĐŧи ĐŋĐžĐģŅĐŧи:
+ * `description`: `str` С ĐēĐžŅĐžŅĐēиĐŧ ĐžĐŋиŅĐžĐŧ СОвĐŊŅŅĐŊŅĐžŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ.
+ * `url` (**ОйОв'ŅСĐēОвО**): `str`С URL-адŅĐĩŅĐžŅ ĐˇĐžĐ˛ĐŊŅŅĐŊŅĐžŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ.
+
+### ĐĄŅвОŅĐĩĐŊĐŊŅ ĐŧĐĩŅадаĐŊиŅ
Đ´ĐģŅ ŅĐĩĐŗŅв
+
+ĐĄĐŋŅОйŅĐšĐŧĐž ŅĐĩ ĐŊа ĐŋŅиĐēĐģĐ°Đ´Ņ Đˇ ŅĐĩĐŗĐ°Đŧи Đ´ĐģŅ `users` Ņа `items`.
+
+ĐĄŅвОŅŅŅŅ ĐŧĐĩŅадаĐŊŅ Đ´ĐģŅ ŅвОŅŅ
ŅĐĩĐŗŅв Ņ ĐŋĐĩŅĐĩдаКŅĐĩ ŅŅ
Ņ ĐŋаŅаĐŧĐĩŅŅ `openapi_tags`:
+
+{* ../../docs_src/metadata/tutorial004.py hl[3:16,18] *}
+
+ĐвĐĩŅĐŊŅŅŅ ŅĐ˛Đ°ĐŗŅ, ŅĐž в ĐžĐŋиŅаŅ
ĐŧĐžĐļĐŊа виĐēĐžŅиŅŅОвŅваŅи Markdown, ĐŊаĐŋŅиĐēĐģад, "login" ĐąŅĐ´Đĩ ĐŋĐžĐēаСаĐŊĐž ĐļиŅĐŊиĐŧ ŅŅиŅŅĐžĐŧ (**login**), а "fancy" ĐąŅĐ´Đĩ ĐŋĐžĐēаСаĐŊĐž ĐēŅŅŅивОĐŧ (_fancy_).
+
+/// tip | ĐĐžŅада
+
+ĐĐĩ ОйОв'ŅСĐēОвО дОдаваŅи ĐŧĐĩŅадаĐŊŅ Đ´ĐģŅ Đ˛ŅŅŅ
ŅĐĩĐŗŅв, ŅĐēŅ Đи виĐēĐžŅиŅŅОвŅŅŅĐĩ.
+
+///
+
+### ĐиĐēĐžŅиŅŅаĐŊĐŊŅ ŅĐĩĐŗŅв
+
+ĐиĐēĐžŅиŅŅОвŅĐšŅĐĩ ĐŋаŅаĐŧĐĩŅŅ `tags` ĐˇŅ ŅвОŅĐŧи *ĐžĐŋĐĩŅаŅŅŅĐŧи ŅĐģŅŅ
Ņ* (Ņ `APIRouter`) Đ´ĐģŅ ĐŋŅиСĐŊаŅĐĩĐŊĐŊŅ ŅŅ
Đ´Đž ŅŅСĐŊиŅ
ŅĐĩĐŗŅв:
+
+{* ../../docs_src/metadata/tutorial004.py hl[21,26] *}
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+ĐĐĩŅаĐģŅĐŊŅŅĐĩ ĐŋŅĐž ŅĐĩĐŗĐ¸ ŅиŅаКŅĐĩ в ŅОСдŅĐģŅ [ĐĐžĐŊŅŅĐŗŅŅаŅŅŅ ŅĐģŅŅ
Ņв ĐžĐŋĐĩŅаŅŅĐš](path-operation-configuration.md#tags){.internal-link target=_blank}.
+
+///
+
+### ĐĐĩŅĐĩвŅŅĐēа Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ
+
+Đ¯ĐēŅĐž Đи СаŅаС ĐŋĐĩŅĐĩвŅŅиŅĐĩ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ, вОĐŊа ĐŋĐžĐēаĐļĐĩ вŅŅ Đ´ĐžĐ´Đ°ŅĐēĐžĐ˛Ņ ĐŧĐĩŅадаĐŊŅ:
+
+
+
+### ĐĐžŅŅĐ´ĐžĐē ŅĐĩĐŗŅв
+
+ĐĐžŅŅĐ´ĐžĐē ĐēĐžĐļĐŊĐžĐŗĐž ŅĐģОвĐŊиĐēа ĐŧĐĩŅадаĐŊиŅ
ŅĐĩĐŗŅ ŅаĐēĐžĐļ виСĐŊаŅĐ°Ņ ĐŋĐžŅŅĐ´ĐžĐē вŅдОйŅаĐļĐĩĐŊĐŊŅ Đ˛ ŅĐŊŅĐĩŅŅĐĩĐšŅŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ.
+
+ĐаĐŋŅиĐēĐģад, Ņ
ĐžŅа `users` Đŧав йи ĐšŅи ĐŋŅŅĐģŅ `items` в аĐģŅавŅŅĐŊĐžĐŧŅ ĐŋĐžŅŅĐ´ĐēŅ, вŅĐŊ вŅдОйŅаĐļаŅŅŅŅŅ ĐŋĐĩŅĐĩĐ´ ĐŊиĐŧи, ĐžŅĐēŅĐģŅĐēи Đŧи дОдаĐģи ĐšĐžĐŗĐž ĐŧĐĩŅадаĐŊŅ ŅĐē ĐŋĐĩŅŅиК ŅĐģОвĐŊиĐē Ņ ŅĐŋиŅĐēŅ.
+
+## URL Đ´ĐģŅ OpenAPI
+
+Đа СаĐŧОвŅŅваĐŊĐŊŅĐŧ ŅŅ
ĐĩĐŧа OpenAPI ĐŊадаŅŅŅŅŅ ĐˇĐ° адŅĐĩŅĐžŅ `/openapi.json`.
+
+ĐĐģĐĩ Đи ĐŧĐžĐļĐĩŅĐĩ ĐŊаĐģаŅŅŅваŅи ŅĐĩ Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ ĐŋаŅаĐŧĐĩŅŅа `openapi_url`.
+
+ĐаĐŋŅиĐēĐģад, ŅОй ĐŊаĐģаŅŅŅваŅи ĐšĐžĐŗĐž ĐŊа `/api/v1/openapi.json`:
+
+{* ../../docs_src/metadata/tutorial002.py hl[3] *}
+
+Đ¯ĐēŅĐž Đи Ņ
ĐžŅĐĩŅĐĩ ĐŋОвĐŊŅŅŅŅ Đ˛Đ¸ĐŧĐēĐŊŅŅи ŅŅ
ĐĩĐŧŅ OpenAPI, Đи ĐŧĐžĐļĐĩŅĐĩ вŅŅаĐŊОвиŅи `openapi_url=None`, ŅĐĩ ŅаĐēĐžĐļ виĐŧĐēĐŊĐĩ ŅĐŊŅĐĩŅŅĐĩĐšŅи Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ, ŅĐēŅ ŅŅ Đ˛Đ¸ĐēĐžŅиŅŅОвŅŅŅŅ.
+
+## URL-адŅĐĩŅи Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ĐŊаĐģаŅŅŅваŅи два ŅĐŊŅĐĩŅŅĐĩĐšŅи ĐēĐžŅиŅŅŅваŅа Đ´ĐģŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ, ŅĐēŅ Đ˛ĐēĐģŅŅĐĩĐŊŅ:
+
+* **Swagger UI**: Đ´ĐžŅŅŅĐŋĐŊиК Са адŅĐĩŅĐžŅ `/docs`.
+ * Đи ĐŧĐžĐļĐĩŅĐĩ СĐŧŅĐŊиŅи ĐšĐžĐŗĐž URL Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ ĐŋаŅаĐŧĐĩŅŅа `docs_url`.
+ * Đи ĐŧĐžĐļĐĩŅĐĩ виĐŧĐēĐŊŅŅи ĐšĐžĐŗĐž, вŅŅаĐŊОвивŅи `docs_url=None`.
+* **ReDoc**: Đ´ĐžŅŅŅĐŋĐŊиК Са адŅĐĩŅĐžŅ `/redoc`.
+ * Đи ĐŧĐžĐļĐĩŅĐĩ СĐŧŅĐŊиŅи ĐšĐžĐŗĐž URL Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ ĐŋаŅаĐŧĐĩŅŅа `redoc_url`.
+ * Đи ĐŧĐžĐļĐĩŅĐĩ виĐŧĐēĐŊŅŅи ĐšĐžĐŗĐž, вŅŅаĐŊОвивŅи `redoc_url=None`.
+
+ĐаĐŋŅиĐēĐģад, ŅОй ĐŊаĐģаŅŅŅваŅи Swagger UI ĐŊа `/documentation` Ņ Đ˛Đ¸ĐŧĐēĐŊŅŅи ReDoc:
+
+{* ../../docs_src/metadata/tutorial003.py hl[3] *}
diff --git a/docs/uk/docs/tutorial/middleware.md b/docs/uk/docs/tutorial/middleware.md
new file mode 100644
index 000000000..807be484a
--- /dev/null
+++ b/docs/uk/docs/tutorial/middleware.md
@@ -0,0 +1,75 @@
+# Middleware (ĐŅĐžĐŧŅĐļĐŊиК ŅаŅ)
+
+ĐŖ **FastAPI** ĐŧĐžĐļĐŊа дОдаваŅи middleware (ĐŋŅĐžĐŧŅĐļĐŊиК ŅаŅ).
+
+"Middleware" â ŅĐĩ ŅŅĐŊĐēŅŅŅ, ŅĐēа ĐŋŅаŅŅŅ Đˇ ĐēĐžĐļĐŊиĐŧ **СаĐŋиŅĐžĐŧ** ĐŋĐĩŅĐĩĐ´ ĐšĐžĐŗĐž ОйŅОйĐēĐžŅ ĐąŅĐ´Ņ-ŅĐēĐžŅ ĐēĐžĐŊĐēŅĐĩŅĐŊĐžŅ *ĐžĐŋĐĩŅаŅŅŅŅ ŅĐģŅŅ
Ņ* (*path operation*), а ŅаĐēĐžĐļ С ĐēĐžĐļĐŊĐžŅ **вŅĐ´ĐŋОвŅĐ´Đ´Ņ** ĐŋĐĩŅĐĩĐ´ ŅŅ ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅĐŧ.
+
+* Middleware ĐžŅŅиĐŧŅŅ ĐēĐžĐļĐĩĐŊ **СаĐŋиŅ**, ŅĐž ĐŊадŅ
ОдиŅŅ Đ´Đž ĐаŅĐžĐŗĐž СаŅŅĐžŅŅĐŊĐēŅ.
+* ĐĐžĐļĐĩ виĐēĐžĐŊаŅи ĐŋĐĩвĐŊŅ Đ´ŅŅ ŅС ŅиĐŧ **СаĐŋиŅĐžĐŧ** айО СаĐŋŅŅŅиŅи ĐŊĐĩОйŅ
ŅĐ´ĐŊиК ĐēОд.
+* ĐаĐģŅ ĐŋĐĩŅĐĩĐ´Đ°Ņ **СаĐŋиŅ** Đ´ĐģŅ ĐžĐąŅОйĐēи ĐžŅĐŊОвĐŊиĐŧ СаŅŅĐžŅŅĐŊĐēĐžĐŧ (*ĐžĐŋĐĩŅаŅŅŅŅ ŅĐģŅŅ
Ņ*).
+* ĐŅŅиĐŧŅŅ **вŅĐ´ĐŋОвŅĐ´Ņ**, ŅŅĐžŅĐŧОваĐŊŅ ĐˇĐ°ŅŅĐžŅŅĐŊĐēĐžĐŧ (*ĐžĐŋĐĩŅаŅŅŅŅ ŅĐģŅŅ
Ņ*).
+* ĐĐžĐļĐĩ СĐŧŅĐŊиŅи ŅŅ **вŅĐ´ĐŋОвŅĐ´Ņ** айО виĐēĐžĐŊаŅи дОдаŅĐēОвиК ĐēОд.
+* ĐОвĐĩŅŅĐ°Ņ **вŅĐ´ĐŋОвŅĐ´Ņ** ĐēĐģŅŅĐŊŅŅ.
+
+/// note | ĐĸĐĩŅ
ĐŊŅŅĐŊŅ Đ´ĐĩŅаĐģŅ
+
+Đ¯ĐēŅĐž Ņ ĐĐ°Ņ Ņ ĐˇĐ°ĐģĐĩĐļĐŊĐžŅŅŅ Đˇ `yield`, ĐēОд виŅ
ĐžĐ´Ņ Đ˛Đ¸ĐēĐžĐŊаŅŅŅŅŅ *ĐŋŅŅĐģŅ* middleware.
+
+Đ¯ĐēŅĐž ĐąŅĐģи СаĐŋĐģаĐŊОваĐŊŅ ŅĐžĐŊĐžĐ˛Ņ ĐˇĐ°Đ´Đ°ŅŅ (background tasks - ŅĐžĐˇĐŗĐģŅĐŊŅŅĐž даĐģŅ), вОĐŊи виĐēĐžĐŊаŅŅŅŅŅ *ĐŋŅŅĐģŅ* вŅŅŅ
middleware.
+
+///
+
+## ĐĄŅвОŅĐĩĐŊĐŊŅ middleware
+
+ЊОй ŅŅвОŅиŅи middleware, Đи виĐēĐžŅиŅŅОвŅŅŅĐĩ Đ´ĐĩĐēĐžŅаŅĐžŅ `@app.middleware("http")` ĐŊа ŅŅĐŊĐēŅŅŅ.
+
+ФŅĐŊĐēŅŅŅ middleware ĐžŅŅиĐŧŅŅ:
+
+* `ĐаĐŋиŅ`.
+* ФŅĐŊĐēŅŅŅ `call_next`, ŅĐēа ĐŋŅиКĐŧĐ°Ņ `СаĐŋиŅ` ŅĐē ĐŋаŅаĐŧĐĩŅŅ.
+ * ĐĻŅ ŅŅĐŊĐēŅŅŅ ĐŋĐĩŅĐĩĐ´Đ°Ņ `СаĐŋиŅ` вŅĐ´ĐŋОвŅĐ´ĐŊŅĐš *ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ*.
+ * ĐĐžŅŅĐŧ вОĐŊа ĐŋОвĐĩŅŅĐ°Ņ `вŅĐ´ĐŋОвŅĐ´Ņ`, ĐˇĐŗĐĩĐŊĐĩŅОваĐŊŅ ŅŅŅŅ *ĐžĐŋĐĩŅаŅŅŅŅ ŅĐģŅŅ
Ņ*.
+
+* Đи ĐŧĐžĐļĐĩŅĐĩ ŅĐĩ СĐŧŅĐŊиŅи `вŅĐ´ĐŋОвŅĐ´Ņ` ĐŋĐĩŅĐĩĐ´ ŅиĐŧ, ŅĐē ĐŋОвĐĩŅĐŊŅŅи ŅŅ.
+
+
+{* ../../docs_src/middleware/tutorial001.py hl[8:9,11,14] *}
+
+/// tip | ĐĐžŅада
+
+ĐĐĩ СайŅваКŅĐĩ, ŅĐž вĐģаŅĐŊŅ ĐˇĐ°ĐŗĐžĐģОвĐēи ĐŧĐžĐļĐŊа дОдаваŅи, виĐēĐžŅиŅŅОвŅŅŅи ĐŋŅĐĩŅŅĐēŅ 'X-' .
+
+ĐĐģĐĩ ŅĐēŅĐž Ņ ĐĐ°Ņ Ņ Đ˛ĐģаŅĐŊŅ ĐˇĐ°ĐŗĐžĐģОвĐēи, ŅĐēŅ Đи Ņ
ĐžŅĐĩŅĐĩ, ŅОй ĐąŅаŅСĐĩŅĐŊиК ĐēĐģŅŅĐŊŅ ĐŧŅĐŗ ĐŋОйаŅиŅи, ĐŋĐžŅŅŅĐąĐŊĐž дОдаŅи ŅŅ
Đ´Đž ĐаŅĐžŅ ĐēĐžĐŊŅŅĐŗŅŅаŅŅŅ CORS (див. [CORS (ĐĐąĐŧŅĐŊ ŅĐĩŅŅŅŅаĐŧи ĐŧŅĐļ ŅŅСĐŊиĐŧи Đ´ĐļĐĩŅĐĩĐģаĐŧи)](cors.md){.internal-link target=_blank} Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ ĐŋаŅаĐŧĐĩŅŅа `expose_headers`, ĐžĐŋиŅаĐŊĐžĐŗĐž в Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ Starlette ĐŋĐž CORS .
+
+///
+
+/// note | ĐĸĐĩŅ
ĐŊŅŅĐŊŅ Đ´ĐĩŅаĐģŅ
+
+Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅаŅи `from starlette.requests import Request`.
+
+**FastAPI** ĐŊĐ°Đ´Đ°Ņ ŅĐĩ Đ´ĐģŅ ĐаŅĐžŅ ĐˇŅŅŅĐŊĐžŅŅŅ ŅĐē ŅОСŅОйĐŊиĐēа. ĐĐģĐĩ вŅĐŊ ĐŋĐžŅ
ОдиŅŅ ĐąĐĩСĐŋĐžŅĐĩŅĐĩĐ´ĐŊŅĐž ĐˇŅ Starlette.
+
+///
+
+### ĐĐž Ņ ĐŋŅŅĐģŅ `response`(`вŅĐ´ĐŋОвŅĐ´Ņ`)
+
+Đи ĐŧĐžĐļĐĩŅĐĩ дОдаŅи ĐēОд, ŅĐēиК ĐąŅĐ´Đĩ виĐēĐžĐŊŅваŅиŅŅ Đˇ `СаĐŋиŅĐžĐŧ` (`request`), Đ´Đž ŅĐžĐŗĐž, ŅĐē ĐšĐžĐŗĐž ОйŅОйиŅŅ ĐąŅĐ´Ņ-ŅĐēа *ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ* (*path operation*).
+
+ĐĸаĐēĐžĐļ Đи ĐŧĐžĐļĐĩŅĐĩ дОдаŅи ĐēОд, ŅĐēиК ĐąŅĐ´Đĩ виĐēĐžĐŊŅваŅиŅŅ ĐŋŅŅĐģŅ ŅĐžĐŗĐž, ŅĐē `вŅĐ´ĐŋОвŅĐ´Ņ` (`response`) ĐąŅĐ´Đĩ ĐˇĐŗĐĩĐŊĐĩŅОваĐŊĐž, ĐŋĐĩŅĐĩĐ´ ŅиĐŧ ŅĐē ĐšĐžĐŗĐž ĐŋОвĐĩŅĐŊŅŅи.
+
+ĐаĐŋŅиĐēĐģад, Đи ĐŧĐžĐļĐĩŅĐĩ дОдаŅи вĐģаŅĐŊиК ĐˇĐ°ĐŗĐžĐģОвОĐē `X-Process-Time`, ŅĐēиК ĐŧŅŅŅиŅиĐŧĐĩ ŅĐ°Ņ Ņ ŅĐĩĐēŅĐŊдаŅ
, ŅĐēиК виŅŅаŅивŅŅ ĐŊа ОйŅОйĐēŅ ĐˇĐ°ĐŋиŅŅ Ņа ĐŗĐĩĐŊĐĩŅаŅŅŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ:
+
+{* ../../docs_src/middleware/tutorial001.py hl[10,12:13] *}
+
+
+/// tip | ĐŅĐ´ĐēаСĐēа
+
+ĐĸŅŅ Đŧи виĐēĐžŅиŅŅОвŅŅĐŧĐž `time.perf_counter()` СаĐŧŅŅŅŅ `time.time()` ĐžŅĐēŅĐģŅĐēи вŅĐŊ ĐŧĐžĐļĐĩ ĐąŅŅи ĐąŅĐģŅŅ ŅĐžŅĐŊиĐŧ Đ´ĐģŅ ŅаĐēиŅ
виĐŋадĐēŅв. đ¤
+
+///
+
+## ĐĐŊŅŅ middlewares
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ĐŋŅСĐŊŅŅĐĩ ĐŋŅĐžŅиŅаŅи ĐąŅĐģŅŅĐĩ ĐŋŅĐž ŅĐŊŅŅ middlewares в [Advanced User Guide: Advanced Middleware](../advanced/middleware.md){.internal-link target=_blank}.
+
+Đи Đ´ŅСĐŊаŅŅĐĩŅŅ, ŅĐē ОйŅОйĐģŅŅи CORS Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ middleware в ĐŊаŅŅŅĐŋĐŊĐžĐŧŅ ŅОСдŅĐģŅ.
diff --git a/docs/uk/docs/tutorial/path-params-numeric-validations.md b/docs/uk/docs/tutorial/path-params-numeric-validations.md
new file mode 100644
index 000000000..281ee183c
--- /dev/null
+++ b/docs/uk/docs/tutorial/path-params-numeric-validations.md
@@ -0,0 +1,165 @@
+# Path ĐаŅаĐŧĐĩŅŅи Ņа ваĐģŅдаŅŅŅ ŅиŅĐģОвиŅ
даĐŊиŅ
+
+ĐĸаĐē ŅаĐŧĐž ŅĐē Đи ĐŧĐžĐļĐĩŅĐĩ ĐžĐŗĐžĐģĐžŅŅваŅи дОдаŅĐēĐžĐ˛Ņ ĐŋĐĩŅĐĩвŅŅĐēи Ņа ĐŧĐĩŅадаĐŊŅ Đ´ĐģŅ query ĐŋаŅаĐŧĐĩŅŅŅв Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ `Query`, Đи ĐŧĐžĐļĐĩŅĐĩ ĐžĐŗĐžĐģĐžŅŅваŅи ŅОК ŅаĐŧиК ŅиĐŋ ĐŋĐĩŅĐĩвŅŅĐžĐē Ņ ĐŧĐĩŅадаĐŊиŅ
Đ´ĐģŅ ĐŋаŅаĐŧĐĩŅŅŅв ŅĐģŅŅ
Ņ ĐˇĐ° Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ `Path`.
+
+## ĐĐŧĐŋĐžŅŅ Path
+
+ĐĄĐŋĐžŅаŅĐēŅ ŅĐŧĐŋĐžŅŅŅĐšŅĐĩ `Path` С `fastapi` Ņ ŅĐŧĐŋĐžŅŅŅĐšŅĐĩ `Annotated`:
+
+{* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[1,3] *}
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+FastAPI дОдав ĐŋŅĐ´ŅŅиĐŧĐēŅ `Annotated` (Ņ ĐŋĐžŅав ŅĐĩĐēĐžĐŧĐĩĐŊĐ´ŅваŅи ĐšĐžĐŗĐž виĐēĐžŅиŅŅаĐŊĐŊŅ) Ņ Đ˛ĐĩŅŅŅŅ 0.95.0.
+
+Đ¯ĐēŅĐž Ņ ĐĐ°Ņ ŅŅаŅа вĐĩŅŅŅŅ, ĐŋŅи ŅĐŋŅĐžĐąŅ Đ˛Đ¸ĐēĐžŅиŅŅаŅи `Annotated` ĐŧĐžĐļŅŅŅ Đ˛Đ¸ĐŊиĐēаŅи ĐŋĐžĐŧиĐģĐēи.
+
+ĐĐĩŅĐĩĐēĐžĐŊаКŅĐĩŅŅ, ŅĐž Đи [ĐžĐŊОвиĐģи вĐĩŅŅŅŅ FastAPI](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank} ĐŋŅиĐŊаКĐŧĐŊŅ Đ´Đž вĐĩŅŅŅŅ 0.95.1 ĐŋĐĩŅĐĩĐ´ виĐēĐžŅиŅŅаĐŊĐŊŅĐŧ `Annotated`.
+
+///
+
+## ĐĐŗĐžĐģĐžŅĐĩĐŊĐŊŅ ĐŧĐĩŅадаĐŊиŅ
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ĐžĐŗĐžĐģĐžŅŅваŅи вŅŅ ŅŅ Đļ ĐŋаŅаĐŧĐĩŅŅи, ŅĐž Ņ Đ´ĐģŅ `Query`.
+
+ĐаĐŋŅиĐēĐģад, ŅОй ĐžĐŗĐžĐģĐžŅиŅи СĐŊаŅĐĩĐŊĐŊŅ ĐŧĐĩŅадаĐŊиŅ
`title` Đ´ĐģŅ ĐŋаŅаĐŧĐĩŅŅа ŅĐģŅŅ
Ņ `item_id`, Đи ĐŧĐžĐļĐĩŅĐĩ ĐŊаĐŋиŅаŅи:
+
+{* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[10] *}
+
+/// note | ĐŅиĐŧŅŅĐēа
+
+ĐаŅаĐŧĐĩŅŅ ŅĐģŅŅ
Ņ ĐˇĐ°Đ˛Đļди Ņ ĐžĐąĐžĐ˛âŅСĐēОвиĐŧ, ĐžŅĐēŅĐģŅĐēи вŅĐŊ ĐŧĐ°Ņ ĐąŅŅи ŅаŅŅиĐŊĐžŅ ŅĐģŅŅ
Ņ. ĐавŅŅŅ ŅĐēŅĐž Đи ĐžĐŗĐžĐģĐžŅиŅĐĩ ĐšĐžĐŗĐž ĐˇŅ ĐˇĐŊаŅĐĩĐŊĐŊŅĐŧ `None` айО вŅŅаĐŊОвиŅĐĩ СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ â вŅĐŊ вŅĐĩ ОдĐŊĐž СаĐģиŅаŅиĐŧĐĩŅŅŅŅ ĐžĐąĐžĐ˛âŅСĐēОвиĐŧ.
+
+///
+
+## ĐŖĐŋĐžŅŅĐ´ĐēОвŅĐšŅĐĩ ĐŋаŅаĐŧĐĩŅŅи, ŅĐē ĐаĐŧ ĐŋĐžŅŅŅĐąĐŊĐž
+
+/// tip | ĐŅĐ´ĐēаСĐēа
+
+ĐĻĐĩ, ĐŧайŅŅŅ, ĐŊĐĩ ĐŊаŅŅŅĐģŅĐēи ваĐļĐģивО айО ĐŊĐĩОйŅ
ŅĐ´ĐŊĐž, ŅĐēŅĐž Đи виĐēĐžŅиŅŅОвŅŅŅĐĩ `Annotated`.
+
+///
+
+ĐŅиĐŋŅŅŅиĐŧĐž, Đи Ņ
ĐžŅĐĩŅĐĩ ĐžĐŗĐžĐģĐžŅиŅи ĐŋаŅаĐŧĐĩŅŅ ĐˇĐ°ĐŋиŅŅ `q` ŅĐē ОйОвâŅСĐēОвиК `str`.
+
+Đ ĐаĐŧ ĐŊĐĩ ĐŋĐžŅŅŅĐąĐŊĐž ĐžĐŗĐžĐģĐžŅŅваŅи ĐŊŅŅĐžĐŗĐž ŅĐŊŅĐžĐŗĐž Đ´ĐģŅ ŅŅĐžĐŗĐž ĐŋаŅаĐŧĐĩŅŅа, ŅĐžĐŧŅ ĐŊĐĩĐŧĐ°Ņ ĐŋĐžŅŅĐĩйи виĐēĐžŅиŅŅОвŅваŅи `Query`.
+
+ĐĐģĐĩ ĐаĐŧ вŅĐĩ ОдĐŊĐž ĐŋĐžŅŅŅĐąĐŊĐž виĐēĐžŅиŅŅОвŅваŅи `Path` Đ´ĐģŅ ĐŋаŅаĐŧĐĩŅŅа ŅĐģŅŅ
Ņ `item_id`. РС ĐŋĐĩвĐŊиŅ
ĐŋŅиŅиĐŊ Đи ĐŊĐĩ Ņ
ĐžŅĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи `Annotated`.
+
+Python видаŅŅŅ ĐŋĐžĐŧиĐģĐēŅ, ŅĐēŅĐž ŅОСĐŧŅŅŅиŅи СĐŊаŅĐĩĐŊĐŊŅ Đˇ "default" ĐŋĐĩŅĐĩĐ´ СĐŊаŅĐĩĐŊĐŊŅĐŧ, ŅĐēĐĩ ĐŊĐĩ ĐŧĐ°Ņ "default".
+
+ĐĐģĐĩ Đи ĐŧĐžĐļĐĩŅĐĩ СĐŧŅĐŊиŅи ĐŋĐžŅŅĐ´ĐžĐē Ņ ŅОСĐŧŅŅŅиŅи СĐŊаŅĐĩĐŊĐŊŅ ĐąĐĩС СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ (ĐŋаŅаĐŧĐĩŅŅ ĐˇĐ°ĐŋиŅŅ `q`) ĐŋĐĩŅŅиĐŧ.
+
+
+ĐĐģŅ **FastAPI** ĐŋĐžŅŅĐ´ĐžĐē ĐŊĐĩ ĐŧĐ°Ņ ĐˇĐŊаŅĐĩĐŊĐŊŅ. ĐŅĐŊ виСĐŊаŅĐ°Ņ ĐŋаŅаĐŧĐĩŅŅи Са ŅŅ
ŅĐŧĐĩĐŊаĐŧи, ŅиĐŋаĐŧи Ņа СĐŊаŅĐĩĐŊĐŊŅĐŧи Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ (`Query`, `Path` ŅĐžŅĐž) Ņ ĐŊĐĩ СвĐĩŅŅĐ°Ņ ŅĐ˛Đ°ĐŗĐ¸ ĐŊа ĐŋĐžŅŅĐ´ĐžĐē.
+
+ĐĸĐžĐŧŅ Đи ĐŧĐžĐļĐĩŅĐĩ ĐžĐŗĐžĐģĐžŅиŅи ĐаŅŅ ŅŅĐŊĐēŅŅŅ ŅаĐē:
+
+//// tab | Python 3.8 non-Annotated
+
+/// tip | ĐŅĐ´ĐēаСĐēа
+
+Đа ĐŧĐžĐļĐģивОŅŅŅ Đ˛ŅддаваКŅĐĩ ĐŋĐĩŅĐĩĐ˛Đ°ĐŗŅ Đ˛ĐĩŅŅŅŅ Đˇ виĐēĐžŅиŅŅаĐŊĐŊŅĐŧ `Annotated`.
+
+///
+
+{* ../../docs_src/path_params_numeric_validations/tutorial002.py hl[7] *}
+
+////
+
+ĐĐģĐĩ ĐŧаКŅĐĩ ĐŊа ŅваСŅ, ŅĐž ŅĐēŅĐž Đи виĐēĐžŅиŅŅОвŅŅŅĐĩ `Annotated`, ŅŅ ĐŋŅОйĐģĐĩĐŧа ĐŊĐĩ виĐŊиĐēĐŊĐĩ, ĐžŅĐēŅĐģŅĐēи Đи ĐŊĐĩ виĐēĐžŅиŅŅОвŅŅŅĐĩ СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ Đ´ĐģŅ ĐŋаŅаĐŧĐĩŅŅŅв `Query()` айО `Path()`.
+
+{* ../../docs_src/path_params_numeric_validations/tutorial002_an_py39.py *}
+
+## ĐŖĐŋĐžŅŅĐ´ĐēОвŅĐšŅĐĩ ĐŋаŅаĐŧĐĩŅŅи Са ĐŋĐžŅŅĐĩйОŅ, Ņ
иŅŅĐžŅŅ
+
+/// tip | ĐŅĐ´ĐēаСĐēа
+
+ĐĻĐĩ, ĐŧайŅŅŅ, ĐŊĐĩ ĐŊаŅŅŅĐģŅĐēи ваĐļĐģивО айО ĐŊĐĩОйŅ
ŅĐ´ĐŊĐž, ŅĐēŅĐž Đи виĐēĐžŅиŅŅОвŅŅŅĐĩ `Annotated`.
+
+///
+
+ĐŅŅ **ĐŊĐĩвĐĩĐģиĐēа Ņ
иŅŅŅŅŅŅ**, ŅĐēа ĐŧĐžĐļĐĩ ŅŅаŅи в ĐŋŅĐ¸ĐŗĐžĐ´Ņ, Ņ
ĐžŅа вОĐŊа ŅŅĐ´ĐēĐž СĐŊадОйиŅŅŅŅ.
+
+Đ¯ĐēŅĐž Đи Ņ
ĐžŅĐĩŅĐĩ:
+
+* ĐžĐŗĐžĐģĐžŅиŅи ĐŋаŅаĐŧĐĩŅŅ ĐˇĐ°ĐŋиŅŅ `q` ĐąĐĩС виĐēĐžŅиŅŅаĐŊĐŊŅ `Query` айО СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ
+* ĐžĐŗĐžĐģĐžŅиŅи ĐŋаŅаĐŧĐĩŅŅ ŅĐģŅŅ
Ņ `item_id`, виĐēĐžŅиŅŅОвŅŅŅи `Path`
+* ŅОСĐŧŅŅŅиŅи ŅŅ
Ņ ŅŅСĐŊĐžĐŧŅ ĐŋĐžŅŅĐ´ĐēŅ
+* ĐŊĐĩ виĐēĐžŅиŅŅОвŅваŅи `Annotated`
+
+...Ņ Python Ņ ŅĐŋĐĩŅŅаĐģŅĐŊиК ŅиĐŊŅаĐēŅĐ¸Ņ Đ´ĐģŅ ŅŅĐžĐŗĐž.
+
+ĐĐĩŅĐĩдаКŅĐĩ `*` ŅĐē ĐŋĐĩŅŅиК ĐŋаŅаĐŧĐĩŅŅ ŅŅĐŊĐēŅŅŅ.
+
+Python ĐŊŅŅĐžĐŗĐž ĐŊĐĩ СŅОйиŅŅ ŅС ŅŅŅŅ `*`, аĐģĐĩ ŅОСĐŋŅСĐŊаŅ, ŅĐž вŅŅ ĐŊаŅŅŅĐŋĐŊŅ ĐŋаŅаĐŧĐĩŅŅи ŅĐģŅĐ´ виĐēĐģиĐēаŅи ŅĐē аŅĐŗŅĐŧĐĩĐŊŅи Са ĐēĐģŅŅОвиĐŧ ŅĐģОвОĐŧ (ĐŋаŅи ĐēĐģŅŅ-СĐŊаŅĐĩĐŊĐŊŅ), ŅаĐēĐžĐļ вŅĐ´ĐžĐŧŅ ŅĐē kwargs
. ĐавŅŅŅ ŅĐēŅĐž вОĐŊи ĐŊĐĩ ĐŧаŅŅŅ ĐˇĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ.
+
+{* ../../docs_src/path_params_numeric_validations/tutorial003.py hl[7] *}
+
+### ĐŅаŅĐĩ С `Annotated`
+
+ĐаКŅĐĩ ĐŊа ŅваСŅ, ŅĐēŅĐž Đи виĐēĐžŅиŅŅОвŅŅŅĐĩ `Annotated`, ĐžŅĐēŅĐģŅĐēи Đи ĐŊĐĩ виĐēĐžŅиŅŅОвŅŅŅĐĩ СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ Đ´ĐģŅ ĐŋаŅаĐŧĐĩŅŅŅв ŅŅĐŊĐēŅŅŅ, ŅŅŅŅ ĐŋŅОйĐģĐĩĐŧи ĐŊĐĩ виĐŊиĐēĐŊĐĩ, Ņ, ŅвидŅĐĩ Са вŅĐĩ, ĐаĐŧ ĐŊĐĩ ĐŋĐžŅŅŅĐąĐŊĐž ĐąŅĐ´Đĩ виĐēĐžŅиŅŅОвŅваŅи `*`.
+
+{* ../../docs_src/path_params_numeric_validations/tutorial003_an_py39.py hl[10] *}
+
+## ĐаĐģŅдаŅŅŅ ŅиŅĐģОвиŅ
даĐŊиŅ
: ĐąŅĐģŅŅĐĩ айО Đ´ĐžŅŅвĐŊŅŅ
+
+Đа Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ `Query` Ņ `Path` (Ņа ŅĐŊŅиŅ
, ŅĐēŅ Đи ĐŋОйаŅиŅĐĩ ĐŋŅСĐŊŅŅĐĩ) ĐŧĐžĐļĐŊа ĐžĐŗĐžĐģĐžŅŅваŅи ŅиŅĐģĐžĐ˛Ņ ĐžĐąĐŧĐĩĐļĐĩĐŊĐŊŅ.
+
+ĐĸŅŅ, СавдŅĐēи `ge=1`, `item_id` ĐŧĐ°Ņ ĐąŅŅи ŅŅĐģиĐŧ ŅиŅĐģĐžĐŧ, ŅĐēĐĩ "`g`reater than or `e`qual" (ĐąŅĐģŅŅĐĩ айО Đ´ĐžŅŅвĐŊŅŅ) `1`.
+
+{* ../../docs_src/path_params_numeric_validations/tutorial004_an_py39.py hl[10] *}
+
+## ĐаĐģŅдаŅŅŅ ŅиŅĐģОвиŅ
даĐŊиŅ
: ĐąŅĐģŅŅĐĩ ĐŊŅĐļ Ņ ĐŧĐĩĐŊŅĐĩ айО Đ´ĐžŅŅвĐŊŅŅ
+
+ĐĸĐĩ ŅаĐŧĐĩ СаŅŅĐžŅОвŅŅŅŅŅŅ Đ´Đž:
+
+* `gt`: `g`reater `t`han (ĐąŅĐģŅŅĐĩ ĐŊŅĐļ)
+* `le`: `l`ess than or `e`qual (ĐŧĐĩĐŊŅĐĩ айО Đ´ĐžŅŅвĐŊŅŅ)
+
+{* ../../docs_src/path_params_numeric_validations/tutorial005_an_py39.py hl[10] *}
+
+## ĐаĐģŅдаŅŅŅ ŅиŅĐģОвиŅ
даĐŊиŅ
: float, ĐąŅĐģŅŅĐĩ ĐŊŅĐļ Ņ ĐŧĐĩĐŊŅĐĩ ĐŊŅĐļ
+
+ĐаĐģŅдаŅŅŅ ŅиŅĐĩĐģ ŅаĐēĐžĐļ ĐŋŅаŅŅŅ Đ´ĐģŅ ĐˇĐŊаŅĐĩĐŊŅ ŅиĐŋŅ `float`.
+
+ĐŅŅ Đ´Đĩ ŅŅĐ°Ņ Đ˛Đ°ĐļĐģивО ĐŧаŅи ĐŧĐžĐļĐģивŅŅŅŅ ĐžĐŗĐžĐģĐžŅŅваŅи gt
, а ĐŊĐĩ ŅŅĐģŅĐēи ge
. ĐĻĐĩ дОСвОĐģŅŅ, ĐŊаĐŋŅиĐēĐģад, виĐŧĐ°ĐŗĐ°Ņи, ŅОй СĐŊаŅĐĩĐŊĐŊŅ ĐąŅĐģĐž ĐąŅĐģŅŅĐĩ `0`, ĐŊавŅŅŅ ŅĐēŅĐž вОĐŊĐž ĐŧĐĩĐŊŅĐĩ `1`.
+
+ĐĸаĐēиĐŧ ŅиĐŊĐžĐŧ, СĐŊаŅĐĩĐŊĐŊŅ `0.5` ĐąŅĐ´Đĩ Đ´ĐžĐŋŅŅŅиĐŧиĐŧ. ĐĐģĐĩ `0.0` айО `0` â ĐŊŅ.
+
+ĐĸĐĩ ŅаĐŧĐĩ ŅŅĐžŅŅŅŅŅŅŅ lt
.
+
+{* ../../docs_src/path_params_numeric_validations/tutorial006_an_py39.py hl[13] *}
+
+## ĐŅĐ´ŅŅĐŧĐžĐē
+
+Đа Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ `Query`, `Path` (Ņ ŅĐŊŅиŅ
ĐŋаŅаĐŧĐĩŅŅŅв, ŅĐēŅ Đи ŅĐĩ ĐŊĐĩ йаŅиĐģи) ĐŧĐžĐļĐŊа ĐžĐŗĐžĐģĐžŅŅваŅи ĐŧĐĩŅадаĐŊŅ Ņа ĐŋĐĩŅĐĩвŅŅĐēи ŅŅĐ´ĐēŅв, ŅаĐē ŅаĐŧĐž ŅĐē Ņ [Query ĐŋаŅаĐŧĐĩŅŅи Ņа ваĐģŅдаŅŅŅ ŅŅĐ´ĐēŅв](query-params-str-validations.md){.internal-link target=_blank}.
+
+ĐĸаĐēĐžĐļ ĐŧĐžĐļĐŊа ĐžĐŗĐžĐģĐžŅŅваŅи ŅиŅĐģĐžĐ˛Ņ ĐŋĐĩŅĐĩвŅŅĐēи:
+
+* `gt`: `g`reater `t`han (ĐąŅĐģŅŅĐĩ ĐŊŅĐļ)
+* `ge`: `g`reater than or `e`qual (ĐąŅĐģŅŅĐĩ айО Đ´ĐžŅŅвĐŊŅŅ)
+* `lt`: `l`ess `t`han (ĐŧĐĩĐŊŅĐĩ ĐŊŅĐļ)
+* `le`: `l`ess than or `e`qual (ĐŧĐĩĐŊŅĐĩ айО Đ´ĐžŅŅвĐŊŅŅ)
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+`Query`, `Path` Ņа ŅĐŊŅŅ ĐēĐģаŅи, ŅĐēŅ Đи ĐŋОйаŅиŅĐĩ ĐŋŅСĐŊŅŅĐĩ, Ņ ĐŋŅĐ´ĐēĐģаŅаĐŧи ŅĐŋŅĐģŅĐŊĐžĐŗĐž ĐēĐģаŅŅ `Param`.
+
+ĐŅŅ Đ˛ĐžĐŊи ĐŧаŅŅŅ ĐžĐ´ĐŊаĐēĐžĐ˛Ņ ĐŋаŅаĐŧĐĩŅŅи Đ´ĐģŅ Đ´ĐžĐ´Đ°ŅĐēОвиŅ
ĐŋĐĩŅĐĩвŅŅĐžĐē Ņ ĐŧĐĩŅадаĐŊиŅ
, ŅĐēŅ Đи вĐļĐĩ йаŅиĐģи.
+
+///
+
+/// note | ĐĸĐĩŅ
ĐŊŅŅĐŊŅ Đ´ĐĩŅаĐģŅ
+
+ĐĐžĐģи Đи ŅĐŧĐŋĐžŅŅŅŅŅĐĩ `Query`, `Path` Ņа ŅĐŊŅŅ Đˇ `fastapi`, ĐŊаŅĐŋŅĐ°Đ˛Đ´Ņ ŅĐĩ ŅŅĐŊĐēŅŅŅ.
+
+ĐŅи виĐēĐģиĐēŅ Đ˛ĐžĐŊи ĐŋОвĐĩŅŅаŅŅŅ ĐĩĐēСĐĩĐŧĐŋĐģŅŅи ĐēĐģаŅŅв С ŅаĐēиĐŧи Đļ ŅĐŧĐĩĐŊаĐŧи.
+
+ĐĸОйŅĐž Đи ŅĐŧĐŋĐžŅŅŅŅŅĐĩ `Query`, ŅĐēа Ņ ŅŅĐŊĐēŅŅŅŅ. Đ ĐēĐžĐģи Đи ŅŅ Đ˛Đ¸ĐēĐģиĐēаŅŅĐĩ, вОĐŊа ĐŋОвĐĩŅŅĐ°Ņ ĐĩĐēСĐĩĐŧĐŋĐģŅŅ ĐēĐģаŅŅ, ŅĐēиК ŅĐĩĐļ ĐŊаСиваŅŅŅŅŅ `Query`.
+
+ĐĻŅ ŅŅĐŊĐēŅŅŅ ŅŅвОŅĐĩĐŊŅ ŅаĐēиĐŧ ŅиĐŊĐžĐŧ (СаĐŧŅŅŅŅ Đ˛Đ¸ĐēĐžŅиŅŅаĐŊĐŊŅ ĐēĐģаŅŅв ĐŊаĐŋŅŅĐŧŅ), ŅОй ĐĐ°Ņ ŅĐĩдаĐēŅĐžŅ ĐŊĐĩ вŅдСĐŊаŅав ŅŅ
ĐŊŅ ŅиĐŋи ŅĐē ĐŋĐžĐŧиĐģĐēи.
+
+ĐĸаĐēиĐŧ ŅиĐŊĐžĐŧ, Đи ĐŧĐžĐļĐĩŅĐĩ ĐēĐžŅиŅŅŅваŅиŅŅ ŅвОŅĐŧ СвиŅаКĐŊиĐŧ ŅĐĩдаĐēŅĐžŅĐžĐŧ Ņ ŅĐŊŅŅŅŅĐŧĐĩĐŊŅаĐŧи Đ´ĐģŅ ĐŋŅĐžĐŗŅаĐŧŅваĐŊĐŊŅ ĐąĐĩС дОдаŅĐēОвиŅ
ĐŊаĐģаŅŅŅваĐŊŅ Đ´ĐģŅ ŅĐŗĐŊĐžŅŅваĐŊĐŊŅ ŅаĐēиŅ
ĐŋĐžĐŧиĐģĐžĐē.
+
+///
diff --git a/docs/uk/docs/tutorial/query-param-models.md b/docs/uk/docs/tutorial/query-param-models.md
new file mode 100644
index 000000000..97eb82fa1
--- /dev/null
+++ b/docs/uk/docs/tutorial/query-param-models.md
@@ -0,0 +1,68 @@
+# ĐОдĐĩĐģŅ Query ĐŋаŅаĐŧĐĩŅŅŅв
+
+Đ¯ĐēŅĐž Ņ ĐĐ°Ņ Ņ ĐŗŅŅĐŋа **query ĐŋаŅаĐŧĐĩŅŅŅв**, ŅĐēŅ ĐŋОвâŅСаĐŊŅ ĐŧŅĐļ ŅОйОŅ, Đи ĐŧĐžĐļĐĩŅĐĩ ŅŅвОŅиŅи **Pydantic-ĐŧОдĐĩĐģŅ** Đ´ĐģŅ ŅŅ
ĐžĐŗĐžĐģĐžŅĐĩĐŊĐŊŅ.
+
+ĐĻĐĩ дОСвОĐģиŅŅ ĐаĐŧ **ĐŋОвŅĐžŅĐŊĐž виĐēĐžŅиŅŅОвŅваŅи ĐŧОдĐĩĐģŅ** Ņ **ŅŅСĐŊиŅ
ĐŧŅŅŅŅŅ
**, а ŅаĐēĐžĐļ ĐžĐŗĐžĐģĐžŅŅваŅи ĐŋĐĩŅĐĩвŅŅĐēи Ņа ĐŧĐĩŅадаĐŊŅ Đ´ĐģŅ Đ˛ŅŅŅ
ĐŋаŅаĐŧĐĩŅŅŅв ОдĐŊĐžŅаŅĐŊĐž. đ
+
+/// note | ĐŅиĐŧŅŅĐēа
+
+ĐĻŅ ĐŧĐžĐļĐģивŅŅŅŅ ĐŋŅĐ´ŅŅиĐŧŅŅŅŅŅŅ, ĐŋĐžŅиĐŊаŅŅи С вĐĩŅŅŅŅ FastAPI `0.115.0`. đ¤
+
+///
+
+## Query ĐŋаŅаĐŧĐĩŅŅи С Pydantic-ĐŧОдĐĩĐģĐģŅ
+
+ĐĐŗĐžĐģĐžŅŅŅŅ **query ĐŋаŅаĐŧĐĩŅŅи**, ŅĐēŅ ĐаĐŧ ĐŋĐžŅŅŅĐąĐŊŅ, Ņ **Pydantic-ĐŧОдĐĩĐģŅ**, а ĐŋĐžŅŅĐŧ ĐžĐŗĐžĐģĐžŅŅŅŅ ŅĐĩĐš ĐŋаŅаĐŧĐĩŅŅ ŅĐē `Query`:
+
+{* ../../docs_src/query_param_models/tutorial001_an_py310.py hl[9:13,17] *}
+
+**FastAPI** ĐąŅĐ´Đĩ **виŅŅĐŗŅваŅи** даĐŊŅ Đ´ĐģŅ **ĐēĐžĐļĐŊĐžĐŗĐž ĐŋĐžĐģŅ** С **query ĐŋаŅаĐŧĐĩŅŅŅв** Ņ ĐˇĐ°ĐŋиŅŅ Ņа ĐŋĐĩŅĐĩдаваŅи ŅŅ
Ņ Đ˛Đ¸ĐˇĐŊаŅĐĩĐŊŅ Đ˛Đ°Đŧи Pydantic-ĐŧОдĐĩĐģŅ.
+
+## ĐĐĩŅĐĩвŅŅŅĐĩ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ĐŋОйаŅиŅи ĐŋаŅаĐŧĐĩŅŅи СаĐŋиŅŅ Đ˛ UI Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ ĐˇĐ° `/docs`:
+
+
+
+
+
+## ĐайОŅĐžĐŊа СаКвиŅ
Query ĐŋаŅаĐŧĐĩŅŅŅв
+
+ĐŖ Đ´ĐĩŅĐēиŅ
ĐžŅОйĐģивиŅ
виĐŋадĐēаŅ
(ĐšĐŧОвŅŅĐŊĐž, ĐŊĐĩ Đ´ŅĐļĐĩ ĐŋĐžŅиŅĐĩĐŊиŅ
) Đи ĐŧĐžĐļĐĩŅĐĩ СаŅ
ĐžŅŅŅи **ОйĐŧĐĩĐļиŅи** query ĐŋаŅаĐŧĐĩŅŅи, ŅĐēŅ Đ´ĐžĐˇĐ˛ĐžĐģĐĩĐŊĐž ĐžŅŅиĐŧŅваŅи.
+
+Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅаŅи ĐēĐžĐŊŅŅĐŗŅŅаŅŅŅ ĐŧОдĐĩĐģŅ Pydantic, ŅОй СайОŅĐžĐŊиŅи (`forbid`) ĐąŅĐ´Ņ-ŅĐēŅ ĐˇĐ°ĐšĐ˛Ņ (`extra`) ĐŋĐžĐģŅ:
+
+{* ../../docs_src/query_param_models/tutorial002_an_py310.py hl[10] *}
+
+Đ¯ĐēŅĐž ĐēĐģŅŅĐŊŅ ŅĐŋŅОйŅŅ ĐŊадŅŅĐģаŅи **СаКвŅ** даĐŊŅ Ņ **query ĐŋаŅаĐŧĐĩŅŅаŅ
**, вŅĐŊ ĐžŅŅиĐŧĐ°Ņ **ĐŋĐžĐŧиĐģĐēŅ**.
+
+ĐаĐŋŅиĐēĐģад, ŅĐēŅĐž ĐēĐģŅŅĐŊŅ ŅĐŋŅОйŅŅ ĐŊадŅŅĐģаŅи query ĐŋаŅаĐŧĐĩŅŅ `tool` ĐˇŅ ĐˇĐŊаŅĐĩĐŊĐŊŅĐŧ `plumbus`, ŅĐē Ņ ŅŅĐžĐŧŅ ĐˇĐ°ĐŋиŅŅ:
+
+```http
+https://example.com/items/?limit=10&tool=plumbus
+```
+
+ĐŅĐŊ ĐžŅŅиĐŧĐ°Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ Đˇ **ĐŋĐžĐŧиĐģĐēĐžŅ**, ŅĐēа ĐŋОвŅĐ´ĐžĐŧиŅŅ, ŅĐž query ĐŋаŅаĐŧĐĩŅŅ `tool ` ĐŊĐĩ дОСвОĐģĐĩĐŊĐž:
+
+```json
+{
+ "detail": [
+ {
+ "type": "extra_forbidden",
+ "loc": ["query", "tool"],
+ "msg": "Extra inputs are not permitted",
+ "input": "plumbus"
+ }
+ ]
+}
+```
+
+## ĐŅĐ´ŅŅĐŧĐžĐē
+
+Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи **Pydantic-ĐŧОдĐĩĐģŅ** Đ´ĐģŅ ĐžĐŗĐžĐģĐžŅĐĩĐŊĐŊŅ **query ĐŋаŅаĐŧĐĩŅŅŅв** Ņ **FastAPI**. đ
+
+/// tip | ĐŅĐ´ĐēаСĐēа
+
+ĐĄĐŋОКĐģĐĩŅ: Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи Pydantic-ĐŧОдĐĩĐģŅ Đ´ĐģŅ ĐžĐŗĐžĐģĐžŅĐĩĐŊĐŊŅ cookie Ņа ĐˇĐ°ĐŗĐžĐģОвĐēŅв, аĐģĐĩ ĐŋŅĐž ŅĐĩ Đи Đ´ŅСĐŊаŅŅĐĩŅŅ ĐŋŅСĐŊŅŅĐĩ в ŅŅĐžĐŧŅ ĐŋĐžŅŅĐąĐŊиĐēŅ. đ¤Ģ
+
+///
diff --git a/docs/uk/docs/tutorial/query-params-str-validations.md b/docs/uk/docs/tutorial/query-params-str-validations.md
new file mode 100644
index 000000000..cd3f4ad93
--- /dev/null
+++ b/docs/uk/docs/tutorial/query-params-str-validations.md
@@ -0,0 +1,491 @@
+# Query ĐŋаŅаĐŧĐĩŅŅи Ņа ваĐģŅдаŅŅŅ ŅŅĐ´ĐēŅв
+
+**FastAPI** дОСвОĐģŅŅ ĐžĐŗĐžĐģĐžŅŅваŅи дОдаŅĐēĐžĐ˛Ņ ŅĐŊŅĐžŅĐŧаŅŅŅ Ņа виĐēĐžĐŊŅваŅи ваĐģŅдаŅŅŅ Đ´ĐģŅ ĐаŅиŅ
ĐŋаŅаĐŧĐĩŅŅŅв.
+
+Đ ĐžĐˇĐŗĐģŅĐŊĐĩĐŧĐž ŅĐĩĐš дОдаŅĐžĐē ŅĐē ĐŋŅиĐēĐģад:
+
+{* ../../docs_src/query_params_str_validations/tutorial001_py310.py hl[7] *}
+
+Query ĐŋаŅаĐŧĐĩŅŅ `q` ĐŧĐ°Ņ ŅиĐŋ `str | None`, ŅĐž ОСĐŊаŅаŅ, ŅĐž вŅĐŊ ĐŧĐžĐļĐĩ ĐąŅŅи ŅĐē `str`, ŅаĐē Ņ `None`. Đа СаĐŧОвŅŅваĐŊĐŊŅĐŧ вŅĐŊ ĐŧĐ°Ņ ĐˇĐŊаŅĐĩĐŊĐŊŅ `None`, ŅĐžĐŧŅ FastAPI ŅОСŅĐŧŅŅ, ŅĐž ŅĐĩĐš ĐŋаŅаĐŧĐĩŅŅ ĐŊĐĩ Ņ ĐžĐąĐžĐ˛'ŅСĐēОвиĐŧ.
+
+/// note | ĐŅиĐŧŅŅĐēа
+
+FastAPI СĐŊаŅ, ŅĐž `q` ĐŊĐĩ Ņ ĐžĐąĐžĐ˛âŅСĐēОвиĐŧ, СавдŅĐēи СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ `= None`.
+
+ĐиĐēĐžŅиŅŅаĐŊĐŊŅ `str | None` дОСвОĐģиŅŅ ĐаŅĐžĐŧŅ ŅĐĩдаĐēŅĐžŅŅ ĐēĐžĐ´Ņ ĐŊадаваŅи ĐēŅаŅŅ ĐŋŅĐ´ŅŅиĐŧĐēŅ Ņа виŅвĐģŅŅи ĐŋĐžĐŧиĐģĐēи.
+
+///
+
+## ĐОдаŅĐēОва ваĐģŅдаŅŅŅ
+
+Đи Ņ
ĐžŅĐĩĐŧĐž, ŅОй ĐŊавŅŅŅ ŅĐēŅĐž `q` Ņ ĐŊĐĩОйОвâŅСĐēОвиĐŧ, **ĐšĐžĐŗĐž дОвĐļиĐŊа ĐŊĐĩ ĐŋĐĩŅĐĩвиŅŅваĐģа 50 ŅиĐŧвОĐģŅв**, ŅĐēŅĐž вŅĐŊ вŅĐĩ Đļ ĐąŅĐ´Đĩ ĐŋĐĩŅĐĩдаĐŊиК.
+
+### ĐĐŧĐŋĐžŅŅ `Query` Ņа `Annotated`
+
+ЊОй ŅĐĩ СŅОйиŅи, ŅĐŋĐžŅаŅĐēŅ ŅĐŧĐŋĐžŅŅŅŅĐŧĐž:
+
+* `Query` С `fastapi`
+* `Annotated` С `typing`
+
+{* ../../docs_src/query_params_str_validations/tutorial002_an_py310.py hl[1,3] *}
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+FastAPI дОдав ĐŋŅĐ´ŅŅиĐŧĐēŅ `Annotated` (Ņ ĐŋĐžŅав ŅĐĩĐēĐžĐŧĐĩĐŊĐ´ŅваŅи ĐšĐžĐŗĐž) Ņ Đ˛ĐĩŅŅŅŅ 0.95.0.
+
+Đ¯ĐēŅĐž Ņ ĐĐ°Ņ ŅŅаŅŅŅа вĐĩŅŅŅŅ, ĐŋŅĐ´ ŅĐ°Ņ Đ˛Đ¸ĐēĐžŅиŅŅаĐŊĐŊŅ `Annotated` ĐŧĐžĐļŅŅŅ Đ˛Đ¸ĐŊиĐēаŅи ĐŋĐžĐŧиĐģĐēи.
+
+ĐĐĩŅĐĩĐēĐžĐŊаКŅĐĩŅŅ, ŅĐž Đи [ĐžĐŊОвиĐģи вĐĩŅŅŅŅ FastAPI](../deployment/versions.md#upgrading-the-fastapi-versions){.internal-link target=_blank} Đ´Đž ĐŋŅиĐŊаКĐŧĐŊŅ 0.95.1, ĐŋĐĩŅŅ ĐŊŅĐļ виĐēĐžŅиŅŅОвŅваŅи `Annotated`.
+
+///
+
+## ĐиĐēĐžŅиŅŅаĐŊĐŊŅ `Annotated` Ņ ŅиĐŋŅ ĐŋаŅаĐŧĐĩŅŅа `q`
+
+ĐаĐŧâŅŅаŅŅĐĩ, ŅĐē Ņ ŅаĐŊŅŅĐĩ ŅОСĐŋОвŅдав, ŅĐž `Annotated` ĐŧĐžĐļĐŊа виĐēĐžŅиŅŅОвŅваŅи Đ´ĐģŅ Đ´ĐžĐ´Đ°Đ˛Đ°ĐŊĐŊŅ ĐŧĐĩŅадаĐŊиŅ
Đ´Đž ĐŋаŅаĐŧĐĩŅŅŅв Ņ [ĐŅŅŅĐŋŅ Đ´Đž ŅиĐŋŅв Python](../python-types.md#type-hints-with-metadata-annotations){.internal-link target=_blank}?
+
+ĐаŅаС ŅаĐŧĐĩ ŅĐ°Ņ Đ˛Đ¸ĐēĐžŅиŅŅаŅи ĐšĐžĐŗĐž ŅаСОĐŧ ŅС FastAPI. đ
+
+РаĐŊŅŅĐĩ Đŧи ĐŧаĐģи ŅаĐēŅ Đ°ĐŊĐžŅаŅŅŅ ŅиĐŋŅ:
+
+//// tab | Python 3.10+
+
+```Python
+q: str | None = None
+```
+
+////
+
+//// tab | Python 3.8+
+
+```Python
+q: Union[str, None] = None
+```
+
+////
+
+ĐĸĐĩĐŋĐĩŅ Đŧи ĐˇĐ°ĐŗĐžŅĐŊĐĩĐŧĐž ŅŅ Ņ `Annotated`, Ņ ĐžŅŅиĐŧаŅĐŧĐž:
+
+//// tab | Python 3.10+
+
+```Python
+q: Annotated[str | None] = None
+```
+
+////
+
+//// tab | Python 3.8+
+
+```Python
+q: Annotated[Union[str, None]] = None
+```
+
+////
+
+ĐĐąĐ¸Đ´Đ˛Ņ ŅŅ Đ˛ĐĩŅŅŅŅ ĐžĐˇĐŊаŅаŅŅŅ ĐžĐ´ĐŊĐĩ Đš ŅĐĩ ŅаĐŧĐĩ: `q` â ŅĐĩ ĐŋаŅаĐŧĐĩŅŅ, ŅĐēиК ĐŧĐžĐļĐĩ ĐąŅŅи `str` айО `None`, Ņ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ ĐŧĐ°Ņ ĐˇĐŊаŅĐĩĐŊĐŊŅ `None`.
+
+Đ ŅĐĩĐŋĐĩŅ ĐŋĐĩŅĐĩŅ
ОдиĐŧĐž Đ´Đž ŅŅĐēĐ°Đ˛ĐžĐŗĐž! đ
+
+## ĐОдаваĐŊĐŊŅ `Query` Đ´Đž `Annotated` Ņ ĐŋаŅаĐŧĐĩŅŅ `q`
+
+ĐĸĐĩĐŋĐĩŅ, ĐēĐžĐģи Ņ ĐŊĐ°Ņ Ņ `Annotated`, Đ´Đĩ Đŧи ĐŧĐžĐļĐĩĐŧĐž дОдаваŅи дОдаŅĐēĐžĐ˛Ņ ŅĐŊŅĐžŅĐŧаŅŅŅ (СОĐēŅĐĩĐŧа ваĐģŅдаŅŅŅ), дОдаĐŧĐž `Query` вŅĐĩŅĐĩдиĐŊŅ `Annotated` Ņ Đ˛ŅŅаĐŊОвиĐŧĐž ĐŋаŅаĐŧĐĩŅŅ `max_length` Ņ `50`:
+
+{* ../../docs_src/query_params_str_validations/tutorial002_an_py310.py hl[9] *}
+
+ĐвĐĩŅĐŊŅŅŅ ŅĐ˛Đ°ĐŗŅ, ŅĐž СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ ŅŅĐĩ ŅĐĩ `None`, ŅĐžĐŧŅ ĐŋаŅаĐŧĐĩŅŅ ĐˇĐ°ĐģиŅаŅŅŅŅŅ ĐŊĐĩОйОв'ŅСĐēОвиĐŧ.
+
+ĐĐģĐĩ ŅĐĩĐŋĐĩŅ, дОдавŅи `Query(max_length=50)` вŅĐĩŅĐĩдиĐŊŅ `Annotated`, Đŧи ĐŋОвŅĐ´ĐžĐŧĐģŅŅĐŧĐž FastAPI, ŅĐž Ņ
ĐžŅĐĩĐŧĐž **дОдаŅĐēĐžĐ˛Ņ Đ˛Đ°ĐģŅдаŅŅŅ** Đ´ĐģŅ ŅŅĐžĐŗĐž СĐŊаŅĐĩĐŊĐŊŅ â вОĐŊĐž ĐŧĐ°Ņ ĐŧŅŅŅиŅи ĐŧаĐēŅиĐŧŅĐŧ 50 ŅиĐŧвОĐģŅв. đ
+
+/// tip | ĐŅĐ´ĐēаСĐēа
+
+Đи виĐēĐžŅиŅŅОвŅŅĐŧĐž `Query()`, ĐžŅĐēŅĐģŅĐēи ŅĐĩ **query ĐŋаŅаĐŧĐĩŅŅ**. ĐаĐģŅ Đŧи ŅĐžĐˇĐŗĐģŅĐŊĐĩĐŧĐž ŅĐŊŅŅ Đ˛Đ°ŅŅаĐŊŅи, ŅĐē-ĐžŅ `Path()`, `Body()`, `Header()` Ņа `Cookie()`, ŅĐēŅ ĐŋŅиКĐŧаŅŅŅ ŅŅ ŅаĐŧŅ Đ°ŅĐŗŅĐŧĐĩĐŊŅи, ŅĐž Đš `Query()`.
+
+///
+
+ĐĸĐĩĐŋĐĩŅ FastAPI:
+
+* **ĐĐĩŅĐĩвŅŅиŅŅ** даĐŊŅ, ŅОй ĐŋĐĩŅĐĩĐēĐžĐŊаŅиŅŅ, ŅĐž ŅŅ
ĐŊŅ Đ´ĐžĐ˛ĐļиĐŊа ĐŊĐĩ ĐŋĐĩŅĐĩвиŅŅŅ 50 ŅиĐŧвОĐģŅв
+* ĐĐžĐēаĐļe **ŅŅŅĐēŅ ĐŋĐžĐŧиĐģĐēŅ** ĐēĐģŅŅĐŊŅŅ, ŅĐēŅĐž даĐŊŅ ĐŊĐĩĐ´ŅĐšŅĐŊŅ
+* **ĐадОĐēŅĐŧĐĩĐŊŅŅŅ** ĐŋаŅаĐŧĐĩŅŅ Đ˛ OpenAPI-ŅŅ
ĐĩĐŧŅ *ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ* (ŅĐž вŅдОйŅаСиŅŅŅŅ Đ˛ **авŅĐžĐŧаŅиŅĐŊĐž ĐˇĐŗĐĩĐŊĐĩŅОваĐŊŅĐš Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ**)
+
+## ĐĐģŅŅĐĩŅĐŊаŅивĐŊиК (СаŅŅаŅŅĐģиК) ĐŧĐĩŅОд: Query ŅĐē СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ
+
+ĐŖ ĐŋĐžĐŋĐĩŅĐĩĐ´ĐŊŅŅ
вĐĩŅŅŅŅŅ
FastAPI (Đ´Đž 0.95.0 ) `Query` виĐēĐžŅиŅŅОвŅвавŅŅ ŅĐē СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ Đ´ĐģŅ ĐŋаŅаĐŧĐĩŅŅа, а ĐŊĐĩ вŅĐĩŅĐĩдиĐŊŅ `Annotated`. Đи, ĐšĐŧОвŅŅĐŊĐž, ĐŋОйаŅиŅĐĩ ĐēОд, ŅĐēиК виĐēĐžŅиŅŅОвŅŅ ŅĐĩĐš ĐŋŅĐ´Ņ
ŅĐ´, ŅĐžĐŧŅ Đ˛Đ°ŅŅĐž ŅĐžĐˇĐŗĐģŅĐŊŅŅи ĐšĐžĐŗĐž.
+
+/// tip | ĐŅĐ´ĐēаСĐēа
+
+ĐĐģŅ ĐŊĐžĐ˛ĐžĐŗĐž ĐēĐžĐ´Ņ Ņа ĐēĐžĐģи ŅĐĩ ĐŧĐžĐļĐģивО, виĐēĐžŅиŅŅОвŅĐšŅĐĩ `Annotated`, ŅĐē ĐŋĐžĐēаСаĐŊĐž виŅĐĩ. ĐĻĐĩ ĐŧĐ°Ņ ĐąĐ°ĐŗĐ°ŅĐž ĐŋĐĩŅĐĩĐ˛Đ°Đŗ (ĐŋĐžŅŅĐŊĐĩĐŊиŅ
ĐŊиĐļŅĐĩ) Ņ ĐŊĐĩ ĐŧĐ°Ņ ĐŊĐĩĐ´ĐžĐģŅĐēŅв. đ°
+
+///
+
+РаĐŊŅŅĐĩ Đŧи ĐŋиŅаĐģи `Query()` ŅĐē СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ Đ´ĐģŅ ĐŋаŅаĐŧĐĩŅŅа ŅŅĐŊĐēŅŅŅ, вŅŅаĐŊОвĐģŅŅŅи `max_length` Ņ 50:
+
+{* ../../docs_src/query_params_str_validations/tutorial002_py310.py hl[7] *}
+
+ĐŅĐēŅĐģŅĐēи в ŅŅĐžĐŧŅ Đ˛Đ¸ĐŋадĐēŅ (ĐąĐĩС `Annotated`) ĐŊаĐŧ ĐŋĐžŅŅŅĐąĐŊĐž СаĐŧŅĐŊиŅи `None` Ņ ŅŅĐŊĐēŅŅŅ ĐŊа `Query()`, ŅĐĩĐŋĐĩŅ Đŧи ĐŋОвиĐŊĐŊŅ ŅвĐŊĐž вŅŅаĐŊОвиŅи СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ ŅĐĩŅĐĩС ĐŋаŅаĐŧĐĩŅŅ `Query(default=None)`. ĐĻĐĩ виĐēĐžĐŊŅŅ ŅŅ ŅаĐŧŅ ŅĐžĐģŅ Đ˛Đ¸ĐˇĐŊаŅĐĩĐŊĐŊŅ ĐˇĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ (ĐŋŅиĐŊаКĐŧĐŊŅ Đ´ĐģŅ FastAPI).
+
+ĐĸаĐēиĐŧ ŅиĐŊĐžĐŧ:
+
+```Python
+q: str | None = Query(default=None)
+```
+
+...ŅОйиŅŅ ĐŋаŅаĐŧĐĩŅŅ ĐŊĐĩОйОвâŅСĐēОвиĐŧ ĐˇŅ ĐˇĐŊаŅĐĩĐŊĐŊŅĐŧ Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ `None`, ŅĐž ĐĩĐēвŅваĐģĐĩĐŊŅĐŊĐž:
+
+
+```Python
+q: str | None = None
+```
+ĐĐģĐĩ Ņ Đ˛ĐĩŅŅŅŅ Đˇ `Query` Đŧи ŅвĐŊĐž вĐēаСŅŅĐŧĐž, ŅĐž ŅĐĩ query ĐŋаŅаĐŧĐĩŅŅ.
+
+ĐаĐģŅ Đŧи ĐŧĐžĐļĐĩĐŧĐž ĐŋĐĩŅĐĩдаваŅи `Query` дОдаŅĐēĐžĐ˛Ņ ĐŋаŅаĐŧĐĩŅŅи, СОĐēŅĐĩĐŧа `max_length`, ŅĐēиК СаŅŅĐžŅОвŅŅŅŅŅŅ Đ´Đž ŅŅĐ´ĐēŅв:
+
+```Python
+q: str | None = Query(default=None, max_length=50)
+```
+
+ĐĻĐĩ СайĐĩСĐŋĐĩŅиŅŅ Đ˛Đ°ĐģŅдаŅŅŅ Đ´Đ°ĐŊиŅ
, вивĐĩĐ´Đĩ СŅОСŅĐŧŅĐģŅ ĐŋĐžĐŧиĐģĐēŅ Ņ ŅĐ°ĐˇŅ ĐŊĐĩĐ´ŅĐšŅĐŊиŅ
даĐŊиŅ
Ņ ĐˇĐ°Đ´ĐžĐēŅĐŧĐĩĐŊŅŅŅ ĐŋаŅаĐŧĐĩŅŅ Ņ ŅŅ
ĐĩĐŧŅ OpenAPI *ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ*.
+
+### `Query` ŅĐē СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ айО вŅĐĩŅĐĩдиĐŊŅ `Annotated`
+
+ĐаĐļĐģивО ĐŋаĐŧâŅŅаŅи, ŅĐēŅĐž виĐēĐžŅиŅŅОвŅваŅи `Query` вŅĐĩŅĐĩдиĐŊŅ `Annotated`, ĐŊĐĩ ĐŧĐžĐļĐŊа СадаваŅи ĐŋаŅаĐŧĐĩŅŅ `default` Ņ `Query`.
+
+ĐаĐŧŅŅŅŅ ŅŅĐžĐŗĐž виĐēĐžŅиŅŅОвŅĐšŅĐĩ СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ Ņ ŅаĐŧŅĐš ŅŅĐŊĐēŅŅŅ. ĐĐŊаĐēŅĐĩ ŅĐĩ ĐąŅĐ´Đĩ ĐŊĐĩĐģĐžĐŗŅŅĐŊĐž.
+
+ĐаĐŋŅиĐēĐģад, ŅĐĩĐš ваŅŅаĐŊŅ Ņ ĐŊĐĩĐēĐžŅĐĩĐēŅĐŊиĐŧ:
+
+```Python
+q: Annotated[str, Query(default="rick")] = "morty"
+```
+
+...ŅĐžĐŧŅ, ŅĐž ĐŊĐĩ СŅОСŅĐŧŅĐģĐž, ŅĐēĐĩ СĐŊаŅĐĩĐŊĐŊŅ ĐŧĐ°Ņ ĐąŅŅи СĐŊаŅĐĩĐŊĐŊŅĐŧ Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ: `"rick"` Ņи `"morty"`.
+
+ĐĐžŅĐĩĐēŅĐŊŅ Đ˛Đ°ŅŅаĐŊŅи:
+
+```Python
+q: Annotated[str, Query()] = "rick"
+```
+
+...айО Ņ ŅŅаŅиŅ
ĐēОдОвиŅ
йаСаŅ
Đи СĐŊаКдĐĩŅĐĩ:
+
+```Python
+q: str = Query(default="rick")
+```
+
+### ĐĐĩŅĐĩĐ˛Đ°ĐŗĐ¸ виĐēĐžŅиŅŅаĐŊĐŊŅ `Annotated`
+
+**ĐиĐēĐžŅиŅŅаĐŊĐŊŅ `Annotated` Ņ ŅĐĩĐēĐžĐŧĐĩĐŊдОваĐŊиĐŧ** СаĐŧŅŅŅŅ ĐˇĐ°Đ´Đ°ĐŊĐŊŅ ĐˇĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ Ņ ĐŋаŅаĐŧĐĩŅŅаŅ
ŅŅĐŊĐēŅŅŅ, ĐžŅĐēŅĐģŅĐēи вОĐŊĐž **ĐēŅаŅĐĩ** С ĐēŅĐģŅĐēĐžŅ
ĐŋŅиŅиĐŊ. đ¤
+
+ĐĐŊаŅĐĩĐŊĐŊŅ **Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ** ĐŋаŅаĐŧĐĩŅŅа **ŅŅĐŊĐēŅŅŅ** Ņ ĐšĐžĐŗĐž **ŅаĐēŅиŅĐŊиĐŧ СĐŊаŅĐĩĐŊĐŊŅĐŧ Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ**, ŅĐž Ņ ĐąŅĐģŅŅ ŅĐŊŅŅŅŅивĐŊиĐŧ Ņ Python ĐˇĐ°ĐŗĐ°ĐģĐžĐŧ. đ
+
+Đи ĐŧĐžĐļĐĩŅĐĩ **виĐēĐģиĐēаŅи** ŅŅ ŅаĐŧŅ ŅŅĐŊĐēŅŅŅ **в ŅĐŊŅиŅ
ĐŧŅŅŅŅŅ
** ĐąĐĩС FastAPI, Ņ Đ˛ĐžĐŊа **ĐŋŅаŅŅваŅиĐŧĐĩ ĐžŅŅĐēŅваĐŊĐž**. Đ¯ĐēŅĐž ĐŋаŅаĐŧĐĩŅŅ Ņ **ОйОвâŅСĐēОвиĐŧ** (ĐąĐĩС СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ), ĐĐ°Ņ **ŅĐĩдаĐēŅĐžŅ** ĐŋОвŅĐ´ĐžĐŧиŅŅ ĐŋŅĐž ĐŋĐžĐŧиĐģĐēŅ, а **Python** ŅаĐēĐžĐļ видаŅŅŅ ĐŋĐžĐŧиĐģĐēŅ, ŅĐēŅĐž Đи виĐēĐžĐŊаŅŅĐĩ ŅŅĐŊĐēŅŅŅ ĐąĐĩС ĐŋĐĩŅĐĩдаваĐŊĐŊŅ ŅŅĐžĐŗĐž ĐŋаŅаĐŧĐĩŅŅа.
+
+Đ¯ĐēŅĐž Đи ĐŊĐĩ виĐēĐžŅиŅŅОвŅŅŅĐĩ `Annotated`, а виĐēĐžŅиŅŅОвŅŅŅĐĩ **(ŅŅаŅиК) ŅŅиĐģŅ ĐˇĐŊаŅĐĩĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ**, ŅĐž ĐŋŅи виĐēĐģиĐēŅ ŅŅŅŅ ŅŅĐŊĐēŅŅŅ ĐąĐĩС FastAPI **в ŅĐŊŅиŅ
ĐŧŅŅŅŅŅ
**, ĐŋĐžŅŅŅĐąĐŊĐž **ĐŊĐĩ СайŅŅи** ĐŋĐĩŅĐĩдаŅи ŅĐš аŅĐŗŅĐŧĐĩĐŊŅи, ŅĐŊаĐēŅĐĩ СĐŊаŅĐĩĐŊĐŊŅ ĐąŅĐ´ŅŅŅ Đ˛ŅĐ´ŅŅСĐŊŅŅиŅŅ Đ˛ŅĐ´ ĐžŅŅĐēŅваĐŊиŅ
(ĐŊаĐŋŅиĐēĐģад, Đи ĐžŅŅиĐŧаŅŅĐĩ `QueryInfo` айО ĐŋОдŅĐąĐŊĐĩ СаĐŧŅŅŅŅ `str`). ĐĐ°Ņ ŅĐĩдаĐēŅĐžŅ ĐŊĐĩ ĐŋОвŅĐ´ĐžĐŧиŅŅ ĐŋŅĐž ĐŋĐžĐŧиĐģĐēŅ, Ņ Python ŅаĐēĐžĐļ ĐŊĐĩ видаŅŅŅ ĐŋĐžĐŧиĐģĐēŅ ĐŋŅи СаĐŋŅŅĐēŅ ŅŅĐŊĐēŅŅŅ, ĐŋĐžĐēи ĐŊĐĩ виĐŊиĐēĐŊĐĩ ĐŋĐžĐŧиĐģĐēа ĐŋŅĐ´ ŅĐ°Ņ Đ˛Đ¸ĐēĐžĐŊаĐŊĐŊŅ ĐžĐŋĐĩŅаŅŅĐš ŅŅĐĩŅĐĩдиĐŊŅ.
+
+ĐŅĐēŅĐģŅĐēи `Annotated` ĐŧĐžĐļĐĩ ĐŧŅŅŅиŅи ĐēŅĐģŅĐēа аĐŊĐžŅаŅŅĐš ĐŧĐĩŅадаĐŊиŅ
, Đи ĐŊавŅŅŅ ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи ŅŅ ŅаĐŧŅ ŅŅĐŊĐēŅŅŅ Đˇ ŅĐŊŅиĐŧи ŅĐŊŅŅŅŅĐŧĐĩĐŊŅаĐŧи, ŅаĐēиĐŧи ŅĐē Typer . đ
+
+## ĐОдаваĐŊĐŊŅ Đ´ĐžĐ´Đ°ŅĐēОвиŅ
ваĐģŅдаŅŅĐš
+
+Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ дОдаŅи ĐŋаŅаĐŧĐĩŅŅ `min_length`:
+
+{* ../../docs_src/query_params_str_validations/tutorial003_an_py310.py hl[10] *}
+
+## ĐОдаваĐŊĐŊŅ ŅĐĩĐŗŅĐģŅŅĐŊиŅ
виŅаСŅв
+
+Đи ĐŧĐžĐļĐĩŅĐĩ виСĐŊаŅиŅи ŅĐĩĐŗŅĐģŅŅĐŊиК виŅаС pattern, ŅĐēĐžĐŧŅ ĐŧĐ°Ņ Đ˛ŅĐ´ĐŋОвŅдаŅи ĐŋаŅаĐŧĐĩŅŅ:
+
+{* ../../docs_src/query_params_str_validations/tutorial004_an_py310.py hl[11] *}
+
+ĐĻĐĩĐš ĐēĐžĐŊĐēŅĐĩŅĐŊиК ŅайĐģĐžĐŊ ŅĐĩĐŗŅĐģŅŅĐŊĐžĐŗĐž виŅĐ°ĐˇŅ ĐŋĐĩŅĐĩвŅŅŅŅ, ŅĐž ĐžŅŅиĐŧаĐŊĐĩ СĐŊаŅĐĩĐŊĐŊŅ ĐŋаŅаĐŧĐĩŅŅа:
+
+* `^`: ĐŋĐžŅиĐŊаŅŅŅŅŅ Đˇ ĐŊаŅŅŅĐŋĐŊиŅ
ŅиĐŧвОĐģŅв, ĐŋĐĩŅĐĩĐ´ ŅĐēиĐŧи ĐŊĐĩĐŧĐ°Ņ ŅĐŊŅиŅ
ŅиĐŧвОĐģŅв.
+* `fixedquery`: ŅĐžŅĐŊĐž вŅĐ´ĐŋОвŅĐ´Đ°Ņ ĐˇĐŊаŅĐĩĐŊĐŊŅ `fixedquery`.
+* `$`: СаĐēŅĐŊŅŅŅŅŅŅŅ ŅŅŅ, ĐŋŅŅĐģŅ `fixedquery` ĐŊĐĩĐŧĐ°Ņ ĐļОдĐŊиŅ
ŅиĐŧвОĐģŅв.
+
+Đ¯ĐēŅĐž Đи ĐŋĐžŅŅваŅŅĐĩŅŅ ŅĐžĐˇĐŗŅĐąĐģĐĩĐŊĐž ŅОдО **"ŅĐĩĐŗŅĐģŅŅĐŊиŅ
виŅаСŅв"**, ĐŊĐĩ Ņ
виĐģŅĐšŅĐĩŅŅ. ĐĐžĐŊи Ņ ŅĐēĐģадĐŊĐžŅ ŅĐĩĐŧĐžŅ Đ´ĐģŅ ĐąĐ°ĐŗĐ°ŅŅĐžŅ
ĐģŅĐ´ĐĩĐš. Đи вŅĐĩ ОдĐŊĐž ĐŧĐžĐļĐĩŅĐĩ СŅОйиŅи ĐąĐ°ĐŗĐ°ŅĐž ŅĐĩŅĐĩĐš ĐąĐĩС ŅŅ
виĐēĐžŅиŅŅаĐŊĐŊŅ.
+
+ĐĐģĐĩ ŅĐĩĐŋĐĩŅ Đи СĐŊаŅŅĐĩ, ŅĐž ĐēĐžĐģи вОĐŊи СĐŊадОйĐģŅŅŅŅŅ, ŅŅ
ĐŧĐžĐļĐŊа СаŅŅĐžŅОвŅваŅи Ņ **FastAPI**.
+
+### Pydantic v1 `regex` СаĐŧŅŅŅŅ `pattern`
+
+ĐĐž вĐĩŅŅŅŅ Pydantic 2 Ņ FastAPI 0.100.0 ĐŋаŅаĐŧĐĩŅŅ ĐŊаСивавŅŅ `regex` СаĐŧŅŅŅŅ `pattern`, аĐģĐĩ ŅĐĩĐŋĐĩŅ Đ˛ŅĐŊ СаŅŅаŅŅв.
+
+Đи вŅĐĩ ŅĐĩ ĐŧĐžĐļĐĩŅĐĩ СŅŅŅŅŅŅи ĐēОд, ŅĐēиК виĐēĐžŅиŅŅОвŅŅ ĐšĐžĐŗĐž:
+
+//// tab | Pydantic v1
+
+{* ../../docs_src/query_params_str_validations/tutorial004_regex_an_py310.py hl[11] *}
+
+////
+
+ĐĐģĐĩ ĐŧаКŅĐĩ ĐŊа ŅваСŅ, ŅĐž вŅĐŊ Ņ ĐˇĐ°ŅŅаŅŅĐģиĐŧ Ņ ĐšĐžĐŗĐž ŅĐģŅĐ´ ĐžĐŊОвиŅи Đ´Đž ĐŊĐžĐ˛ĐžĐŗĐž ĐŋаŅаĐŧĐĩŅŅа `pattern`. đ¤
+
+## ĐĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ
+
+Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ, вŅĐ´ĐŧŅĐŊĐŊŅ Đ˛ŅĐ´ `None`.
+
+ĐаĐŋŅиĐēĐģад, ŅĐēŅĐž Đи Ņ
ĐžŅĐĩŅĐĩ ĐžĐŗĐžĐģĐžŅиŅи ĐŋаŅаĐŧĐĩŅŅ ĐˇĐ°ĐŋиŅŅ `q` С `min_length` `3` Ņ ĐˇĐŊаŅĐĩĐŊĐŊŅĐŧ Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ `"fixedquery"`:
+
+{* ../../docs_src/query_params_str_validations/tutorial005_an_py39.py hl[9] *}
+
+/// note | ĐĸĐĩŅ
ĐŊŅŅĐŊŅ Đ´ĐĩŅаĐģŅ
+
+ĐаŅвĐŊŅŅŅŅ ĐˇĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ ĐąŅĐ´Ņ-ŅĐēĐžĐŗĐž ŅиĐŋŅ, вĐēĐģŅŅаŅŅи `None`, ŅОйиŅŅ ĐŋаŅаĐŧĐĩŅŅ ĐŊĐĩОйОвâŅСĐēОвиĐŧ (not required).
+
+///
+
+## ĐйОвâŅСĐēĐžĐ˛Ņ ĐŋаŅаĐŧĐĩŅŅи
+
+Đ¯ĐēŅĐž ĐŊаĐŧ ĐŊĐĩ ĐŋĐžŅŅŅĐąĐŊĐž вĐēаСŅваŅи дОдаŅĐēĐžĐ˛Ņ ĐŋĐĩŅĐĩвŅŅĐēи айО ĐŧĐĩŅадаĐŊŅ, Đŧи ĐŧĐžĐļĐĩĐŧĐž СŅОйиŅи ĐŋаŅаĐŧĐĩŅŅ `q` ОйОвâŅСĐēОвиĐŧ, ĐŋŅĐžŅŅĐž ĐŊĐĩ ĐžĐŗĐžĐģĐžŅŅŅŅи СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ, ĐŊаĐŋŅиĐēĐģад:
+
+```Python
+q: str
+```
+
+СаĐŧŅŅŅŅ:
+
+```Python
+q: str | None = None
+```
+
+ĐĐģĐĩ ŅĐĩĐŋĐĩŅ Đŧи ĐžĐŗĐžĐģĐžŅŅŅĐŧĐž ĐšĐžĐŗĐž С `Query`, ĐŊаĐŋŅиĐēĐģад:
+
+//// tab | Annotated
+
+```Python
+q: Annotated[str | None, Query(min_length=3)] = None
+```
+
+////
+
+ĐĸĐžĐŧŅ, ŅĐēŅĐž ĐаĐŧ ĐŋĐžŅŅŅĐąĐŊĐž СŅОйиŅи СĐŊаŅĐĩĐŊĐŊŅ ĐžĐąĐžĐ˛âŅСĐēОвиĐŧ, виĐēĐžŅиŅŅОвŅŅŅи `Query`, ĐŋŅĐžŅŅĐž ĐŊĐĩ вĐēаСŅĐšŅĐĩ СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ:
+
+{* ../../docs_src/query_params_str_validations/tutorial006_an_py39.py hl[9] *}
+
+### ĐйОвâŅСĐēОвĐĩ СĐŊаŅĐĩĐŊĐŊŅ, ŅĐēĐĩ ĐŧĐžĐļĐĩ ĐąŅŅи `None`
+
+Đи ĐŧĐžĐļĐĩŅĐĩ вĐēаСаŅи, ŅĐž ĐŋаŅаĐŧĐĩŅŅ ĐŧĐžĐļĐĩ ĐŋŅиКĐŧаŅи `None`, аĐģĐĩ ĐŋŅи ŅŅĐžĐŧŅ ĐˇĐ°ĐģиŅаŅŅŅŅŅ ĐžĐąĐžĐ˛âŅСĐēОвиĐŧ. ĐĻĐĩ СĐŧŅŅиŅŅ ĐēĐģŅŅĐŊŅŅв ĐŊадŅŅĐģаŅи СĐŊаŅĐĩĐŊĐŊŅ, ĐŊавŅŅŅ ŅĐēŅĐž вОĐŊĐž Đ´ĐžŅŅвĐŊŅŅ `None`.
+
+ЊОй СŅОйиŅи ŅĐĩ, ĐžĐŗĐžĐģĐžŅŅŅŅ, ŅĐž `None` Ņ Đ´ĐžĐŋŅŅŅиĐŧиĐŧ ŅиĐŋĐžĐŧ, аĐģĐĩ ĐŊĐĩ вĐēаСŅĐšŅĐĩ СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ:
+
+{* ../../docs_src/query_params_str_validations/tutorial006c_an_py310.py hl[9] *}
+
+## ĐĄĐŋиŅĐžĐē ĐŋаŅаĐŧĐĩŅŅŅв СаĐŋиŅŅ / ĐēŅĐģŅĐēа СĐŊаŅĐĩĐŊŅ
+
+Đ¯ĐēŅĐž Đи виСĐŊаŅаŅŅĐĩ ĐŋаŅаĐŧĐĩŅŅ ĐˇĐ°ĐŋиŅŅ ĐˇĐ° Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ `Query`, Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ дОСвОĐģиŅи ĐžŅŅиĐŧаĐŊĐŊŅ ŅĐŋиŅĐēŅ ĐˇĐŊаŅĐĩĐŊŅ, ŅОйŅĐž дОСвОĐģиŅи ĐžŅŅиĐŧаĐŊĐŊŅ ĐēŅĐģŅĐēĐžŅ
СĐŊаŅĐĩĐŊŅ.
+
+ĐаĐŋŅиĐēĐģад, ŅОй дОСвОĐģиŅи ĐŋаŅаĐŧĐĩŅŅŅ ĐˇĐ°ĐŋиŅŅ `q` С'ŅвĐģŅŅиŅŅ ĐēŅĐģŅĐēа ŅаСŅв в URL, ĐŧĐžĐļĐŊа ĐŊаĐŋиŅаŅи:
+
+{* ../../docs_src/query_params_str_validations/tutorial011_an_py310.py hl[9] *}
+
+ĐĸОдŅ, Ņ Đ˛Đ¸ĐŋадĐēŅ ĐˇĐ°ĐŋиŅŅ ĐˇĐ° URL:
+
+```
+http://localhost:8000/items/?q=foo&q=bar
+```
+
+Đи ĐžŅŅиĐŧаŅŅĐĩ ĐēŅĐģŅĐēа СĐŊаŅĐĩĐŊŅ *query ĐŋаŅаĐŧĐĩŅŅа* `q` (`foo` Ņ `bar`) Ņ Đ˛Đ¸ĐŗĐģŅĐ´Ņ ŅĐŋиŅĐēŅ `list` в Python Ņ ĐаŅŅĐš *ŅŅĐŊĐēŅŅŅ ĐžĐąŅОйĐēи ŅĐģŅŅ
Ņ*, Ņ *ĐŋаŅаĐŧĐĩŅŅŅ ŅŅĐŊĐēŅŅŅ* `q`.
+
+ĐŅĐļĐĩ, вŅĐ´ĐŋОвŅĐ´Ņ ĐŊа ŅĐĩĐš URL ĐąŅĐ´Đĩ:
+
+```JSON
+{
+ "q": [
+ "foo",
+ "bar"
+ ]
+}
+```
+
+/// tip | ĐŅĐ´ĐēаСĐēа
+
+ЊОй ĐžĐŗĐžĐģĐžŅиŅи ĐŋаŅаĐŧĐĩŅŅ ĐˇĐ°ĐŋиŅŅ Đˇ ŅиĐŋĐžĐŧ `list`, ŅĐē Ņ ĐŊавĐĩĐ´ĐĩĐŊĐžĐŧŅ Đ˛Đ¸ŅĐĩ ĐŋŅиĐēĐģадŅ, ĐŋĐžŅŅŅĐąĐŊĐž ŅвĐŊĐž виĐēĐžŅиŅŅОвŅваŅи `Query`, ŅĐŊаĐēŅĐĩ вŅĐŊ ĐąŅĐ´Đĩ ŅĐŊŅĐĩŅĐŋŅĐĩŅОваĐŊиК ŅĐē ŅŅĐģĐž СаĐŋиŅŅ.
+
+///
+
+ĐĐŊŅĐĩŅаĐēŅивĐŊа API-Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ ĐžĐŊОвиŅŅŅŅ Đ˛ŅĐ´ĐŋОвŅĐ´ĐŊĐž, дОСвОĐģŅŅŅи ĐŋĐĩŅĐĩдаваŅи ĐēŅĐģŅĐēа СĐŊаŅĐĩĐŊŅ:
+
+
+
+### ĐĄĐŋиŅĐžĐē ĐŋаŅаĐŧĐĩŅŅŅв СаĐŋиŅŅ / ĐēŅĐģŅĐēа СĐŊаŅĐĩĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ
+
+Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ виСĐŊаŅиŅи СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ Đ´ĐģŅ `list`, ŅĐēŅĐž ĐļОдĐŊĐĩ СĐŊаŅĐĩĐŊĐŊŅ ĐŊĐĩ ĐąŅĐģĐž ĐŋĐĩŅĐĩдаĐŊĐĩ:
+
+{* ../../docs_src/query_params_str_validations/tutorial012_an_py39.py hl[9] *}
+
+Đ¯ĐēŅĐž Đи ĐŋĐĩŅĐĩКдĐĩŅĐĩ Са ĐŋĐžŅиĐģаĐŊĐŊŅĐŧ:
+
+```
+http://localhost:8000/items/
+```
+
+ŅĐž СĐŊаŅĐĩĐŊĐŊŅ `q` Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ ĐąŅĐ´Đĩ: `["foo", "bar"]`, Ņ ĐаŅа вŅĐ´ĐŋОвŅĐ´Ņ Đ˛Đ¸ĐŗĐģŅдаŅиĐŧĐĩ ŅаĐē:
+
+```JSON
+{
+ "q": [
+ "foo",
+ "bar"
+ ]
+}
+```
+
+#### ĐиĐēĐžŅиŅŅаĐŊĐŊŅ ŅŅĐģŅĐēи `list`
+
+Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи `list` ĐąĐĩС ŅŅĐžŅĐŊĐĩĐŊĐŊŅ ŅиĐŋŅ, СаĐŧŅŅŅŅ `list[str]`:
+
+{* ../../docs_src/query_params_str_validations/tutorial013_an_py39.py hl[9] *}
+
+/// note | ĐĸĐĩŅ
ĐŊŅŅĐŊŅ Đ´ĐĩŅаĐģŅ
+
+ĐаКŅĐĩ ĐŊа ŅваСŅ, ŅĐž в ŅŅĐžĐŧŅ Đ˛Đ¸ĐŋадĐēŅ FastAPI ĐŊĐĩ ĐŋĐĩŅĐĩвŅŅŅŅиĐŧĐĩ вĐŧŅŅŅ ŅĐŋиŅĐēŅ.
+
+ĐаĐŋŅиĐēĐģад, `list[int]` ĐŋĐĩŅĐĩвŅŅŅŅиĐŧĐĩ (Ņ Đ´ĐžĐēŅĐŧĐĩĐŊŅŅваŅиĐŧĐĩ), ŅĐž вŅŅ ĐĩĐģĐĩĐŧĐĩĐŊŅи ŅĐŋиŅĐēŅ Ņ ŅŅĐģиĐŧи ŅиŅĐģаĐŧи. ĐĐģĐĩ `list` ĐąĐĩС ŅŅĐžŅĐŊĐĩĐŊĐŊŅ ŅŅĐžĐŗĐž ĐŊĐĩ ŅОйиŅиĐŧĐĩ.
+
+///
+
+## ĐОдаваĐŊĐŊŅ Đ´ĐžĐ´Đ°ŅĐēОвиŅ
ĐŧĐĩŅадаĐŊиŅ
+
+Đи ĐŧĐžĐļĐĩŅĐĩ дОдаŅи ĐąŅĐģŅŅĐĩ ŅĐŊŅĐžŅĐŧаŅŅŅ ĐŋŅĐž ĐŋаŅаĐŧĐĩŅŅ.
+
+ĐĻŅ ŅĐŊŅĐžŅĐŧаŅŅŅ ĐąŅĐ´Đĩ вĐēĐģŅŅĐĩĐŊа Ņ ĐˇĐŗĐĩĐŊĐĩŅОваĐŊиК OpenAPI Ņа виĐēĐžŅиŅŅаĐŊа в ŅĐŊŅĐĩŅŅĐĩĐšŅаŅ
Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ Ņа СОвĐŊŅŅĐŊŅŅ
ŅĐŊŅŅŅŅĐŧĐĩĐŊŅаŅ
.
+
+/// note | ĐĸĐĩŅ
ĐŊŅŅĐŊŅ Đ´ĐĩŅаĐģŅ
+
+ĐаКŅĐĩ ĐŊа ŅваСŅ, ŅĐž ŅŅСĐŊŅ ŅĐŊŅŅŅŅĐŧĐĩĐŊŅи ĐŧĐžĐļŅŅŅ ĐŧаŅи ŅŅСĐŊиК ŅŅвĐĩĐŊŅ ĐŋŅĐ´ŅŅиĐŧĐēи OpenAPI.
+
+ĐĐĩŅĐēŅ Đˇ ĐŊиŅ
ĐŧĐžĐļŅŅŅ ŅĐĩ ĐŊĐĩ вŅдОйŅаĐļаŅи вŅŅ Đ´ĐžĐ´Đ°ŅĐēĐžĐ˛Ņ ŅĐŊŅĐžŅĐŧаŅŅŅ, Ņ
ĐžŅа в ĐąŅĐģŅŅĐžŅŅŅ Đ˛Đ¸ĐŋадĐēŅв ŅŅ ŅŅĐŊĐēŅŅŅ Đ˛ĐļĐĩ СаĐŋĐģаĐŊОваĐŊа Đ´ĐģŅ ŅОСŅОйĐēи.
+
+///
+
+Đи ĐŧĐžĐļĐĩŅĐĩ дОдаŅи `title` :
+
+{* ../../docs_src/query_params_str_validations/tutorial007_an_py310.py hl[10] *}
+
+Đ ŅаĐēĐžĐļ `description`:
+
+{* ../../docs_src/query_params_str_validations/tutorial008_an_py310.py hl[14] *}
+
+## ĐĐģŅаŅи ĐŋаŅаĐŧĐĩŅŅŅв
+
+ĐŖŅвŅŅŅ, ŅĐž Đи Ņ
ĐžŅĐĩŅĐĩ, ŅОй ĐŋаŅаĐŧĐĩŅŅ ĐŊаСивавŅŅ `item-query`.
+
+ĐаĐŋŅиĐēĐģад:
+
+```
+http://127.0.0.1:8000/items/?item-query=foobaritems
+```
+
+ĐĐģĐĩ `item-query` â ŅĐĩ ĐŊĐĩĐēĐžŅĐĩĐēŅĐŊа ĐŊаСва СĐŧŅĐŊĐŊĐžŅ Đ˛ Python.
+
+ĐаКйĐģиĐļŅиК Đ´ĐžĐŋŅŅŅиĐŧиК ваŅŅаĐŊŅ â `item_query`.
+
+ĐŅĐžŅĐĩ ĐаĐŧ ĐŋĐžŅŅŅĐąĐŊĐž, ŅОй ĐŋаŅаĐŧĐĩŅŅ ĐˇĐ°ĐģиŅавŅŅ ŅаĐŧĐĩ `item-query`...
+
+ĐŖ ŅаĐēĐžĐŧŅ Đ˛Đ¸ĐŋадĐēŅ ĐŧĐžĐļĐŊа ĐžĐŗĐžĐģĐžŅиŅи `alias`, Ņ ŅаĐŧĐĩ вŅĐŊ ĐąŅĐ´Đĩ виĐēĐžŅиŅŅОвŅваŅиŅŅ Đ´ĐģŅ ĐžŅŅиĐŧаĐŊĐŊŅ ĐˇĐŊаŅĐĩĐŊĐŊŅ ĐŋаŅаĐŧĐĩŅŅа:
+
+{* ../../docs_src/query_params_str_validations/tutorial009_an_py310.py hl[9] *}
+
+## ĐивĐĩĐ´ĐĩĐŊĐŊŅ ĐŋаŅаĐŧĐĩŅŅŅв ŅĐē СаŅŅаŅŅĐģиŅ
+
+ĐŅиĐŋŅŅŅиĐŧĐž, ŅĐž Đи ĐąŅĐģŅŅĐĩ ĐŊĐĩ Ņ
ĐžŅĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи ŅĐĩĐš ĐŋаŅаĐŧĐĩŅŅ.
+
+ĐаĐŧ ĐŋĐžŅŅŅĐąĐŊĐž СаĐģиŅиŅи ĐšĐžĐŗĐž ĐŊа Đ´ĐĩŅĐēиК ŅаŅ, ĐžŅĐēŅĐģŅĐēи ĐŊиĐŧ ĐēĐžŅиŅŅŅŅŅŅŅŅ ĐēĐģŅŅĐŊŅи, аĐģĐĩ Đи Ņ
ĐžŅĐĩŅĐĩ, ŅОй Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ ŅŅŅĐēĐž ĐŋĐžĐēаСŅваĐģа, ŅĐž вŅĐŊ Ņ ĐˇĐ°ŅŅаŅŅĐģиĐŧ .
+
+ĐĸĐžĐ´Ņ Đи ĐŧĐžĐļĐĩŅĐĩ ĐŋĐĩŅĐĩдаŅи ĐŋаŅаĐŧĐĩŅŅ `deprecated=True` Đ´Đž `Query`:
+
+{* ../../docs_src/query_params_str_validations/tutorial010_an_py310.py hl[19] *}
+
+ĐĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ ĐąŅĐ´Đĩ ĐŋĐžĐēаСŅваŅи ŅĐĩ ŅаĐēиĐŧ ŅиĐŊĐžĐŧ:
+
+
+
+## ĐиĐŊŅŅĐžĐē ĐŋаŅаĐŧĐĩŅŅŅв С OpenAPI
+
+ЊОй виĐēĐģŅŅиŅи ĐŋаŅаĐŧĐĩŅŅ ĐˇĐ°ĐŋиŅŅ ĐˇŅ ĐˇĐŗĐĩĐŊĐĩŅОваĐŊĐžŅ ŅŅ
ĐĩĐŧи OpenAPI (Ņ, ŅаĐēиĐŧ ŅиĐŊĐžĐŧ, С авŅĐžĐŧаŅиŅĐŊиŅ
ŅиŅŅĐĩĐŧ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ), вŅŅаĐŊОвŅŅŅ ĐŋаŅаĐŧĐĩŅŅ `include_in_schema` Đ´ĐģŅ `Query` в `False`:
+
+{* ../../docs_src/query_params_str_validations/tutorial014_an_py310.py hl[10] *}
+
+## ĐаŅŅĐžĐŧĐŊа ваĐģŅдаŅŅŅ
+
+ĐĐžĐļŅŅŅ ĐąŅŅи виĐŋадĐēи, ĐēĐžĐģи ĐаĐŧ ĐŋĐžŅŅŅĐąĐŊĐž ĐŋŅОвĐĩŅŅи **ĐēаŅŅĐžĐŧĐŊŅ Đ˛Đ°ĐģŅдаŅŅŅ**, ŅĐēŅ ĐŊĐĩ ĐŧĐžĐļĐŊа ŅĐĩаĐģŅСŅваŅи Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ ĐŋаŅаĐŧĐĩŅŅŅв, ĐŋĐžĐēаСаĐŊиŅ
виŅĐĩ.
+
+ĐŖ ŅаĐēиŅ
виĐŋадĐēаŅ
ви ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅаŅи **ĐēаŅŅĐžĐŧĐŊŅ ŅŅĐŊĐēŅŅŅ Đ˛Đ°ĐģŅдаŅŅŅ**, ŅĐēа ĐąŅĐ´Đĩ СаŅŅĐžŅОваĐŊа ĐŋŅŅĐģŅ ĐˇĐ˛Đ¸ŅаКĐŊĐžŅ Đ˛Đ°ĐģŅдаŅŅŅ (ĐŊаĐŋŅиĐēĐģад, ĐŋŅŅĐģŅ ĐŋĐĩŅĐĩвŅŅĐēи, ŅĐž СĐŊаŅĐĩĐŊĐŊŅ Ņ ŅиĐŋĐžĐŧ `str`).
+
+ĐĻĐĩ ĐŧĐžĐļĐŊа Đ´ĐžŅŅĐŗŅи Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ Pydantic's `AfterValidator` в ŅĐĩŅĐĩдиĐŊŅ `Annotated`.
+
+/// tip | ĐŅĐ´ĐēаСĐēа
+
+Pydantic ŅаĐēĐžĐļ ĐŧĐ°Ņ `BeforeValidator` Ņа ŅĐŊŅŅ. đ¤
+
+///
+
+ĐаĐŋŅиĐēĐģад, ŅĐĩĐš ĐēаŅŅĐžĐŧĐŊиК ваĐģŅдаŅĐžŅ ĐŋĐĩŅĐĩвŅŅŅŅ, Ņи ĐŋĐžŅиĐŊаŅŅŅŅŅ ID ĐĩĐģĐĩĐŧĐĩĐŊŅа С `isbn-` Đ´ĐģŅ ĐŊĐžĐŧĐĩŅа ĐēĐŊĐ¸ĐŗĐ¸ ISBN айО С `imdb-` Đ´ĐģŅ ID URL ŅŅĐģŅĐŧŅ ĐŊа IMDB :
+
+{* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py hl[5,16:19,24] *}
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+ĐĻĐĩ Đ´ĐžŅŅŅĐŋĐŊĐž С вĐĩŅŅŅŅ Pydantic 2 айО виŅĐĩ. đ
+
+///
+
+/// tip | ĐŅĐ´ĐēаСĐēа
+
+Đ¯ĐēŅĐž ĐаĐŧ ĐŋĐžŅŅŅĐąĐŊĐž виĐēĐžĐŊаŅи ĐąŅĐ´Ņ-ŅĐēŅ Đ˛Đ°ĐģŅдаŅŅŅ, ŅĐēа виĐŧĐ°ĐŗĐ°Ņ Đ˛ĐˇĐ°ŅĐŧОдŅŅ Đˇ ĐąŅĐ´Ņ-ŅĐēиĐŧ **СОвĐŊŅŅĐŊŅĐŧ ĐēĐžĐŧĐŋĐžĐŊĐĩĐŊŅĐžĐŧ**, ŅаĐēиĐŧ ŅĐē йаСа даĐŊиŅ
Ņи ŅĐŊŅиК API, ви ĐŋОвиĐŊĐŊŅ ĐˇĐ°ĐŧŅŅŅŅ ŅŅĐžĐŗĐž виĐēĐžŅиŅŅОвŅваŅи **FastAPI Dependencies**. Đи Đ´ŅСĐŊаŅŅĐĩŅŅ ĐŋŅĐž ĐŊиŅ
ĐŋŅСĐŊŅŅĐĩ.
+
+ĐĻŅ ĐēаŅŅĐžĐŧĐŊŅ Đ˛Đ°ĐģŅдаŅĐžŅи виĐēĐžŅиŅŅОвŅŅŅŅŅŅ Đ´ĐģŅ ŅĐĩŅĐĩĐš, ŅĐēŅ ĐŧĐžĐļĐŊа ĐŋĐĩŅĐĩвŅŅиŅи ĐģиŅĐĩ С **ŅиĐŧи даĐŊиĐŧи**, ŅĐž ĐŊадаĐŊŅ Đ˛ СаĐŋиŅŅ.
+
+///
+
+### ĐŅОСŅĐŧŅĐšŅĐĩ ŅĐĩĐš ĐēОд
+
+ĐĐžĐģОвĐŊиК ĐŧĐžĐŧĐĩĐŊŅ â ŅĐĩ виĐēĐžŅиŅŅаĐŊĐŊŅ **`AfterValidator` С ŅŅĐŊĐēŅŅŅŅ Đ˛ŅĐĩŅĐĩдиĐŊŅ `Annotated`**. ĐĐžĐļĐĩŅĐĩ ĐŋŅĐžĐŋŅŅŅиŅи ŅŅ ŅаŅŅиĐŊŅ, ŅĐēŅĐž Ņ
ĐžŅĐĩŅĐĩ. đ¤¸
+
+---
+
+ĐĐģĐĩ ŅĐēŅĐž ĐаĐŧ ŅŅĐēавО ŅОСŅĐąŅаŅиŅŅ Đ˛ ŅŅĐžĐŧŅ ĐēĐžĐŊĐēŅĐĩŅĐŊĐžĐŧŅ ĐŋŅиĐēĐģĐ°Đ´Ņ ĐēĐžĐ´Ņ Ņ ĐаĐŧ ŅĐĩ ĐŊĐĩ ĐŊайŅидĐģĐž, ĐžŅŅ ĐēŅĐģŅĐēа дОдаŅĐēОвиŅ
Đ´ĐĩŅаĐģĐĩĐš.
+
+#### Đ ŅĐ´ĐžĐē ŅС `value.startswith()`
+
+ĐвĐĩŅĐŊŅĐģи ŅĐ˛Đ°ĐŗŅ? Đ ŅĐ´ĐžĐē ŅС `value.startswith()` ĐŧĐžĐļĐĩ ĐŋŅиКĐŧаŅи ĐēĐžŅŅĐĩĐļ, Ņ ŅĐžĐ´Ņ Đ˛ŅĐŊ ĐŋĐĩŅĐĩвŅŅŅŅиĐŧĐĩ ĐēĐžĐļĐŊĐĩ СĐŊаŅĐĩĐŊĐŊŅ Đ˛ ĐēĐžŅŅĐĩĐļŅ:
+
+{* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py ln[16:19] hl[17] *}
+
+#### ĐиĐŋадĐēОвиК ĐĩĐģĐĩĐŧĐĩĐŊŅ
+
+Đа Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ `data.items()` Đŧи ĐžŅŅиĐŧŅŅĐŧĐž ŅŅĐĩŅайĐĩĐģŅĐŊиК Ой'ŅĐēŅ ŅС ĐēĐžŅŅĐĩĐļаĐŧи, ŅĐž ĐŧŅŅŅŅŅŅ ĐēĐģŅŅ Ņ ĐˇĐŊаŅĐĩĐŊĐŊŅ Đ´ĐģŅ ĐēĐžĐļĐŊĐžĐŗĐž ĐĩĐģĐĩĐŧĐĩĐŊŅа ŅĐģОвĐŊиĐēа.
+
+Đи ĐŋĐĩŅĐĩŅвОŅŅŅĐŧĐž ŅĐĩĐš ŅŅĐĩŅайĐĩĐģŅĐŊиК Ой'ŅĐēŅ Ņ ĐˇĐ˛Đ¸ŅаКĐŊиК `list` Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ `list(data.items())`.
+
+ĐĐžŅŅĐŧ, виĐēĐžŅиŅŅОвŅŅŅи `random.choice()`, Đŧи ĐŧĐžĐļĐĩĐŧĐž ĐžŅŅиĐŧаŅи виĐŋадĐēОвĐĩ СĐŊаŅĐĩĐŊĐŊŅ ĐˇŅ ŅĐŋиŅĐēŅ, ŅОйŅĐž ĐžŅŅиĐŧŅŅĐŧĐž ĐēĐžŅŅĐĩĐļ ŅС `(id, name)`. ĐĻĐĩ ĐŧĐžĐļĐĩ ĐąŅŅи ŅĐžŅŅ ĐŊа СŅаСОĐē `("imdb-tt0371724", "The Hitchhiker's Guide to the Galaxy")`.
+
+ĐаĐģŅ Đŧи **ĐŋŅиŅвОŅŅĐŧĐž ŅŅ Đ´Đ˛Đ° СĐŊаŅĐĩĐŊĐŊŅ** ĐēĐžŅŅĐĩĐļŅ ĐˇĐŧŅĐŊĐŊиĐŧ `id` Ņ `name`.
+
+ĐĸĐžĐļ, ŅĐēŅĐž ĐēĐžŅиŅŅŅĐ˛Đ°Ņ ĐŊĐĩ вĐēаСав ID ĐĩĐģĐĩĐŧĐĩĐŊŅа, вŅĐŊ вŅĐĩ ОдĐŊĐž ĐžŅŅиĐŧĐ°Ņ Đ˛Đ¸ĐŋадĐēĐžĐ˛Ņ ŅĐĩĐēĐžĐŧĐĩĐŊдаŅŅŅ.
+
+...Ņ Đ˛ŅĐĩ ŅĐĩ ŅĐĩаĐģŅСОваĐŊĐž в **ОдĐŊĐžĐŧŅ ŅŅĐ´ĐēŅ ĐēОдŅ**. đ¤¯ ĐĨŅйа ĐŊĐĩ ĐŋŅĐĩĐēŅаŅĐŊиК Python? đ
+
+{* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py ln[22:30] hl[29] *}
+
+## ĐŅĐ´ŅŅĐŧĐžĐē
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ĐžĐŗĐžĐģĐžŅŅваŅи дОдаŅĐēĐžĐ˛Ņ Đ˛Đ°ĐģŅдаŅŅŅ Ņа ĐŧĐĩŅаŅĐŊŅĐžŅĐŧаŅŅŅ Đ´ĐģŅ ŅвОŅŅ
ĐŋаŅаĐŧĐĩŅŅŅв.
+
+ĐĐ°ĐŗĐ°ĐģŅĐŊŅ Đ˛Đ°ĐģŅдаŅŅŅ Ņа ĐŧĐĩŅаŅĐŊŅĐžŅĐŧаŅŅŅ:
+
+* `alias`
+* `title`
+* `description`
+* `deprecated`
+
+ĐаĐģŅдаŅŅŅ, ŅĐŋĐĩŅиŅŅŅĐŊŅ Đ´ĐģŅ ŅŅĐ´ĐēŅв:
+
+* `min_length`
+* `max_length`
+* `pattern`
+
+ĐаŅŅĐžĐŧĐŊŅ Đ˛Đ°ĐģŅдаŅŅŅ ĐˇĐ° Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ `AfterValidator`.
+
+ĐŖ ŅиŅ
ĐŋŅиĐēĐģадаŅ
Đи ĐŋОйаŅиĐģи, ŅĐē ĐžĐŗĐžĐģĐžŅŅваŅи ваĐģŅдаŅŅŅ Đ´ĐģŅ ĐˇĐŊаŅĐĩĐŊŅ `str`.
+
+ĐивŅŅŅŅŅ ĐŊаŅŅŅĐŋĐŊŅ ŅОСдŅĐģи, ŅОй Đ´ŅСĐŊаŅиŅŅ, ŅĐē ĐžĐŗĐžĐģĐžŅŅваŅи ваĐģŅдаŅŅŅ Đ´ĐģŅ ŅĐŊŅиŅ
ŅиĐŋŅв, ĐŊаĐŋŅиĐēĐģад ŅиŅĐĩĐģ.
diff --git a/docs/uk/docs/tutorial/response-model.md b/docs/uk/docs/tutorial/response-model.md
new file mode 100644
index 000000000..def1f8a2d
--- /dev/null
+++ b/docs/uk/docs/tutorial/response-model.md
@@ -0,0 +1,358 @@
+# ĐОдĐĩĐģŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ â ĐĸиĐŋ, ŅĐž ĐŋОвĐĩŅŅаŅŅŅŅŅ
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ĐžĐŗĐžĐģĐžŅиŅи ŅиĐŋ, ŅĐēиК виĐēĐžŅиŅŅОвŅваŅиĐŧĐĩŅŅŅŅ Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ, Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ *аĐŊĐžŅаŅŅŅ ŅиĐŋŅ, ŅĐž ĐŋОвĐĩŅŅаŅŅŅŅŅ* *ŅŅĐŊĐēŅŅŅŅ ĐžĐŋĐĩŅаŅŅŅŅ ŅĐģŅŅ
Ņ* (path operation)
+
+**ĐĐŊĐžŅаŅŅŅ ŅиĐŋŅ** ĐŧĐžĐļĐŊа вĐēаСаŅи ŅаĐē ŅаĐŧĐž ŅĐē Ņ Đ´ĐģŅ Đ˛Ņ
ŅĐ´ĐŊиŅ
**ĐŋаŅаĐŧĐĩŅŅŅв** ŅŅĐŊĐēŅŅŅ: ŅĐĩ ĐŧĐžĐļŅŅŅ ĐąŅŅи ĐŧОдĐĩĐģŅ Pydantic, ŅĐŋиŅĐēи (lists), ŅĐģОвĐŊиĐēи (dictionaries), ŅĐēаĐģŅŅĐŊŅ ĐˇĐŊаŅĐĩĐŊĐŊŅ, ŅĐē-ĐžŅ ŅŅĐģŅ ŅиŅĐģа (integers), ĐąŅĐģĐĩĐ˛Ņ ĐˇĐŊаŅĐĩĐŊĐŊŅ (booleans) ŅĐžŅĐž.
+
+{* ../../docs_src/response_model/tutorial001_01_py310.py hl[16,21] *}
+
+FastAPI виĐēĐžŅиŅŅОвŅваŅиĐŧĐĩ ŅĐĩĐš ŅиĐŋ, ŅОй:
+
+* **ĐĐĩŅĐĩвŅŅиŅи ĐŋŅавиĐģŅĐŊŅŅŅŅ** ĐŋОвĐĩŅĐŊĐĩĐŊиŅ
даĐŊиŅ
.
+ * Đ¯ĐēŅĐž даĐŊŅ ĐŊĐĩ ваĐģŅĐ´ĐŊŅ (ĐŊаĐŋŅиĐēĐģад, вŅĐ´ŅŅŅĐŊŅ ĐŋĐžĐģĐĩ), ŅĐĩ ОСĐŊаŅаŅ, ŅĐž ĐĐ°Ņ ĐēОд дОдаŅĐēŅ ĐŋŅаŅŅŅ ĐŊĐĩĐēĐžŅĐĩĐēŅĐŊĐž Ņ ĐŊĐĩ ĐŋОвĐĩŅŅĐ°Ņ ŅĐĩ, ŅĐž ĐŋОвиĐŊĐĩĐŊ. ĐŖ ŅаĐēĐžĐŧŅ Đ˛Đ¸ĐŋадĐēŅ FastAPI ĐŋОвĐĩŅĐŊĐĩ ĐŋĐžĐŧиĐģĐēŅ ŅĐĩŅвĐĩŅа, СаĐŧŅŅŅŅ ŅĐžĐŗĐž ŅОй вŅддаŅи ĐŊĐĩĐ´ĐžĐŋŅŅŅиĐŧŅ Đ´Đ°ĐŊŅ. ĐĸаĐē Đи Ņа ĐаŅŅ ĐēĐģŅŅĐŊŅи ĐąŅĐ´ĐĩŅĐĩ вĐŋĐĩвĐŊĐĩĐŊŅ, ŅĐž ĐžŅŅиĐŧŅŅŅĐĩ ĐžŅŅĐēŅваĐŊŅ Đ´Đ°ĐŊŅ Ņ ĐŋŅавиĐģŅĐŊĐžĐŧŅ ŅĐžŅĐŧаŅŅ.
+
+* ĐОдаŅи **JSON Schema** вŅĐ´ĐŋОвŅĐ´Ņ Đ´Đž ŅĐŋĐĩŅиŅŅĐēаŅŅŅ OpenAPI в *ĐžĐŋĐĩŅаŅŅŅŅ
ŅĐģŅŅ
Ņ*.
+ * ĐĻĐĩ ĐąŅĐ´Đĩ виĐēĐžŅиŅŅаĐŊĐž в **авŅĐžĐŧаŅиŅĐŊŅĐš Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ**.
+ * Đ ŅаĐēĐžĐļ ŅĐŊŅŅŅŅĐŧĐĩĐŊŅаĐŧи, ŅĐēŅ Đ°Đ˛ŅĐžĐŧаŅиŅĐŊĐž ĐŗĐĩĐŊĐĩŅŅŅŅŅ ĐēĐģŅŅĐŊŅŅŅĐēиК ĐēОд.
+
+ĐĐģĐĩ ĐŊĐ°ĐšĐŗĐžĐģОвĐŊŅŅĐĩ:
+
+* FastAPI **ОйĐŧĐĩĐļиŅŅ Ņа вŅĐ´ŅŅĐģŅŅŅŅŅ** виŅ
ŅĐ´ĐŊŅ Đ´Đ°ĐŊŅ Đ˛ŅĐ´ĐŋОвŅĐ´ĐŊĐž Đ´Đž ŅиĐŋŅ, вĐēаСаĐŊĐžĐŗĐž Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ.
+ * ĐĻĐĩ ĐžŅОйĐģивО ваĐļĐģивО Đ´ĐģŅ **ĐąĐĩСĐŋĐĩĐēи**. ĐĐĩŅаĐģŅ ĐŊиĐļŅĐĩ.
+
+## ĐаŅаĐŧĐĩŅŅ `response_model`
+
+ĐĐŊĐžĐ´Ņ ĐаĐŧ ĐŋĐžŅŅŅĐąĐŊĐž айО СŅŅŅĐŊĐž ĐŋОвĐĩŅŅаŅи ŅĐŊŅŅ ŅиĐŋи даĐŊиŅ
, ĐŊŅĐļ ŅŅ, ŅĐž СаСĐŊаŅĐĩĐŊŅ ŅĐē ŅиĐŋ вŅĐ´ĐŋОвŅĐ´Ņ.
+
+ĐаĐŋŅиĐēĐģад, Đи ĐŧĐžĐļĐĩŅĐĩ **ĐŋОвĐĩŅŅаŅи ŅĐģОвĐŊиĐē** айО ОйâŅĐēŅ ĐąĐ°ĐˇĐ¸ даĐŊиŅ
, аĐģĐĩ **ĐžĐŗĐžĐģĐžŅиŅи ĐŧОдĐĩĐģŅ Pydantic** ŅĐē ĐŧОдĐĩĐģŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ. ĐĸĐžĐ´Ņ ĐŧОдĐĩĐģŅ Pydantic авŅĐžĐŧаŅиŅĐŊĐž ОйŅОйĐģŅŅиĐŧĐĩ ваĐģŅдаŅŅŅ, Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ ŅĐžŅĐž.
+
+Đ¯ĐēŅĐž Đи дОдаŅŅĐĩ аĐŊĐžŅаŅŅŅ ŅиĐŋŅ Đ´ĐģŅ ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ, ŅĐĩдаĐēŅĐžŅ ĐēĐžĐ´Ņ Đ°ĐąĐž mypy ĐŧĐžĐļŅŅŅ ĐŋĐžŅĐēаŅĐļиŅиŅŅ, ŅĐž ŅŅĐŊĐēŅŅŅ ĐŋОвĐĩŅŅĐ°Ņ ŅĐŊŅиК ŅиĐŋ (ĐŊаĐŋŅиĐēĐģад, dict СаĐŧŅŅŅŅ Item).
+
+ĐŖ ŅаĐēиŅ
виĐŋадĐēаŅ
ĐŧĐžĐļĐŊа ŅĐēĐžŅиŅŅаŅиŅŅ ĐŋаŅаĐŧĐĩŅŅĐžĐŧ `response_model` в Đ´ĐĩĐēĐžŅаŅĐžŅŅ ĐŧаŅŅŅŅŅŅ (ĐŊаĐŋŅиĐēĐģад, @app.get()).
+
+ĐаŅаĐŧĐĩŅŅ `response_model` ĐŋŅаŅŅŅ Đˇ ĐąŅĐ´Ņ-ŅĐēиĐŧ *ĐžĐŋĐĩŅаŅĐžŅĐžĐŧ ŅĐģŅŅ
Ņ*:
+
+* `@app.get()`
+* `@app.post()`
+* `@app.put()`
+* `@app.delete()`
+* ŅĐžŅĐž.
+
+{* ../../docs_src/response_model/tutorial001_py310.py hl[17,22,24:27] *}
+
+/// note | ĐŅиĐŧŅŅĐēа
+
+ĐвĐĩŅĐŊŅŅŅ ŅĐ˛Đ°ĐŗŅ, ŅĐž `response_model` Ņ ĐŋаŅаĐŧĐĩŅŅĐžĐŧ ĐŧĐĩŅОдŅ-Đ´ĐĩĐēĐžŅаŅĐžŅа (`get`, `post`, ŅĐžŅĐž), а ĐŊĐĩ *ŅŅĐŊĐēŅŅŅŅ ĐžĐŋĐĩŅаŅŅŅŅ ŅĐģŅŅ
Ņ* (path operation function), ŅĐē ŅĐĩ ŅОйиŅŅŅŅ Đˇ ĐŋаŅаĐŧĐĩŅŅаĐŧи айО ŅŅĐģĐžĐŧ СаĐŋиŅŅ.
+
+///
+
+`response_model` ĐŋŅиКĐŧĐ°Ņ ŅаĐēиК ŅаĐŧиК ŅиĐŋ, ŅĐēиК Đи Đą вĐēаСаĐģи Đ´ĐģŅ ĐŋĐžĐģŅ ĐŧОдĐĩĐģŅ Pydantic. ĐĸОйŅĐž ŅĐĩ ĐŧĐžĐļĐĩ ĐąŅŅи ŅĐē Pydantic-ĐŧОдĐĩĐģŅ, ŅаĐē Ņ, ĐŊаĐŋŅиĐēĐģад, `list` ŅС ĐŧОдĐĩĐģĐĩĐš Pydantic â `List[Item]`.
+
+FastAPI виĐēĐžŅиŅŅОвŅваŅиĐŧĐĩ `response_model` Đ´ĐģŅ ŅŅвОŅĐĩĐŊĐŊŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ, ваĐģŅдаŅŅŅ Đ´Đ°ĐŊиŅ
Ņа â ĐŊаКваĐļĐģивŅŅĐĩ â **ĐŋĐĩŅĐĩŅвОŅĐĩĐŊĐŊŅ Ņа ŅŅĐģŅŅŅаŅŅŅ Đ˛Đ¸Ņ
ŅĐ´ĐŊиŅ
даĐŊиŅ
** ĐˇĐŗŅĐ´ĐŊĐž С ĐžĐŗĐžĐģĐžŅĐĩĐŊиĐŧ ŅиĐŋĐžĐŧ.
+
+/// tip | ĐĐžŅада
+
+Đ¯ĐēŅĐž Ņ ĐĐ°Ņ ŅвŅĐŧĐēĐŊĐĩĐŊĐž ŅŅвОŅŅ ĐŋĐĩŅĐĩвŅŅĐēŅ ŅиĐŋŅв Ņ ŅĐĩдаĐēŅĐžŅŅ, mypy ŅĐžŅĐž, Đи ĐŧĐžĐļĐĩŅĐĩ ĐžĐŗĐžĐģĐžŅиŅи ŅиĐŋ ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ ŅŅĐŊĐēŅŅŅ ŅĐē `Any`.
+
+ĐĸаĐēиĐŧ ŅиĐŊĐžĐŧ, Đи ĐŋОвŅĐ´ĐžĐŧĐģŅŅŅĐĩ ŅĐĩдаĐēŅĐžŅŅ, ŅĐž ŅвŅĐ´ĐžĐŧĐž ĐŋОвĐĩŅŅаŅŅĐĩ ĐąŅĐ´Ņ-ŅĐž. ĐĐģĐĩ FastAPI ŅŅĐĩ ОдĐŊĐž виĐēĐžĐŊŅваŅиĐŧĐĩ ŅŅвОŅĐĩĐŊĐŊŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ, ваĐģŅдаŅŅŅ, ŅŅĐģŅŅŅаŅŅŅ ŅĐžŅĐž Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ ĐŋаŅаĐŧĐĩŅŅа `response_model`.
+
+///
+
+### ĐŅŅĐžŅиŅĐĩŅ `response_model`
+
+Đ¯ĐēŅĐž Đи вĐēаСŅŅŅĐĩ Ņ ŅиĐŋ ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ, Ņ `response_model`, ŅĐž FastAPI виĐēĐžŅиŅŅОвŅваŅиĐŧĐĩ `response_model` С ĐŋŅŅĐžŅиŅĐĩŅĐžĐŧ.
+
+ĐĸаĐēиĐŧ ŅиĐŊĐžĐŧ, Đи ĐŧĐžĐļĐĩŅĐĩ дОдаŅи ĐŋŅавиĐģŅĐŊŅ Đ°ĐŊĐžŅаŅŅŅ ŅиĐŋŅв Đ´Đž ваŅиŅ
ŅŅĐŊĐēŅŅĐš, ĐŊавŅŅŅ ŅĐēŅĐž вОĐŊи ĐŋОвĐĩŅŅаŅŅŅ ŅиĐŋ, вŅĐ´ĐŧŅĐŊĐŊиК вŅĐ´ `response_model`. ĐĻĐĩ ĐąŅĐ´Đĩ ĐēĐžŅиŅĐŊĐž Đ´ĐģŅ ŅĐĩдаĐēŅĐžŅŅв ĐēĐžĐ´Ņ Ņа ŅĐŊŅŅŅŅĐŧĐĩĐŊŅŅв, ŅаĐēиŅ
ŅĐē mypy. Đ ĐŋŅи ŅŅĐžĐŧŅ FastAPI ĐŋŅОдОвĐļиŅŅ Đ˛Đ¸ĐēĐžĐŊŅваŅи ваĐģŅдаŅŅŅ Đ´Đ°ĐŊиŅ
, ĐŗĐĩĐŊĐĩŅŅваŅи Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ ŅĐžŅĐž ĐŊа ĐžŅĐŊĐžĐ˛Ņ `response_model`.
+
+Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅаŅи `response_model=None`, ŅОй виĐŧĐēĐŊŅŅи ŅŅвОŅĐĩĐŊĐŊŅ ĐŧОдĐĩĐģŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ Đ´ĐģŅ ŅŅŅŅ *ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ*. ĐĻĐĩ ĐŧĐžĐļĐĩ СĐŊадОйиŅиŅŅ, ŅĐēŅĐž Đи дОдаŅŅĐĩ аĐŊĐžŅаŅŅŅ ŅиĐŋŅв Đ´Đž Ой'ŅĐēŅŅв, ŅĐēŅ ĐŊĐĩ Ņ Đ´ĐžĐŋŅŅŅиĐŧиĐŧи ĐŋĐžĐģŅĐŧи Pydantic â ĐŋŅиĐēĐģад ŅŅĐžĐŗĐž Đи ĐŋОйаŅиŅĐĩ в ОдĐŊĐžĐŧŅ Đˇ ĐŊаŅŅŅĐŋĐŊиŅ
ŅОСдŅĐģŅв.
+
+## ĐОвĐĩŅĐŊŅŅи ŅŅ ŅаĐŧŅ Đ˛Ņ
ŅĐ´ĐŊŅ Đ´Đ°ĐŊŅ
+
+ĐĸŅŅ Đŧи ĐžĐŗĐžĐģĐžŅŅŅĐŧĐž ĐŧОдĐĩĐģŅ `UserIn`, ŅĐēа ĐŧŅŅŅиŅŅ ĐˇĐ˛Đ¸ŅаКĐŊиК ŅĐĩĐēŅŅОвиК ĐŋаŅĐžĐģŅ:
+
+{* ../../docs_src/response_model/tutorial002_py310.py hl[7,9] *}
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+ЊОй виĐēĐžŅиŅŅОвŅваŅи `EmailStr`, ŅĐŋĐžŅаŅĐēŅ Đ˛ŅŅаĐŊОвŅŅŅ `email-validator` .
+
+ĐĐĩŅĐĩĐēĐžĐŊаКŅĐĩŅŅ, ŅĐž Đи ŅŅвОŅиĐģи [вŅŅŅŅаĐģŅĐŊĐĩ ŅĐĩŅĐĩдОвиŅĐĩ](../virtual-environments.md){.internal-link target=_blank}, аĐēŅивŅваĐģи ĐšĐžĐŗĐž, а ĐŋĐžŅŅĐŧ вŅŅаĐŊОвиĐģи ĐŋаĐēĐĩŅ, ĐŊаĐŋŅиĐēĐģад:
+
+```console
+$ pip install email-validator
+```
+
+or with:
+
+```console
+$ pip install "pydantic[email]"
+```
+
+///
+
+Đ Đŧи виĐēĐžŅиŅŅОвŅŅĐŧĐž ŅŅ ĐŧОдĐĩĐģŅ, ŅОй ĐžĐŗĐžĐģĐžŅиŅи Ņ Đ˛Ņ
ŅĐ´ĐŊŅ, Ņ Đ˛Đ¸Ņ
ŅĐ´ĐŊŅ Đ´Đ°ĐŊŅ:
+
+{* ../../docs_src/response_model/tutorial002_py310.py hl[16] *}
+
+ĐĸĐĩĐŋĐĩŅ, ĐēĐžĐģи ĐąŅаŅСĐĩŅ ŅŅвОŅŅŅ ĐēĐžŅиŅŅŅваŅа С ĐŋаŅĐžĐģĐĩĐŧ, API ĐŋОвĐĩŅĐŊĐĩ ŅОК ŅаĐŧиК ĐŋаŅĐžĐģŅ Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ.
+
+ĐŖ ŅŅĐžĐŧŅ Đ˛Đ¸ĐŋадĐēŅ ŅĐĩ ĐŧĐžĐļĐĩ ĐŊĐĩ ĐąŅŅи ĐŋŅОйĐģĐĩĐŧĐžŅ, адĐļĐĩ ŅаĐŧĐĩ ĐēĐžŅиŅŅŅĐ˛Đ°Ņ ĐŊадŅŅĐģав ĐŋаŅĐžĐģŅ.
+
+ĐĐģĐĩ ŅĐēŅĐž Đŧи виĐēĐžŅиŅŅаŅĐŧĐž ŅŅ Đļ ĐŧОдĐĩĐģŅ Đ´ĐģŅ ŅĐŊŅĐžŅ ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ, Đŧи ĐŧĐžĐļĐĩĐŧĐž виĐŋадĐēОвО ĐŊадŅŅĐģаŅи ĐŋаŅĐžĐģŅ ĐŊаŅиŅ
ĐēĐžŅиŅŅŅваŅŅв ĐēĐžĐļĐŊĐžĐŧŅ ĐēĐģŅŅĐŊŅŅ.
+
+/// danger | ĐĐąĐĩŅĐĩĐļĐŊĐž
+
+ĐŅĐēĐžĐģи ĐŊĐĩ СйĐĩŅŅĐŗĐ°ĐšŅĐĩ ĐŋаŅĐžĐģŅ ĐēĐžŅиŅŅŅваŅа Ņ Đ˛ŅĐ´ĐēŅиŅĐžĐŧŅ Đ˛Đ¸ĐŗĐģŅĐ´Ņ Ņа ĐŊĐĩ ĐŊадŅиĐģаКŅĐĩ ĐšĐžĐŗĐž Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ, ŅĐēŅĐž ŅŅĐģŅĐēи Đи ĐŊĐĩ СĐŊаŅŅĐĩ вŅŅ ŅиСиĐēи Ņ ŅĐžŅĐŊĐž ŅОСŅĐŧŅŅŅĐĩ, ŅĐž ŅОйиŅĐĩ.
+
+///
+
+## ĐОдаКŅĐĩ ĐžĐēŅĐĩĐŧŅ Đ˛Đ¸Ņ
ŅĐ´ĐŊŅ ĐŧОдĐĩĐģŅ
+
+ĐаĐŧŅŅŅŅ ŅŅĐžĐŗĐž Đŧи ĐŧĐžĐļĐĩĐŧĐž ŅŅвОŅиŅи вŅ
ŅĐ´ĐŊŅ ĐŧОдĐĩĐģŅ Đˇ вŅĐ´ĐēŅиŅиĐŧ ĐŋаŅĐžĐģĐĩĐŧ Ņ Đ˛Đ¸Ņ
ŅĐ´ĐŊŅ ĐŧОдĐĩĐģŅ ĐąĐĩС ĐŊŅĐžĐŗĐž:
+
+{* ../../docs_src/response_model/tutorial003_py310.py hl[9,11,16] *}
+
+ĐĸŅŅ, ĐŊавŅŅŅ ŅĐēŅĐž *ŅŅĐŊĐēŅŅŅ ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ* ĐŋОвĐĩŅŅĐ°Ņ ĐžĐą'ŅĐēŅ ĐēĐžŅиŅŅŅваŅа, ŅĐēиК ĐŧŅŅŅиŅŅ ĐŋаŅĐžĐģŅ:
+
+{* ../../docs_src/response_model/tutorial003_py310.py hl[24] *}
+
+...Đŧи ĐžĐŗĐžĐģĐžŅиĐģи `response_model` ŅĐē ĐŊаŅŅ ĐŧОдĐĩĐģŅ `UserOut`, ŅĐēа ĐŊĐĩ ĐŧŅŅŅиŅŅ ĐŋаŅĐžĐģŅ:
+
+{* ../../docs_src/response_model/tutorial003_py310.py hl[22] *}
+
+ĐĸаĐēиĐŧ ŅиĐŊĐžĐŧ, **FastAPI** авŅĐžĐŧаŅиŅĐŊĐž вŅĐ´ŅŅĐģŅŅŅŅŅ Đ˛ŅŅ Đ´Đ°ĐŊŅ, ŅĐēŅ ĐŊĐĩ вĐēаСаĐŊŅ Ņ Đ˛Đ¸Ņ
ŅĐ´ĐŊŅĐš ĐŧОдĐĩĐģŅ (Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ Pydantic).
+
+### `response_model` айО ŅиĐŋ ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ
+
+ĐŖ ŅŅĐžĐŧŅ Đ˛Đ¸ĐŋадĐēŅ, ĐžŅĐēŅĐģŅĐēи Đ´Đ˛Ņ ĐŧОдĐĩĐģŅ ŅŅСĐŊŅ, ŅĐēŅĐž Đŧи аĐŊĐžŅŅŅĐŧĐž ŅиĐŋ ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ ŅŅĐŊĐēŅŅŅ ŅĐē `UserOut`, ŅĐĩдаĐēŅĐžŅ Ņ ŅаĐēŅ ŅĐŊŅŅŅŅĐŧĐĩĐŊŅи, ŅĐē mypy, видадŅŅŅ ĐŋĐžĐŧиĐģĐēŅ, йО ŅаĐēŅиŅĐŊĐž Đŧи ĐŋОвĐĩŅŅаŅĐŧĐž ŅĐŊŅиК ŅиĐŋ.
+
+ĐĸĐžĐŧŅ Đ˛ ŅŅĐžĐŧŅ ĐŋŅиĐēĐģĐ°Đ´Ņ Đŧи виĐēĐžŅиŅŅОвŅŅĐŧĐž ĐŋаŅаĐŧĐĩŅŅ `response_model`, а ĐŊĐĩ аĐŊĐžŅаŅŅŅ ŅиĐŋŅ ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ.
+
+...аĐģĐĩ ŅиŅаКŅĐĩ даĐģŅ, ŅОй Đ´ŅСĐŊаŅиŅŅ, ŅĐē ОйŅĐšŅи ŅĐĩ ОйĐŧĐĩĐļĐĩĐŊĐŊŅ.
+
+## ĐĸиĐŋ ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ Ņ ŅŅĐģŅŅŅаŅŅŅ Đ´Đ°ĐŊиŅ
+
+ĐŅОдОвĐļиĐŧĐž С ĐŋĐžĐŋĐĩŅĐĩĐ´ĐŊŅĐžĐŗĐž ĐŋŅиĐēĐģадŅ. Đи Ņ
ĐžŅŅĐģи **аĐŊĐžŅŅваŅи ŅŅĐŊĐēŅŅŅ ĐžĐ´ĐŊиĐŧ ŅиĐŋĐžĐŧ**, аĐģĐĩ ĐŋŅи ŅŅĐžĐŧŅ ĐŋОвĐĩŅŅаŅи С ĐŊĐĩŅ ĐąŅĐģŅŅĐĩ даĐŊиŅ
.
+
+Đи Ņ
ĐžŅĐĩĐŧĐž, ŅОй FastAPI ĐŋŅОдОвĐļŅвав **ŅŅĐģŅŅŅŅваŅи** ŅŅ Đ´Đ°ĐŊŅ ĐˇĐ° Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ response_model. ĐĸОйŅĐž ĐŊавŅŅŅ ŅĐēŅĐž ŅŅĐŊĐēŅŅŅ ĐŋОвĐĩŅŅĐ°Ņ ĐąŅĐģŅŅĐĩ ŅĐŊŅĐžŅĐŧаŅŅŅ, Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ ĐąŅĐ´ŅŅŅ ĐģиŅĐĩ ŅŅ ĐŋĐžĐģŅ, ŅĐēŅ Đ˛ĐēаСаĐŊŅ Ņ response_model.
+
+ĐŖ ĐŋĐžĐŋĐĩŅĐĩĐ´ĐŊŅĐžĐŧŅ ĐŋŅиĐēĐģадŅ, ĐžŅĐēŅĐģŅĐēи ĐēĐģаŅи ĐąŅĐģи ŅŅСĐŊŅ, ĐŊаĐŧ дОвĐĩĐģĐžŅŅ Đ˛Đ¸ĐēĐžŅиŅŅОвŅваŅи ĐŋаŅаĐŧĐĩŅŅ `response_model`. ĐĐģĐĩ ŅĐĩ ОСĐŊаŅаŅ, ŅĐž Đŧи ĐŊĐĩ ĐžŅŅиĐŧŅŅĐŧĐž ĐŋŅĐ´ŅŅиĐŧĐēи С йОĐēŅ ŅĐĩдаĐēŅĐžŅа ĐēĐžĐ´Ņ Ņа ŅĐŊŅŅŅŅĐŧĐĩĐŊŅŅв ĐŋĐĩŅĐĩвŅŅĐēи ŅиĐŋŅв ŅОдО ŅиĐŋŅ, ŅĐēиК ĐŋОвĐĩŅŅĐ°Ņ ŅŅĐŊĐēŅŅŅ.
+
+ĐŅĐžŅĐĩ в ĐąŅĐģŅŅĐžŅŅŅ Đ˛Đ¸ĐŋадĐēŅв, ĐēĐžĐģи ĐŊаĐŧ ĐŋĐžŅŅŅĐąĐŊĐž СŅОйиŅи ŅĐžŅŅ ĐŋОдŅĐąĐŊĐĩ, Đŧи ĐŋŅĐžŅŅĐž Ņ
ĐžŅĐĩĐŧĐž, ŅОй ĐŧОдĐĩĐģŅ **вŅĐ´ŅŅĐģŅŅŅŅваĐģа айО ĐŋŅийŅаĐģа** ŅаŅŅиĐŊŅ Đ´Đ°ĐŊиŅ
, ŅĐē Ņ ŅŅĐžĐŧŅ ĐŋŅиĐēĐģадŅ.
+
+ĐŖ ŅаĐēиŅ
виĐŋадĐēаŅ
Đŧи ĐŧĐžĐļĐĩĐŧĐž виĐēĐžŅиŅŅаŅи ĐēĐģаŅи Ņа ŅĐŋадĐēŅваĐŊĐŊŅ, ŅОй ŅĐēĐžŅиŅŅаŅиŅŅ **аĐŊĐžŅаŅŅŅĐŧи ŅиĐŋŅв** ŅŅĐŊĐēŅŅĐš â ŅĐĩ Đ´Đ°Ņ ĐēŅаŅŅ ĐŋŅĐ´ŅŅиĐŧĐēŅ Đˇ йОĐēŅ ŅĐĩдаĐēŅĐžŅа Ņа ŅĐŊŅŅŅŅĐŧĐĩĐŊŅŅв ŅиĐŋŅ mypy, Ņ ĐŋŅи ŅŅĐžĐŧŅ FastAPI ĐŋŅОдОвĐļŅŅ Đ˛Đ¸ĐēĐžĐŊŅваŅи **ŅŅĐģŅŅŅаŅŅŅ Đ´Đ°ĐŊиŅ
** Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ.
+
+{* ../../docs_src/response_model/tutorial003_01_py310.py hl[7:10,13:14,18] *}
+
+ĐавдŅĐēи ŅŅĐžĐŧŅ Đŧи ĐžŅŅиĐŧŅŅĐŧĐž ĐŋŅĐ´ŅŅиĐŧĐēŅ ŅĐŊŅŅŅŅĐŧĐĩĐŊŅŅв â вŅĐ´ ŅĐĩдаĐēŅĐžŅŅв Ņ mypy, ĐžŅĐēŅĐģŅĐēи ŅĐĩĐš ĐēОд Ņ ĐēĐžŅĐĩĐēŅĐŊиĐŧ С ŅĐžŅĐēи СОŅŅ ŅиĐŋŅв, â аĐģĐĩ Đŧи ŅаĐēĐžĐļ ĐžŅŅиĐŧŅŅĐŧĐž ŅŅĐģŅŅŅаŅŅŅ Đ´Đ°ĐŊиŅ
вŅĐ´ FastAPI.
+
+Đ¯Đē ŅĐĩ ĐŋŅаŅŅŅ? ĐаваКŅĐĩ ŅОСйĐĩŅĐĩĐŧĐžŅŅ. đ¤
+
+### ĐĸиĐŋи Ņа ĐŋŅĐ´ŅŅиĐŧĐēа ŅĐŊŅŅŅŅĐŧĐĩĐŊŅŅв
+
+ĐĄĐŋĐĩŅŅŅ ĐŋОдивиĐŧĐžŅŅ, ŅĐē ŅĐĩ йаŅаŅŅ ŅĐĩдаĐēŅĐžŅи, mypy Ņа ŅĐŊŅŅ ŅĐŊŅŅŅŅĐŧĐĩĐŊŅи.
+
+`BaseUser` ĐŧĐ°Ņ ĐąĐ°ĐˇĐžĐ˛Ņ ĐŋĐžĐģŅ. ĐĐžŅŅĐŧ `UserIn` ŅŅĐŋадĐēОвŅŅ `BaseUser` Ņ Đ´ĐžĐ´Đ°Ņ ĐŋĐžĐģĐĩ `password`, ĐžŅĐļĐĩ, вŅĐŊ ĐŧаŅиĐŧĐĩ вŅŅ ĐŋĐžĐģŅ Đˇ ОйОŅ
ĐŧОдĐĩĐģĐĩĐš.
+
+Đи СаСĐŊаŅаŅĐŧĐž ŅиĐŋ ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ ŅŅĐŊĐēŅŅŅ ŅĐē `BaseUser`, аĐģĐĩ ŅаĐēŅиŅĐŊĐž ĐŋОвĐĩŅŅаŅĐŧĐž ĐĩĐēСĐĩĐŧĐŋĐģŅŅ `UserIn`.
+
+Đ ĐĩдаĐēŅĐžŅ, mypy Ņа ŅĐŊŅŅ ŅĐŊŅŅŅŅĐŧĐĩĐŊŅи ĐŊĐĩ ŅĐēаŅĐļиŅиĐŧŅŅŅŅŅ ĐŊа ŅĐĩ, ŅĐžĐŧŅ ŅĐž С ŅĐžŅĐēи СОŅŅ ŅиĐŋŅСаŅŅŅ `UserIn` Ņ ĐŋŅĐ´ĐēĐģаŅĐžĐŧ `BaseUser`, а ŅĐĩ ОСĐŊаŅаŅ, ŅĐž вŅĐŊ Ņ `ваĐģŅĐ´ĐŊиĐŧ` ŅиĐŋĐžĐŧ, ĐēĐžĐģи ĐžŅŅĐēŅŅŅŅŅŅ ĐąŅĐ´Ņ-ŅĐž, ŅĐž Ņ `BaseUser`.
+
+### ФŅĐģŅŅŅаŅŅŅ Đ´Đ°ĐŊиŅ
Ņ FastAPI
+
+ĐĸĐĩĐŋĐĩŅ Đ´ĐģŅ FastAPI вŅĐŊ йаŅиŅŅ ŅиĐŋ ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ Ņ ĐŋĐĩŅĐĩĐēĐžĐŊŅŅŅŅŅŅ, ŅĐž ŅĐĩ, ŅĐž Đи ĐŋОвĐĩŅŅаŅŅĐĩ, ĐŧŅŅŅиŅŅ **ŅŅĐģŅĐēи** ĐŋĐžĐģŅ, ŅĐēŅ ĐžĐŗĐžĐģĐžŅĐĩĐŊŅ Ņ ŅŅĐžĐŧŅ ŅиĐŋŅ.
+
+FastAPI виĐēĐžĐŊŅŅ ĐēŅĐģŅĐēа вĐŊŅŅŅŅŅĐŊŅŅ
ĐžĐŋĐĩŅаŅŅĐš С Pydantic, ŅОй ĐŗĐ°ŅаĐŊŅŅваŅи, ŅĐž ĐŋŅавиĐģа ĐŊаŅĐģŅĐ´ŅваĐŊĐŊŅ ĐēĐģаŅŅв ĐŊĐĩ СаŅŅĐžŅОвŅŅŅŅŅŅ Đ´ĐģŅ ŅŅĐģŅŅŅаŅŅŅ ĐŋОвĐĩŅĐŊĐĩĐŊиŅ
даĐŊиŅ
, ŅĐŊаĐēŅĐĩ Đи ĐŧĐžĐŗĐģи Đą ĐŋОвĐĩŅĐŊŅŅи СĐŊаŅĐŊĐž ĐąŅĐģŅŅĐĩ даĐŊиŅ
, ĐŊŅĐļ ĐžŅŅĐēŅваĐģи.
+
+ĐĸаĐēиĐŧ ŅиĐŊĐžĐŧ, Đи ĐžŅŅиĐŧŅŅŅĐĩ ĐŊаКĐēŅаŅĐĩ С двОŅ
ŅвŅŅŅв: аĐŊĐžŅаŅŅŅ ŅиĐŋŅв **С ĐŋŅĐ´ŅŅиĐŧĐēĐžŅ ŅĐŊŅŅŅŅĐŧĐĩĐŊŅŅв** Ņ **ŅŅĐģŅŅŅаŅŅŅ Đ´Đ°ĐŊиŅ
**.
+
+## ĐОдивиŅиŅŅ Ņ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ
+
+ĐĐžĐģи Đи дивиŅĐĩŅŅ Đ°Đ˛ŅĐžĐŧаŅиŅĐŊŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ, Đи ĐŧĐžĐļĐĩŅĐĩ ĐŋОйаŅиŅи, ŅĐž вŅ
ŅĐ´ĐŊа ĐŧОдĐĩĐģŅ Ņ Đ˛Đ¸Ņ
ŅĐ´ĐŊа ĐŧОдĐĩĐģŅ ĐŧаŅŅŅ Đ˛ĐģаŅĐŊŅ JSON-ŅŅ
ĐĩĐŧŅ:
+
+
+
+Đ ĐžĐąĐ¸Đ´Đ˛Ņ ĐŧОдĐĩĐģŅ Đ˛Đ¸ĐēĐžŅиŅŅОвŅŅŅŅŅŅ Đ´ĐģŅ ŅĐŊŅĐĩŅаĐēŅивĐŊĐžŅ API-Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ:
+
+
+
+## ĐĐŊŅŅ Đ°ĐŊĐžŅаŅŅŅ ŅиĐŋŅв ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ
+
+ĐŅĐŊŅŅŅŅ Đ˛Đ¸ĐŋадĐēи, ĐēĐžĐģи Đи ĐŋОвĐĩŅŅаŅŅĐĩ ŅĐžŅŅ, ŅĐž ĐŊĐĩ Ņ Đ´ĐžĐŋŅŅŅиĐŧиĐŧ ĐŋĐžĐģĐĩĐŧ Pydantic, аĐģĐĩ аĐŊĐžŅŅŅŅĐĩ ŅĐĩ Ņ ŅŅĐŊĐēŅŅŅ ĐģиŅĐĩ Đ´ĐģŅ ŅĐžĐŗĐž, ŅОй ĐžŅŅиĐŧаŅи ĐŋŅĐ´ŅŅиĐŧĐēŅ Đ˛ŅĐ´ ŅĐŊŅŅŅŅĐŧĐĩĐŊŅŅв (ŅĐĩдаĐēŅĐžŅа, mypy ŅĐžŅĐž).
+
+### ĐОвĐĩŅĐŊĐĩĐŊĐŊŅ Response ĐŊаĐŋŅŅĐŧŅ
+
+ĐаКĐŋĐžŅиŅĐĩĐŊŅŅиĐŧ виĐŋадĐēĐžĐŧ ĐąŅĐ´Đĩ [ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ Response ĐŊаĐŋŅŅĐŧŅ, ŅĐē ĐŋĐžŅŅĐŊŅŅŅŅŅŅ ĐŋŅСĐŊŅŅĐĩ Ņ ŅОСŅиŅĐĩĐŊŅĐš Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ](../advanced/response-directly.md){.internal-link target=_blank}.
+
+{* ../../docs_src/response_model/tutorial003_02.py hl[8,10:11] *}
+
+ĐĻĐĩĐš ĐŋŅĐžŅŅиК виĐŋадОĐē авŅĐžĐŧаŅиŅĐŊĐž ОйŅОйĐģŅŅŅŅŅŅ FastAPI, ŅĐžĐŧŅ ŅĐž аĐŊĐžŅаŅŅŅ ŅиĐŋŅ ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ â ŅĐĩ ĐēĐģĐ°Ņ (айО ĐŋŅĐ´ĐēĐģаŅ) `Response`.
+
+Đ ŅĐŊŅŅŅŅĐŧĐĩĐŊŅи ŅаĐēĐžĐļ ĐąŅĐ´ŅŅŅ ĐˇĐ°Đ´ĐžĐ˛ĐžĐģĐĩĐŊŅ, йО Ņ `RedirectResponse`, Ņ `JSONResponse` Ņ ĐŋŅĐ´ĐēĐģаŅаĐŧи `Response`, ĐžŅĐļĐĩ аĐŊĐžŅаŅŅŅ ŅиĐŋŅ ĐēĐžŅĐĩĐēŅĐŊа.
+
+### ĐĐŊĐžŅаŅŅŅ ĐŋŅĐ´ĐēĐģаŅŅ Response
+
+ĐĸаĐēĐžĐļ ĐŧĐžĐļĐŊа виĐēĐžŅиŅŅОвŅваŅи ĐŋŅĐ´ĐēĐģĐ°Ņ `Response` Ņ Đ°ĐŊĐžŅаŅŅŅ ŅиĐŋŅ:
+
+{* ../../docs_src/response_model/tutorial003_03.py hl[8:9] *}
+
+ĐĻĐĩ ŅĐĩĐļ ĐŋŅаŅŅваŅиĐŧĐĩ, йО `RedirectResponse` â ĐŋŅĐ´ĐēĐģĐ°Ņ `Response`, Ņ FastAPI авŅĐžĐŧаŅиŅĐŊĐž ОйŅОйиŅŅ ŅĐĩĐš ĐŋŅĐžŅŅиК виĐŋадОĐē.
+
+### ĐĐĩĐēĐžŅĐĩĐēŅĐŊŅ Đ°ĐŊĐžŅаŅŅŅ ŅиĐŋŅ ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ
+
+ĐĐģĐĩ ĐēĐžĐģи Đи ĐŋОвĐĩŅŅаŅŅĐĩ ŅĐēиКŅŅ ŅĐŊŅиК дОвŅĐģŅĐŊиК ОйâŅĐēŅ, ŅĐž ĐŊĐĩ Ņ Đ˛Đ°ĐģŅĐ´ĐŊиĐŧ ŅиĐŋĐžĐŧ Pydantic (ĐŊаĐŋŅиĐēĐģад, ОйâŅĐēŅ ĐąĐ°ĐˇĐ¸ даĐŊиŅ
), Ņ Đ°ĐŊĐžŅŅŅŅĐĩ ĐšĐžĐŗĐž ŅаĐē Ņ ŅŅĐŊĐēŅŅŅ, FastAPI ŅĐŋŅОйŅŅ ŅŅвОŅиŅи Pydantic ĐŧОдĐĩĐģŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ ĐŊа ĐžŅĐŊĐžĐ˛Ņ ŅŅŅŅ Đ°ĐŊĐžŅаŅŅŅ ŅиĐŋŅ, Ņ ŅĐĩ СавĐĩŅŅиŅŅŅŅ ĐŋĐžĐŧиĐģĐēĐžŅ.
+
+ĐĸĐĩ ŅаĐŧĐĩ ŅŅаĐŊĐĩŅŅŅŅ, ŅĐēŅĐž Đи виĐēĐžŅиŅŅОвŅŅŅĐĩ union ĐŧŅĐļ ŅŅСĐŊиĐŧи ŅиĐŋаĐŧи, Đ´Đĩ ОдиĐŊ айО ĐąŅĐģŅŅĐĩ ĐŊĐĩ Ņ Đ˛Đ°ĐģŅĐ´ĐŊиĐŧи ŅиĐŋаĐŧи Pydantic, ĐŊаĐŋŅиĐēĐģад, ŅĐĩ ŅĐŋŅиŅиĐŊиŅŅ ĐŋĐžĐŧиĐģĐēŅ đĨ:
+
+{* ../../docs_src/response_model/tutorial003_04_py310.py hl[8] *}
+
+...ŅĐĩ ĐŊĐĩ ĐŋŅаŅŅŅ, ŅĐžĐŧŅ ŅĐž ŅиĐŋ аĐŊĐžŅаŅŅŅ ĐŊĐĩ Ņ ŅиĐŋĐžĐŧ Pydantic Ņ ĐŊĐĩ Ņ ĐŋŅĐžŅŅĐž ĐēĐģаŅĐžĐŧ `Response` айО ĐšĐžĐŗĐž ĐŋŅĐ´ĐēĐģаŅĐžĐŧ, а Ņ ĐžĐąâŅĐ´ĐŊаĐŊĐŊŅĐŧ (union) â айО `Response`, айО `dict`.
+
+### ĐŅĐ´ĐēĐģŅŅĐĩĐŊĐŊŅ ĐОдĐĩĐģŅ ĐŅĐ´ĐŋОвŅĐ´Ņ
+
+ĐŅОдОвĐļŅŅŅи ĐŋŅиĐēĐģад виŅĐĩ, ĐŧĐžĐļĐģивО, Đи ĐŊĐĩ Ņ
ĐžŅĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи ŅŅаĐŊдаŅŅĐŊŅ Đ˛Đ°ĐģŅдаŅŅŅ Đ´Đ°ĐŊиŅ
, авŅĐžĐŧаŅиŅĐŊŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ, ŅŅĐģŅŅŅаŅŅŅ ŅĐžŅĐž, ŅĐēŅ FastAPI виĐēĐžĐŊŅŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ.
+
+ĐĐģĐĩ ви вŅĐĩ ОдĐŊĐž ĐŧĐžĐļĐĩŅĐĩ СаĐģиŅиŅи аĐŊĐžŅаŅŅŅ ŅиĐŋŅ Ņ ŅŅĐŊĐēŅŅŅ, ŅОй СйĐĩŅĐĩĐŗŅи ĐŋŅĐ´ŅŅиĐŧĐēŅ Đˇ йОĐēŅ ŅĐŊŅŅŅŅĐŧĐĩĐŊŅŅв, ŅаĐēиŅ
ŅĐē ŅĐĩдаĐēŅĐžŅи ĐēĐžĐ´Ņ Đ°ĐąĐž ŅŅаŅиŅĐŊŅ ĐŋĐĩŅĐĩвŅŅĐēи ŅиĐŋŅв (ĐŊаĐŋŅиĐēĐģад, mypy).
+
+ĐŖ ŅаĐēĐžĐŧŅ Đ˛Đ¸ĐŋадĐēŅ Đ˛Đ¸ ĐŧĐžĐļĐĩŅĐĩ виĐŧĐēĐŊŅŅи ĐŗĐĩĐŊĐĩŅаŅŅŅ ĐŧОдĐĩĐģŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ, вŅŅаĐŊОвивŅи `response_model=None`:
+
+{* ../../docs_src/response_model/tutorial003_05_py310.py hl[7] *}
+
+ĐĻĐĩ СĐŧŅŅиŅŅ FastAPI ĐŋŅĐžĐŋŅŅŅиŅи ĐŗĐĩĐŊĐĩŅаŅŅŅ ĐŧОдĐĩĐģŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ, Ņ ŅаĐēиĐŧ ŅиĐŊĐžĐŧ Đи СĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи ĐąŅĐ´Ņ-ŅĐēŅ Đ°ĐŊĐžŅаŅŅŅ ŅиĐŋŅв ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ ĐąĐĩС вĐŋĐģĐ¸Đ˛Ņ ĐŊа ваŅŅ FastAPI аĐŋĐģŅĐēаŅŅŅ. đ¤
+
+## ĐаŅаĐŧĐĩŅŅи ĐēОдŅваĐŊĐŊŅ ĐŧОдĐĩĐģŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ
+
+ĐаŅа ĐŧОдĐĩĐģŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ ĐŧĐžĐļĐĩ ĐŧаŅи СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ, ĐŊаĐŋŅиĐēĐģад:
+
+{* ../../docs_src/response_model/tutorial004_py310.py hl[9,11:12] *}
+
+* `description: Union[str, None] = None` (айО `str | None = None` Ņ Python 3.10) ĐŧĐ°Ņ ĐˇĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ `None`.
+* `tax: float = 10.5` ĐŧĐ°Ņ ĐˇĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ `10.5`.
+* `tags: List[str] = []` ĐŧĐ°Ņ ĐˇĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ ĐŋĐžŅĐžĐļĐŊŅĐš ŅĐŋиŅĐžĐē: `[]`.
+
+ĐĐģĐĩ Đи ĐŧĐžĐļĐĩŅĐĩ СаŅ
ĐžŅŅŅи ĐŊĐĩ вĐēĐģŅŅаŅи ŅŅ
Ņ ŅĐĩСŅĐģŅŅаŅ, ŅĐēŅĐž вОĐŊи ŅаĐēŅиŅĐŊĐž ĐŊĐĩ ĐąŅĐģи СйĐĩŅĐĩĐļĐĩĐŊŅ.
+
+ĐаĐŋŅиĐēĐģад, ŅĐēŅĐž Ņ ĐĐ°Ņ Ņ ĐŧОдĐĩĐģŅ Đˇ ĐąĐ°ĐŗĐ°ŅŅĐŧа ĐŊĐĩОйОвâŅСĐēОвиĐŧи аŅŅийŅŅаĐŧи Ņ NoSQL ĐąĐ°ĐˇŅ Đ´Đ°ĐŊиŅ
, аĐģĐĩ Đи ĐŊĐĩ Ņ
ĐžŅĐĩŅĐĩ вŅĐ´ĐŋŅавĐģŅŅи Đ´ŅĐļĐĩ Đ´ĐžĐ˛ĐŗŅ JSON-вŅĐ´ĐŋОвŅĐ´Ņ, ĐŋОвĐŊŅ ĐˇĐŊаŅĐĩĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ.
+
+### ĐиĐēĐžŅиŅŅОвŅĐšŅĐĩ ĐŋаŅаĐŧĐĩŅŅ `response_model_exclude_unset`
+
+Đи ĐŧĐžĐļĐĩŅĐĩ вŅŅаĐŊОвиŅи ĐŋаŅаĐŧĐĩŅŅ Đ´ĐĩĐēĐžŅаŅĐžŅа ŅĐģŅŅ
Ņ `response_model_exclude_unset=True`:
+
+{* ../../docs_src/response_model/tutorial004_py310.py hl[22] *}
+
+Ņ ŅŅ ĐˇĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ ĐŊĐĩ ĐąŅĐ´ŅŅŅ Đ˛ĐēĐģŅŅĐĩĐŊŅ Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ, ŅŅĐģŅĐēи ŅаĐēŅиŅĐŊĐž вŅŅаĐŊОвĐģĐĩĐŊŅ ĐˇĐŊаŅĐĩĐŊĐŊŅ.
+
+ĐŅĐļĐĩ, ŅĐēŅĐž Đи ĐŊадŅŅĐģĐĩŅĐĩ СаĐŋĐ¸Ņ Đ´Đž ŅŅĐžĐŗĐž ĐžĐŋĐĩŅаŅĐžŅа ŅĐģŅŅ
Ņ Đ´ĐģŅ ĐĩĐģĐĩĐŧĐĩĐŊŅа С item_id `foo`, вŅĐ´ĐŋОвŅĐ´Ņ (ĐąĐĩС вĐēĐģŅŅĐĩĐŊĐŊŅ ĐˇĐŊаŅĐĩĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ) ĐąŅĐ´Đĩ:
+
+```JSON
+{
+ "name": "Foo",
+ "price": 50.2
+}
+```
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+ĐŖ Pydantic вĐĩŅŅŅŅ 1 ĐŧĐĩŅОд ĐŊаСивавŅŅ `.dict()`, вŅĐŊ ĐąŅв СаŅŅаŅŅĐģиК (аĐģĐĩ ŅĐĩ ĐŋŅĐ´ŅŅиĐŧŅŅŅŅŅŅ) Ņ Pydantic вĐĩŅŅŅŅ 2 Ņ ĐŋĐĩŅĐĩĐšĐŧĐĩĐŊОваĐŊиК Ņ `.model_dump()`.
+
+ĐŅиĐēĐģади ŅŅŅ Đ˛Đ¸ĐēĐžŅиŅŅОвŅŅŅŅ `.dict()` Đ´ĐģŅ ŅŅĐŧŅŅĐŊĐžŅŅŅ Đˇ Pydantic v1, аĐģĐĩ ĐаĐŧ ŅĐģŅĐ´ виĐēĐžŅиŅŅОвŅваŅи `.model_dump()`, ŅĐēŅĐž Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи Pydantic v2.
+
+///
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+FastAPI виĐēĐžŅиŅŅОвŅŅ `.dict()` ĐŧОдĐĩĐģŅ Pydantic С ĐŋаŅаĐŧĐĩŅŅĐžĐŧ `exclude_unset` , ŅОй Đ´ĐžŅŅĐŗŅи ŅŅĐžĐŗĐž.
+
+///
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи:
+
+* `response_model_exclude_defaults=True`
+* `response_model_exclude_none=True`
+
+ŅĐē ĐžĐŋиŅаĐŊĐž в Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ Pydantic for `exclude_defaults` Ņа `exclude_none`.
+
+///
+
+#### ĐаĐŊŅ ĐˇŅ ĐˇĐŊаŅĐĩĐŊĐŊŅĐŧи Đ´ĐģŅ ĐŋĐžĐģŅв ŅС ŅиĐŋОвиĐŧи СĐŊаŅĐĩĐŊĐŊŅĐŧи
+
+ĐĐģĐĩ ŅĐēŅĐž ĐаŅŅ Đ´Đ°ĐŊŅ ĐŧаŅŅŅ ĐˇĐŊаŅĐĩĐŊĐŊŅ Đ´ĐģŅ ĐŋĐžĐģŅв ĐŧОдĐĩĐģŅ Đˇ ŅиĐŋОвиĐŧи СĐŊаŅĐĩĐŊĐŊŅĐŧи, ŅĐē Ņ ĐĩĐģĐĩĐŧĐĩĐŊŅа С item_id `bar`:
+
+```Python hl_lines="3 5"
+{
+ "name": "Bar",
+ "description": "The bartenders",
+ "price": 62,
+ "tax": 20.2
+}
+```
+вОĐŊи ĐąŅĐ´ŅŅŅ Đ˛ĐēĐģŅŅĐĩĐŊŅ Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ.
+
+#### ĐаĐŊŅ Đˇ ŅиĐŧи ŅаĐŧиĐŧи СĐŊаŅĐĩĐŊĐŊŅĐŧи, ŅĐž Đš ŅиĐŋОвŅ
+
+Đ¯ĐēŅĐž даĐŊŅ ĐŧаŅŅŅ ŅŅ ŅаĐŧŅ ĐˇĐŊаŅĐĩĐŊĐŊŅ, ŅĐž Đš ŅиĐŋОвŅ, ŅĐē Ņ ĐĩĐģĐĩĐŧĐĩĐŊŅа С item_id `baz`:
+
+```Python hl_lines="3 5-6"
+{
+ "name": "Baz",
+ "description": None,
+ "price": 50.2,
+ "tax": 10.5,
+ "tags": []
+}
+```
+
+FastAPI Đ´ĐžŅŅаŅĐŊŅĐž ŅОСŅĐŧĐŊиК (ĐŊаŅĐŋŅавдŅ, Pydantic Đ´ĐžŅŅаŅĐŊŅĐž ŅОСŅĐŧĐŊиК), ŅОй СŅОСŅĐŧŅŅи, ŅĐž, Ņ
ĐžŅа `description`, `tax` Ņ `tags` ĐŧаŅŅŅ ŅŅ ŅаĐŧŅ ĐˇĐŊаŅĐĩĐŊĐŊŅ, ŅĐž Đš ŅиĐŋОвŅ, вОĐŊи ĐąŅĐģи вŅŅаĐŊОвĐģĐĩĐŊŅ ŅвĐŊĐž (а ĐŊĐĩ вСŅŅŅ ŅĐē СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ).
+
+ĐŅĐļĐĩ, вОĐŊи ĐąŅĐ´ŅŅŅ Đ˛ĐēĐģŅŅĐĩĐŊŅ Ņ JSON-вŅĐ´ĐŋОвŅĐ´Ņ.
+
+/// tip | ĐĐžŅада
+
+ĐвĐĩŅĐŊŅŅŅ ŅĐ˛Đ°ĐŗŅ, ŅĐž ŅиĐŋĐžĐ˛Ņ ĐˇĐŊаŅĐĩĐŊĐŊŅ ĐŧĐžĐļŅŅŅ ĐąŅŅи ĐąŅĐ´Ņ-ŅĐēиĐŧи, ĐŊĐĩ ĐģиŅĐĩ `None`.
+
+ĐĻĐĩ ĐŧĐžĐļĐĩ ĐąŅŅи list (`[]`), `float` 10.5 ŅĐžŅĐž.
+
+///
+
+### `response_model_include` Ņа `response_model_exclude`
+
+Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи ĐŋаŅаĐŧĐĩŅŅи *Đ´ĐĩĐēĐžŅаŅĐžŅа ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ* `response_model_include` Ņа `response_model_exclude`.
+
+ĐĐžĐŊи ĐŋŅиКĐŧаŅŅŅ `set` (ĐŧĐŊĐžĐļиĐŊŅ) ŅŅĐ´ĐēŅв (`str`) С ŅĐŧĐĩĐŊаĐŧи аŅŅийŅŅŅв, ŅĐēŅ ĐŋĐžŅŅŅĐąĐŊĐž вĐēĐģŅŅиŅи (ĐŋŅĐžĐŋŅŅĐēаŅŅи ŅĐŊŅŅ) айО виĐēĐģŅŅиŅи (вĐēĐģŅŅаŅŅи ŅĐŊŅŅ).
+
+ĐĻĐĩ ĐŧĐžĐļĐŊа виĐēĐžŅиŅŅОвŅваŅи ŅĐē ŅвидĐēиК ŅĐŋĐžŅŅĐą, ŅĐēŅĐž Ņ ĐĐ°Ņ Ņ ĐģиŅĐĩ ОдĐŊа ĐŧОдĐĩĐģŅ Pydantic Ņ Đи Ņ
ĐžŅĐĩŅĐĩ видаĐģиŅи Đ´ĐĩŅĐēŅ Đ´Đ°ĐŊŅ Đˇ вивОдŅ.
+
+/// tip | ĐĐžŅада
+
+ĐĐģĐĩ вŅĐĩ Đļ ŅĐĩĐēĐžĐŧĐĩĐŊĐ´ŅŅŅŅŅŅ Đ˛Đ¸ĐēĐžŅиŅŅОвŅваŅи ĐžĐŋиŅаĐŊŅ Đ˛Đ¸ŅĐĩ ĐŋŅĐ´Ņ
Оди, ŅС СаŅŅĐžŅŅваĐŊĐŊŅĐŧ ĐēŅĐģŅĐēĐžŅ
ĐēĐģаŅŅв, СаĐŧŅŅŅŅ ŅиŅ
ĐŋаŅаĐŧĐĩŅŅŅв.
+
+
+ĐĻĐĩ ŅĐžĐŧŅ, ŅĐž JSON Schema, ŅĐēиК ĐŗĐĩĐŊĐĩŅŅŅŅŅŅŅ Ņ Đ˛Đ°ŅĐžĐŧŅ OpenAPI дОдаŅĐēŅ (Ņ Đ˛ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ), вŅĐĩ ОдĐŊĐž ĐąŅĐ´Đĩ вŅĐ´ĐŋОвŅдаŅи ĐŋОвĐŊŅĐš ĐŧОдĐĩĐģŅ, ĐŊавŅŅŅ ŅĐēŅĐž Đи виĐēĐžŅиŅŅОвŅŅŅĐĩ `response_model_include` айО `response_model_exclude` Đ´ĐģŅ Đ˛Đ¸ĐēĐģŅŅĐĩĐŊĐŊŅ Đ´ĐĩŅĐēиŅ
аŅŅийŅŅŅв.
+
+ĐĻĐĩ ŅаĐēĐžĐļ ŅŅĐžŅŅŅŅŅŅŅ `response_model_by_alias`, ŅĐēиК ĐŋŅаŅŅŅ ĐŋОдŅĐąĐŊиĐŧ ŅиĐŊĐžĐŧ.
+
+///
+
+{* ../../docs_src/response_model/tutorial005_py310.py hl[29,35] *}
+
+/// tip | ĐĐžŅада
+
+ХиĐŊŅаĐēŅĐ¸Ņ `{"name", "description"}` ŅŅвОŅŅŅ `set` С ŅиĐŧи двОĐŧа СĐŊаŅĐĩĐŊĐŊŅĐŧи.
+
+ĐŅĐŊ ĐĩĐēвŅваĐģĐĩĐŊŅĐŊиК `set(["name", "description"])`.
+
+///
+
+#### ĐиĐēĐžŅиŅŅаĐŊĐŊŅ `list` СаĐŧŅŅŅŅ `set`
+
+Đ¯ĐēŅĐž Đи СайŅĐ´ĐĩŅĐĩ виĐēĐžŅиŅŅаŅи `set` Ņ ĐŊаŅĐžĐŧŅŅŅŅ ĐˇĐ°ŅŅĐžŅŅŅŅĐĩ `list` айО `tuple`, FastAPI вŅĐĩ ОдĐŊĐž ĐŋĐĩŅĐĩŅвОŅиŅŅ ŅĐĩ ĐŊа `set`, Ņ Đ˛ŅĐĩ ĐŋŅаŅŅваŅиĐŧĐĩ ĐŋŅавиĐģŅĐŊĐž:
+
+{* ../../docs_src/response_model/tutorial006_py310.py hl[29,35] *}
+
+## ĐŅĐ´ŅŅĐŧĐžĐē
+
+ĐиĐēĐžŅиŅŅОвŅĐšŅĐĩ ĐŋаŅаĐŧĐĩŅŅ `response_model` *Đ´ĐĩĐēĐžŅаŅĐžŅа ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ*, ŅОй виСĐŊаŅаŅи ĐŧОдĐĩĐģŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ, ĐžŅОйĐģивО ŅОй ĐŗĐ°ŅаĐŊŅŅваŅи ŅŅĐģŅŅŅаŅŅŅ ĐŋŅиваŅĐŊиŅ
даĐŊиŅ
.
+
+ĐиĐēĐžŅиŅŅОвŅĐšŅĐĩ `response_model_exclude_unset`, ŅОй ĐŋОвĐĩŅŅаŅи ĐģиŅĐĩ ŅвĐŊĐž вŅŅаĐŊОвĐģĐĩĐŊŅ ĐˇĐŊаŅĐĩĐŊĐŊŅ.
diff --git a/docs/uk/docs/tutorial/response-status-code.md b/docs/uk/docs/tutorial/response-status-code.md
new file mode 100644
index 000000000..1ed69d6f2
--- /dev/null
+++ b/docs/uk/docs/tutorial/response-status-code.md
@@ -0,0 +1,100 @@
+# ĐĄŅаŅŅŅ ĐēОди ĐŅĐ´ĐŋОвŅĐ´ĐĩĐš
+
+ĐĸаĐē ŅаĐŧĐž ŅĐē Đи ĐŧĐžĐļĐĩŅĐĩ вĐēаСаŅи ĐŧОдĐĩĐģŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ, Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ ĐžĐŗĐžĐģĐžŅиŅи HTTP ĐēОд ŅŅаŅŅŅŅ Đ´ĐģŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ ĐˇĐ° Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ ĐŋаŅаĐŧĐĩŅŅа `status_code` в ĐąŅĐ´Ņ-ŅĐēŅĐš С *ĐžĐŋĐĩŅаŅŅĐš ŅĐģŅŅ
Ņ*:
+
+* `@app.get()`
+* `@app.post()`
+* `@app.put()`
+* `@app.delete()`
+* ŅĐžŅĐž.
+
+{* ../../docs_src/response_status_code/tutorial001.py hl[6] *}
+
+/// note | ĐĐžŅаŅĐēа
+
+ĐвĐĩŅĐŊŅŅŅ ŅĐ˛Đ°ĐŗŅ, ŅĐž `status_code` Ņ ĐŋаŅаĐŧĐĩŅŅĐžĐŧ ĐŧĐĩŅĐžĐ´Ņ "Đ´ĐĩĐēĐžŅаŅĐžŅа" (`get`, `post` Ņ Ņ.Đ´.), а ĐŊĐĩ ĐаŅĐžŅ *ŅŅĐŊĐēŅŅŅ ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ*, ŅĐē ŅŅŅ ŅĐŊŅŅ ĐŋаŅаĐŧĐĩŅŅи Ņа ŅŅĐģĐž СаĐŋиŅŅ.
+
+///
+
+ĐаŅаĐŧĐĩŅŅ `status_code` ĐŋŅиКĐŧĐ°Ņ ŅиŅĐģĐž, ŅĐēĐĩ вŅĐ´ĐŋОвŅĐ´Đ°Ņ HTTP ĐēĐžĐ´Ņ ŅŅаŅŅŅŅ.
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+`status_code` ŅаĐēĐžĐļ ĐŧĐžĐļĐĩ ĐžŅŅиĐŧŅваŅи СĐŊаŅĐĩĐŊĐŊŅ Đˇ `IntEnum`, ĐŊаĐŋŅиĐēĐģад, С Python `http.HTTPStatus` .
+
+///
+
+ĐŅĐŊ ĐąŅĐ´Đĩ:
+
+* ĐОвĐĩŅŅаŅи вĐēаСаĐŊиК ĐēОд ŅŅаŅŅŅŅ Ņ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ.
+* ĐĐžĐēŅĐŧĐĩĐŊŅŅваŅи ĐšĐžĐŗĐž ŅĐē ŅаĐēиК Ņ ŅŅ
ĐĩĐŧŅ OpenAPI (Ņ, ŅаĐēиĐŧ ŅиĐŊĐžĐŧ, в ŅĐŊŅĐĩŅŅĐĩĐšŅŅ ĐēĐžŅиŅŅŅваŅа):
+
+
+
+/// note | ĐĐžŅаŅĐēа
+
+ĐĐĩŅĐēŅ ĐēОди вŅĐ´ĐŋОвŅĐ´Ņ (див. ĐŊаŅŅŅĐŋĐŊиК ŅОСдŅĐģ) вĐēаСŅŅŅŅ, ŅĐž вŅĐ´ĐŋОвŅĐ´Ņ ĐŊĐĩ ĐŧĐ°Ņ ŅŅĐģа.
+
+FastAPI СĐŊĐ°Ņ ĐŋŅĐž ŅĐĩ Ņ ŅŅвОŅиŅŅ OpenAPI Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ, ŅĐēа вĐēаСŅŅ, ŅĐž ŅŅĐģа вŅĐ´ĐŋОвŅĐ´Ņ ĐŊĐĩĐŧаŅ.
+
+///
+
+## ĐŅĐž HTTP ŅŅаŅŅŅ ĐēОди
+
+/// note | ĐĐžŅаŅĐēа
+
+Đ¯ĐēŅĐž Đи вĐļĐĩ СĐŊаŅŅĐĩ, ŅĐž ŅаĐēĐĩ HTTP ĐēОди ŅŅаŅŅŅŅ, ĐŋĐĩŅĐĩŅ
ОдŅŅĐĩ Đ´Đž ĐŊаŅŅŅĐŋĐŊĐžĐŗĐž ŅОСдŅĐģŅ.
+
+///
+
+Đ HTTP Đи ĐŊадŅиĐģаŅŅĐĩ ŅиŅĐģОвиК ĐēОд ŅŅаŅŅŅŅ Đˇ 3 ŅиŅŅ ŅĐē ŅаŅŅиĐŊŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ.
+
+ĐĻŅ ĐēОди ŅŅаŅŅŅŅ ĐŧаŅŅŅ ĐŋОвâŅСаĐŊŅ ĐŊĐ°ĐˇĐ˛Ņ Đ´ĐģŅ ŅŅ
ŅОСĐŋŅСĐŊаваĐŊĐŊŅ, аĐģĐĩ ĐŊаКваĐļĐģивŅŅĐžŅ ŅаŅŅиĐŊĐžŅ Ņ ŅаĐŧĐĩ ŅиŅĐģĐž.
+
+ĐĐžŅĐžŅĐēĐž:
+
+* **`100 - 199`** "ĐĐŊŅĐžŅĐŧаŅŅĐšĐŊŅ" вŅĐ´ĐŋОвŅĐ´Ņ. Đи ŅŅĐ´ĐēĐž виĐēĐžŅиŅŅОвŅŅŅĐĩ ŅŅ
ĐŊаĐŋŅŅĐŧŅ. ĐŅĐ´ĐŋОвŅĐ´Ņ Đˇ ŅаĐēиĐŧи ĐēОдаĐŧи ĐŊĐĩ ĐŧĐžĐļŅŅŅ ĐŧаŅи ŅŅĐģа.
+* **`200 - 299`** "ĐŖŅĐŋŅŅĐŊŅ" вŅĐ´ĐŋОвŅĐ´Ņ. ĐĻĐĩ ŅŅ, ŅĐēŅ Đи виĐēĐžŅиŅŅОвŅваŅиĐŧĐĩŅĐĩ ĐŊаКŅаŅŅŅŅĐĩ.
+ * `200` - ĐēОд Са СаĐŧОвŅŅваĐŊĐŊŅĐŧ, ŅĐēиК ОСĐŊаŅаŅ, ŅĐž вŅĐĩ ĐŋŅОКŅĐģĐž "OK".
+ * ĐĐŊŅиК ĐŋŅиĐēĐģад â `201`, "Created" (ŅŅвОŅĐĩĐŊĐž). ĐĐžĐŗĐž СаСвиŅаК виĐēĐžŅиŅŅОвŅŅŅŅ ĐŋŅŅĐģŅ ŅŅвОŅĐĩĐŊĐŊŅ ĐŊĐžĐ˛ĐžĐŗĐž СаĐŋиŅŅ Đ˛ ĐąĐ°ĐˇŅ Đ´Đ°ĐŊиŅ
.
+ * ĐŅОйĐģивиК виĐŋадОĐē â `204`, "No Content" (ĐŊĐĩĐŧĐ°Ņ Đ˛ĐŧŅŅŅŅ). ĐĻŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ Đ˛Đ¸ĐēĐžŅиŅŅОвŅŅŅŅŅŅ, ĐēĐžĐģи ĐŊĐĩĐŧĐ°Ņ Đ´Đ°ĐŊиŅ
Đ´ĐģŅ ĐŋОвĐĩŅĐŊĐĩĐŊĐŊŅ ĐēĐģŅŅĐŊŅŅ, ŅĐžĐŧŅ Đ˛ŅĐ´ĐŋОвŅĐ´Ņ ĐŊĐĩ ĐŋОвиĐŊĐŊа ĐŧаŅи ŅŅĐģа.
+* **`300 - 399`** "ĐĐĩŅĐĩĐŊаĐŋŅавĐģĐĩĐŊĐŊŅ". ĐŅĐ´ĐŋОвŅĐ´Ņ Đˇ ŅиĐŧи ĐēОдаĐŧи ĐŧĐžĐļŅŅŅ ĐŧаŅи айО ĐŊĐĩ ĐŧаŅи ŅŅĐģа, Са виĐŊŅŅĐēĐžĐŧ `304`, "Not Modified" (ĐŊĐĩ СĐŧŅĐŊĐĩĐŊĐž), ŅĐēа ĐŊĐĩ ĐŋОвиĐŊĐŊа ĐŧаŅи ŅŅĐģа.
+* **`400 - 499`** "ĐĐžĐŧиĐģĐēа ĐēĐģŅŅĐŊŅа". ĐĻĐĩ Đ´ŅŅĐŗĐ¸Đš ŅиĐŋ, ŅĐēиК Đи, ĐšĐŧОвŅŅĐŊĐž, ĐąŅĐ´ĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи ĐŊаКŅаŅŅŅŅĐĩ.
+ * ĐŅиĐēĐģад `404`, "Not Found" (ĐŊĐĩ СĐŊаКдĐĩĐŊĐž).
+ * ĐĐģŅ ĐˇĐ°ĐŗĐ°ĐģŅĐŊиŅ
ĐŋĐžĐŧиĐģĐžĐē ĐēĐģŅŅĐŊŅа ĐŧĐžĐļĐŊа виĐēĐžŅиŅŅОвŅваŅи `400`.
+* `500 - 599` "ĐĐžĐŧиĐģĐēи ŅĐĩŅвĐĩŅа". Đи ĐŧаКĐļĐĩ ĐŊŅĐēĐžĐģи ĐŊĐĩ виĐēĐžŅиŅŅОвŅŅŅĐĩ ŅŅ
ĐŊаĐŋŅŅĐŧŅ. Đ¯ĐēŅĐž в ĐēĐžĐ´Ņ ĐаŅĐžĐŗĐž СаŅŅĐžŅŅĐŊĐēŅ Đ°ĐąĐž ĐŊа ŅĐĩŅвĐĩŅŅ ŅĐžŅŅ ĐŋŅŅĐģĐž ĐŊĐĩ ŅаĐē, авŅĐžĐŧаŅиŅĐŊĐž ĐąŅĐ´Đĩ ĐŋОвĐĩŅĐŊĐĩĐŊĐž ОдиĐŊ ŅС ŅиŅ
ĐēОдŅв ŅŅаŅŅŅŅ.
+
+/// tip | ĐĐžŅада
+
+ЊОй Đ´ŅСĐŊаŅиŅŅ ĐąŅĐģŅŅĐĩ ĐŋŅĐž ĐēĐžĐļĐĩĐŊ ĐēОд ŅŅаŅŅŅŅ Ņ ĐŋŅиСĐŊаŅĐĩĐŊĐŊŅ ĐēĐžĐļĐŊĐžĐŗĐž С ĐŊиŅ
, ĐŋĐĩŅĐĩĐŗĐģŅĐŊŅŅĐĩ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ MDN ĐŋŅĐž HTTP ĐēОди ŅŅаŅŅŅŅ .
+
+///
+
+## ĐĐĩĐŗĐēиК ŅĐŋĐžŅŅĐą СаĐŋаĐŧ'ŅŅаŅи ĐŊаСви
+
+Đ ĐžĐˇĐŗĐģŅĐŊĐĩĐŧĐž ŅĐĩ ŅаС ĐŋĐžĐŋĐĩŅĐĩĐ´ĐŊŅĐš ĐŋŅиĐēĐģад:
+
+{* ../../docs_src/response_status_code/tutorial001.py hl[6] *}
+
+`201` - ŅĐĩ ĐēОд ŅŅаŅŅŅŅ Đ´ĐģŅ "Created" (ŅŅвОŅĐĩĐŊĐž).
+
+ĐĐģĐĩ ĐаĐŧ ĐŊĐĩ ĐŋĐžŅŅŅĐąĐŊĐž СаĐŋаĐŧ'ŅŅОвŅваŅи, ŅĐž ОСĐŊаŅĐ°Ņ ĐēĐžĐļĐĩĐŊ ŅС ŅиŅ
ĐēОдŅв.
+
+Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи СŅŅŅĐŊŅ ĐˇĐŧŅĐŊĐŊŅ Đˇ `fastapi.status`
+
+{* ../../docs_src/response_status_code/tutorial002.py hl[1,6] *}
+
+ĐĻŅ ĐˇĐŧŅĐŊĐŊŅ ĐŋŅĐžŅŅĐž Đ´ĐģŅ ĐˇŅŅŅĐŊĐžŅŅŅ. ĐĐžĐŊи ĐŧŅŅŅŅŅŅ ŅŅ Đļ ŅаĐŧŅ ŅиŅĐģа, аĐģĐĩ Đи ĐŧĐžĐļĐĩŅĐĩ ŅĐēĐžŅиŅŅаŅиŅŅ Đ°Đ˛ŅОСаĐŋОвĐŊĐĩĐŊĐŊŅĐŧ в ŅĐĩдаĐēŅĐžŅŅ:
+
+
+
+/// note | ĐĸĐĩŅ
ĐŊŅŅĐŊŅ Đ´ĐĩŅаĐģŅ
+
+Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅаŅи `from starlette import status`.
+
+**FastAPI** ĐŊĐ°Đ´Đ°Ņ ŅŅ Đļ ŅаĐŧŅ ĐˇĐŧŅĐŊĐŊŅ `starlette.status` ŅĐē `fastapi.status`, ĐŋŅĐžŅŅĐž Đ´ĐģŅ ĐˇŅŅŅĐŊĐžŅŅŅ ŅОСŅОйĐŊиĐēа. ĐĐ´ĐŊаĐē вОĐŊи ĐŋĐžŅ
ОдŅŅŅ ĐąĐĩСĐŋĐžŅĐĩŅĐĩĐ´ĐŊŅĐž ĐˇŅ Starlette.
+
+///
+
+## ĐĐŧŅĐŊа СĐŊаŅĐĩĐŊĐŊŅ ĐˇĐ° СаĐŧОвŅŅваĐŊĐŊŅĐŧ
+
+ĐаĐģŅ, Ņ ĐĐžŅŅĐąĐŊиĐēŅ Đ´ĐģŅ Đ´ĐžŅвŅĐ´ŅĐĩĐŊиŅ
ĐēĐžŅиŅŅŅваŅŅв{.internal-link target=_blank}, Đи Đ´ŅСĐŊаŅŅĐĩŅŅ, ŅĐē ĐŋОвĐĩŅĐŊŅŅи ŅĐŊŅиК ĐēОд ŅŅаŅŅŅŅ, ĐŊŅĐļ ŅОК, ŅĐēиК Đи ĐžĐŗĐžĐģĐžŅиĐģи ŅŅŅ.
diff --git a/docs/uk/docs/tutorial/schema-extra-example.md b/docs/uk/docs/tutorial/schema-extra-example.md
new file mode 100644
index 000000000..853fd5e65
--- /dev/null
+++ b/docs/uk/docs/tutorial/schema-extra-example.md
@@ -0,0 +1,222 @@
+# ĐĐĩĐēĐģаŅŅваĐŊĐŊŅ ĐŋŅиĐēĐģадŅв вŅ
ŅĐ´ĐŊиŅ
даĐŊиŅ
+
+Đи ĐŧĐžĐļĐĩŅĐĩ СадаŅи ĐŋŅиĐēĐģади даĐŊиŅ
, ŅĐēŅ ĐĐ°Ņ ĐˇĐ°ŅŅĐžŅŅĐŊĐžĐē ĐŧĐžĐļĐĩ ĐžŅŅиĐŧŅваŅи.
+
+ĐŅŅ ĐēŅĐģŅĐēа ŅĐŋĐžŅОйŅв, ŅĐē ŅĐĩ СŅОйиŅи.
+
+## ĐОдаŅĐēĐžĐ˛Ņ Đ´Đ°ĐŊŅ JSON-ŅŅ
ĐĩĐŧи в ĐŧОдĐĩĐģŅŅ
Pydantic
+
+Đи ĐŧĐžĐļĐĩŅĐĩ СадаŅи `examples` Đ´ĐģŅ ĐŧОдĐĩĐģŅ Pydantic, ŅĐēŅ ĐąŅĐ´Đĩ дОдаĐŊĐž Đ´Đž ĐˇĐŗĐĩĐŊĐĩŅОваĐŊĐžŅ JSON-ŅŅ
ĐĩĐŧи.
+
+//// tab | Pydantic v2
+
+{* ../../docs_src/schema_extra_example/tutorial001_py310.py hl[13:24] *}
+
+////
+
+//// tab | Pydantic v1
+
+{* ../../docs_src/schema_extra_example/tutorial001_pv1_py310.py hl[13:23] *}
+
+////
+
+ĐĻŅ Đ´ĐžĐ´Đ°ŅĐēОва ŅĐŊŅĐžŅĐŧаŅŅŅ ĐąŅĐ´Đĩ дОдаĐŊа ŅĐē Ņ Đ´Đž **JSON-ŅŅ
ĐĩĐŧи**, Ņ Đ˛ĐžĐŊа ĐąŅĐ´Đĩ виĐēĐžŅиŅŅОвŅваŅиŅŅ Đ˛ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ Đ´Đž API.
+
+//// tab | Pydantic v2
+
+ĐŖ вĐĩŅŅŅŅ Pydantic 2 виĐēĐžŅиŅŅОвŅŅŅŅŅŅ Đ°ŅŅийŅŅ `model_config`, ŅĐēиК ĐŋŅиКĐŧĐ°Ņ `dict`, ŅĐē ĐžĐŋиŅаĐŊĐž в Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ Pydantic: ĐĐžĐŊŅŅĐŗŅŅаŅŅŅ .
+
+Đи ĐŧĐžĐļĐĩŅĐĩ вŅŅаĐŊОвиŅи `"json_schema_extra"` ŅĐē `dict`, ŅĐž ĐŧŅŅŅиŅŅ ĐąŅĐ´Ņ-ŅĐēŅ Đ´ĐžĐ´Đ°ŅĐēĐžĐ˛Ņ Đ´Đ°ĐŊŅ, ŅĐēŅ Đи Ņ
ĐžŅĐĩŅĐĩ вŅдОйŅаСиŅи Ņ ĐˇĐŗĐĩĐŊĐĩŅОваĐŊŅĐš JSON-ŅŅ
ĐĩĐŧŅ, вĐēĐģŅŅаŅŅи `examples`.
+
+////
+
+//// tab | Pydantic v1
+
+ĐŖ вĐĩŅŅŅŅ Pydantic 1 виĐēĐžŅиŅŅОвŅŅŅŅŅŅ Đ˛ĐŊŅŅŅŅŅĐŊŅĐš ĐēĐģĐ°Ņ `Config` Ņ ĐŋаŅаĐŧĐĩŅŅ `schema_extra`, ŅĐē ĐžĐŋиŅаĐŊĐž в Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ Pydantic: ĐаĐģаŅŅŅваĐŊĐŊŅ ŅŅ
ĐĩĐŧи .
+
+Đи ĐŧĐžĐļĐĩŅĐĩ СадаŅи `schema_extra` ŅĐē `dict`, ŅĐž ĐŧŅŅŅиŅŅ ĐąŅĐ´Ņ-ŅĐēŅ Đ´ĐžĐ´Đ°ŅĐēĐžĐ˛Ņ Đ´Đ°ĐŊŅ, ŅĐēŅ Đи Ņ
ĐžŅĐĩŅĐĩ йаŅиŅи Ņ ĐˇĐŗĐĩĐŊĐĩŅОваĐŊŅĐš JSON-ŅŅ
ĐĩĐŧŅ, вĐēĐģŅŅаŅŅи `examples`.
+
+////
+
+/// tip | ĐŅĐ´ĐēаСĐēа
+
+Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅаŅи ŅŅ Đļ ŅĐĩŅ
ĐŊŅĐēŅ, ŅОй ŅОСŅиŅиŅи JSON-ŅŅ
ĐĩĐŧŅ Ņ Đ´ĐžĐ´Đ°Ņи вĐģаŅĐŊŅ Đ´ĐžĐ´Đ°ŅĐēĐžĐ˛Ņ ŅĐŊŅĐžŅĐŧаŅŅŅ.
+
+ĐаĐŋŅиĐēĐģад, Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅаŅи ŅŅ Đ´ĐģŅ Đ´ĐžĐ´Đ°Đ˛Đ°ĐŊĐŊŅ ĐŧĐĩŅадаĐŊиŅ
Đ´ĐģŅ ŅĐŊŅĐĩŅŅĐĩĐšŅŅ ĐēĐžŅиŅŅŅваŅа ĐŊа ŅŅĐžĐŊŅĐĩĐŊĐ´Ņ ŅĐžŅĐž.
+
+///
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+OpenAPI 3.1.0 (ŅĐēиК виĐēĐžŅиŅŅОвŅŅŅŅŅŅ ĐŋĐžŅиĐŊаŅŅи С FastAPI 0.99.0) дОдав ĐŋŅĐ´ŅŅиĐŧĐēŅ `examples`, ŅĐž Ņ ŅаŅŅиĐŊĐžŅ ŅŅаĐŊдаŅŅŅ **JSON-ŅŅ
ĐĩĐŧи**.
+
+ĐĐž ŅŅĐžĐŗĐž ĐŋŅĐ´ŅŅиĐŧŅвавŅŅ ĐģиŅĐĩ ĐēĐģŅŅ `example` С ОдĐŊиĐŧ ĐŋŅиĐēĐģадОĐŧ. ĐŅĐŊ вŅĐĩ ŅĐĩ ĐŋŅĐ´ŅŅиĐŧŅŅŅŅŅŅ Đ˛ OpenAPI 3.1.0, аĐģĐĩ Ņ ĐˇĐ°ŅŅаŅŅĐģиĐŧ Ņ ĐŊĐĩ вŅ
ОдиŅŅ Đ´Đž ŅŅаĐŊдаŅŅŅ JSON Schema. ĐĸĐžĐŧŅ ŅĐĩĐēĐžĐŧĐĩĐŊĐ´ŅŅŅŅŅŅ ĐŋĐĩŅĐĩĐšŅи С `example` ĐŊа `examples`. đ¤
+
+ĐŅĐģŅŅĐĩ ĐŋŅĐž ŅĐĩ ĐŧĐžĐļĐŊа ĐŋŅĐžŅиŅаŅи в ĐēŅĐŊŅŅ ŅŅŅŅ ŅŅĐžŅŅĐŊĐēи.
+
+///
+
+## ĐОдаŅĐēĐžĐ˛Ņ Đ°ŅĐŗŅĐŧĐĩĐŊŅи `Field`
+
+ĐĐžĐģи ви виĐēĐžŅиŅŅОвŅŅŅĐĩ `Field()` Ņ ĐŧОдĐĩĐģŅŅ
Pydantic, Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ вĐēаСаŅи дОдаŅĐēĐžĐ˛Ņ `examples`:
+
+{* ../../docs_src/schema_extra_example/tutorial002_py310.py hl[2,8:11] *}
+
+## `examples` Ņ JSON-ŅŅ
ĐĩĐŧŅ â OpenAPI
+
+ĐŅи виĐēĐžŅиŅŅаĐŊĐŊŅ ĐąŅĐ´Ņ-ĐēĐžĐŗĐž С ĐŊаŅŅŅĐŋĐŊĐžĐŗĐž:
+
+* `Path()`
+* `Query()`
+* `Header()`
+* `Cookie()`
+* `Body()`
+* `Form()`
+* `File()`
+
+Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ СадаŅи ĐŊайŅŅ `examples` С дОдаŅĐēĐžĐ˛ĐžŅ ŅĐŊŅĐžŅĐŧаŅŅŅŅ, ŅĐēа ĐąŅĐ´Đĩ дОдаĐŊа Đ´Đž ŅŅ
ĐŊŅŅ
**JSON-ŅŅ
ĐĩĐŧ** Ņ **OpenAPI**.
+
+### `Body` С `examples`
+
+ĐĸŅŅ Đŧи ĐŋĐĩŅĐĩдаŅĐŧĐž `examples`, ŅĐēŅ ĐŧŅŅŅŅŅŅ ĐžĐ´Đ¸ĐŊ ĐŋŅиĐēĐģад ĐžŅŅĐēŅваĐŊиŅ
даĐŊиŅ
Ņ `Body()`:
+
+{* ../../docs_src/schema_extra_example/tutorial003_an_py310.py hl[22:29] *}
+
+### ĐŅиĐēĐģад Ņ UI Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ
+
+Đа Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ ĐąŅĐ´Ņ-ŅĐēĐžĐŗĐž С ĐŊавĐĩĐ´ĐĩĐŊиŅ
виŅĐĩ ĐŧĐĩŅОдŅв ŅĐĩ Đ˛Đ¸ĐŗĐģŅдаŅиĐŧĐĩ ŅаĐē Ņ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ ĐˇĐ° `/docs`:
+
+
+
+### `Body` С ĐēŅĐģŅĐēĐžĐŧа `examples`
+
+ĐвиŅаКĐŊĐž, Đи ŅаĐēĐžĐļ ĐŧĐžĐļĐĩŅĐĩ ĐŋĐĩŅĐĩдаŅи ĐēŅĐģŅĐēа `examples`:
+
+{* ../../docs_src/schema_extra_example/tutorial004_an_py310.py hl[23:38] *}
+
+ĐĐžĐģи Đи ŅĐĩ ŅОйиŅĐĩ, ĐŋŅиĐēĐģади ĐąŅĐ´ŅŅŅ ŅаŅŅиĐŊĐžŅ Đ˛ĐŊŅŅŅŅŅĐŊŅĐžŅ **JSON-ŅŅ
ĐĩĐŧи** Đ´ĐģŅ ŅиŅ
даĐŊиŅ
.
+
+ĐŅŅĐŧ, ĐŊа ĐŧĐžĐŧĐĩĐŊŅ ĐŊаĐŋиŅаĐŊĐŊŅ ŅŅĐžĐŗĐž (26 ŅĐĩŅĐŋĐŊŅ 2023 ), Swagger UI â ŅĐŊŅŅŅŅĐŧĐĩĐŊŅ, ŅĐēиК вŅĐ´ĐŋОвŅĐ´Đ°Ņ ĐˇĐ° вŅдОйŅаĐļĐĩĐŊĐŊŅ UI Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ â ĐŊĐĩ ĐŋŅĐ´ŅŅиĐŧŅŅ ĐŋĐžĐēаС ĐēŅĐģŅĐēĐžŅ
ĐŋŅиĐēĐģадŅв Ņ **JSON-ŅŅ
ĐĩĐŧи**. ĐĐģĐĩ ĐŊиĐļŅĐĩ ĐŧĐžĐļĐŊа ĐŋŅĐžŅиŅаŅи ĐŋŅĐž ОйŅ
ŅĐ´ĐŊиК ŅĐģŅŅ
.
+
+### ĐĄĐŋĐĩŅиŅŅŅĐŊŅ Đ´ĐģŅ OpenAPI `examples`
+
+ĐŠĐĩ Đ´Đž ŅĐžĐŗĐž, ŅĐē **JSON-ŅŅ
ĐĩĐŧа** ĐŋĐžŅаĐģа ĐŋŅĐ´ŅŅиĐŧŅваŅи `examples`, OpenAPI вĐļĐĩ ĐŧаĐģа ĐŋŅĐ´ŅŅиĐŧĐēŅ ĐŋĐžĐģŅ Đˇ ŅаĐēĐžŅ Đļ ĐŊĐ°ĐˇĐ˛ĐžŅ â `examples`.
+
+ĐĻĐĩ **ŅĐŋĐĩŅиŅŅŅĐŊĐĩ Đ´ĐģŅ OpenAPI** ĐŋĐžĐģĐĩ `examples` ŅОСĐŧŅŅŅŅŅŅŅŅ Đ˛ ŅĐŊŅŅĐš ŅаŅŅиĐŊŅ ŅĐŋĐĩŅиŅŅĐēаŅŅŅ OpenAPI â Ņ **Đ´ĐĩŅаĐģŅŅ
ĐēĐžĐļĐŊĐžŅ *ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ***, а ĐŊĐĩ вŅĐĩŅĐĩдиĐŊŅ ŅаĐŧĐžŅ JSON-ŅŅ
ĐĩĐŧи.
+
+Swagger UI вĐļĐĩ давĐŊĐž ĐŋŅĐ´ŅŅиĐŧŅŅ ŅĐĩ ĐŋĐžĐģĐĩ `examples`. ĐĸĐžĐŧŅ Đи ĐŧĐžĐļĐĩŅĐĩ виĐēĐžŅиŅŅОвŅваŅи ĐšĐžĐŗĐž, ŅОй **вŅдОйŅаĐļаŅи** ĐēŅĐģŅĐēа **ĐŋŅиĐēĐģадŅв Ņ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ**.
+
+ĐĻĐĩ ĐŋĐžĐģĐĩ `examples` Ņ ŅĐŋĐĩŅиŅŅĐēаŅŅŅ OpenAPI â ŅĐĩ `dict` (ŅĐģОвĐŊиĐē) С **ĐēŅĐģŅĐēĐžĐŧа ĐŋŅиĐēĐģадаĐŧи** (а ĐŊĐĩ ŅĐŋиŅĐžĐē `list`), ĐēĐžĐļĐĩĐŊ ŅС ŅĐēиŅ
ĐŧĐžĐļĐĩ ĐŧŅŅŅиŅи дОдаŅĐēĐžĐ˛Ņ ŅĐŊŅĐžŅĐŧаŅŅŅ, ŅĐž ĐąŅĐ´Đĩ дОдаĐŊа Đ´Đž **OpenAPI**.
+
+ĐĐžĐŊĐž ĐŊĐĩ вĐēĐģŅŅаŅŅŅŅŅ Đ´Đž JSON Schema ĐēĐžĐļĐŊĐžĐŗĐž ĐŋаŅаĐŧĐĩŅŅа, а ŅОСĐŧŅŅŅŅŅŅŅŅ ĐˇĐžĐ˛ĐŊŅ, ĐąĐĩСĐŋĐžŅĐĩŅĐĩĐ´ĐŊŅĐž в *ĐžĐŋĐĩŅаŅŅŅ ŅĐģŅŅ
Ņ*.
+
+### ĐиĐēĐžŅиŅŅаĐŊĐŊŅ ĐŋаŅаĐŧĐĩŅŅа `openapi_examples`
+
+Đи ĐŧĐžĐļĐĩŅĐĩ ĐžĐŗĐžĐģĐžŅиŅи ŅĐŋĐĩŅиŅŅŅĐŊŅ Đ´ĐģŅ OpenAPI `examples` Ņ FastAPI Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ ĐŋаŅаĐŧĐĩŅŅа `openapi_examples` Đ´ĐģŅ:
+
+* `Path()`
+* `Query()`
+* `Header()`
+* `Cookie()`
+* `Body()`
+* `Form()`
+* `File()`
+
+ĐĐģŅŅŅ ŅĐģОвĐŊиĐēа (`dict`) ŅĐ´ĐĩĐŊŅиŅŅĐēŅŅŅŅ ĐēĐžĐļĐĩĐŊ ĐŋŅиĐēĐģад, а ĐēĐžĐļĐŊĐĩ СĐŊаŅĐĩĐŊĐŊŅ `dict` â ĐēĐžĐļĐĩĐŊ ŅĐŋĐĩŅиŅŅŅĐŊиК ŅĐģОвĐŊиĐē `dict` в `examples` ĐŧĐžĐļĐĩ ĐŧŅŅŅиŅи:
+
+* `summary`: ĐēĐžŅĐžŅĐēиК ĐžĐŋĐ¸Ņ ĐŋŅиĐēĐģадŅ.
+* `description`: ŅĐžĐˇĐŗĐžŅĐŊŅŅиК ĐžĐŋĐ¸Ņ (ĐŧĐžĐļĐĩ ĐŧŅŅŅиŅи Markdown).
+* `value`: ŅаĐŧ ĐŋŅиĐēĐģад, ĐŊаĐŋŅиĐēĐģад, ŅĐģОвĐŊиĐē (`dict`).
+* `externalValue`: аĐģŅŅĐĩŅĐŊаŅива `value`, URL-адŅĐĩŅа, ŅĐž вĐēаСŅŅ ĐŊа ĐŋŅиĐēĐģад. ĐŅĐžŅĐĩ ŅŅ ĐžĐŋŅŅŅ ĐŧĐžĐļĐĩ ĐŊĐĩ ĐŋŅĐ´ŅŅиĐŧŅваŅиŅŅ ĐąŅĐģŅŅŅŅŅŅ ŅĐŊŅŅŅŅĐŧĐĩĐŊŅŅв, ĐŊа вŅĐ´ĐŧŅĐŊŅ Đ˛ŅĐ´ `value`.
+
+ĐиĐēĐžŅиŅŅаĐŊĐŊŅ Đ˛Đ¸ĐŗĐģŅĐ´Đ°Ņ ŅаĐē:
+
+{* ../../docs_src/schema_extra_example/tutorial005_an_py310.py hl[23:49] *}
+
+### ĐŅиĐēĐģади OpenAPI Ņ UI Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ
+
+Đ ĐŋаŅаĐŧĐĩŅŅĐžĐŧ `openapi_examples`, дОдаĐŊиĐŧ Đ´Đž `Body()`, Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ `/docs` Đ˛Đ¸ĐŗĐģŅдаŅиĐŧĐĩ ŅаĐē:
+
+
+
+## ĐĸĐĩŅ
ĐŊŅŅĐŊŅ Đ´ĐĩŅаĐģŅ
+
+/// tip | ĐŅĐ´ĐēаСĐēа
+
+Đ¯ĐēŅĐž Đи вĐļĐĩ виĐēĐžŅиŅŅОвŅŅŅĐĩ **FastAPI** вĐĩŅŅŅŅ **0.99.0 айО виŅĐĩ**, Đи ĐŧĐžĐļĐĩŅĐĩ **ĐŋŅĐžĐŋŅŅŅиŅи** ŅĐĩĐš ŅОСдŅĐģ.
+
+ĐŅĐŊ ĐąŅĐģŅŅ Đ°ĐēŅŅаĐģŅĐŊиК Đ´ĐģŅ ŅŅаŅиŅ
вĐĩŅŅŅĐš, Đ´Đž ĐŋĐžŅви OpenAPI 3.1.0.
+
+ĐĐžĐļĐŊа вваĐļаŅи ŅĐĩ ĐēĐžŅĐžŅĐēиĐŧ **ŅŅŅĐžŅиŅĐŊиĐŧ ĐĩĐēŅĐēŅŅŅĐžĐŧ** Ņ OpenAPI Ņа JSON Schema. đ¤
+
+///
+
+/// warning | ĐĐžĐŋĐĩŅĐĩĐ´ĐļĐĩĐŊĐŊŅ
+
+ĐĻĐĩ Đ´ŅĐļĐĩ ŅĐĩŅ
ĐŊŅŅĐŊа ŅĐŊŅĐžŅĐŧаŅŅŅ ĐŋŅĐž ŅŅаĐŊдаŅŅи **JSON Schema** Ņ **OpenAPI**.
+
+Đ¯ĐēŅĐž виŅĐĩĐˇĐŗĐ°Đ´Đ°ĐŊŅ ŅĐ´ĐĩŅ Đ˛ĐļĐĩ ĐŋŅаŅŅŅŅŅ Ņ ĐĐ°Ņ â ĐŧĐžĐļĐĩŅĐĩ ĐŊĐĩ ĐˇĐ°ĐŗĐģийĐģŅваŅиŅŅ Đ˛ ŅŅ Đ´ĐĩŅаĐģŅ.
+
+///
+
+ĐĐž OpenAPI 3.1.0 ŅĐŋĐĩŅиŅŅĐēаŅŅŅ Đ˛Đ¸ĐēĐžŅиŅŅОвŅваĐģа ŅŅаŅŅ Ņа ĐŧОдиŅŅĐēОваĐŊŅ Đ˛ĐĩŅŅŅŅ **JSON Schema**.
+
+ĐŅĐēŅĐģŅĐēи JSON Schema ŅаĐŊŅŅĐĩ ĐŊĐĩ ĐŋŅĐ´ŅŅиĐŧŅваĐģа `examples`, OpenAPI дОдаĐģа вĐģаŅĐŊĐĩ ĐŋĐžĐģĐĩ `examples`.
+
+OpenAPI ŅаĐēĐžĐļ дОдаĐģа `example` Ņ `examples` Đ´Đž ŅĐŊŅиŅ
ŅаŅŅиĐŊ ŅĐŋĐĩŅиŅŅĐēаŅŅŅ:
+
+* `Parameter Object` (в ŅĐŋĐĩŅиŅŅĐēаŅŅŅ) виĐēĐžŅиŅŅОвŅŅŅŅŅŅ FastAPI Đ´ĐģŅ:
+ * `Path()`
+ * `Query()`
+ * `Header()`
+ * `Cookie()`
+* `Request Body Object`, в ĐŋĐžĐģŅ `content`, в `Media Type Object` (в ŅĐŋĐĩŅиŅŅĐēаŅŅŅ) виĐēĐžŅиŅŅОвŅŅŅŅŅŅ FastAPI Đ´ĐģŅ:
+ * `Body()`
+ * `File()`
+ * `Form()`
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+ĐĻĐĩĐš ŅŅаŅиК ĐŋаŅаĐŧĐĩŅŅ `examples`, ŅĐŋĐĩŅиŅŅŅĐŊиК Đ´ĐģŅ OpenAPI, ŅĐĩĐŋĐĩŅ ĐŊаСиваŅŅŅŅŅ `openapi_examples`, ĐŋĐžŅиĐŊаŅŅи С FastAPI вĐĩŅŅŅŅ `0.103.0`.
+
+///
+
+### ĐĐžĐģĐĩ `examples` Ņ JSON Schema
+
+ĐŅСĐŊŅŅĐĩ JSON Schema дОдаĐģа ĐŋĐžĐģĐĩ `examples` Ņ ĐŊĐžĐ˛Ņ Đ˛ĐĩŅŅŅŅ ŅĐŋĐĩŅиŅŅĐēаŅŅŅ.
+
+РвĐļĐĩ OpenAPI 3.1.0 йаСŅŅŅŅŅŅ ĐŊа ŅŅĐš ĐŊОвŅĐš вĐĩŅŅŅŅ (JSON Schema 2020-12), ŅĐēа вĐēĐģŅŅĐ°Ņ ĐŋĐžĐģĐĩ `examples`.
+
+ĐĸĐĩĐŋĐĩŅ ŅĐĩ ĐŋĐžĐģĐĩ `examples` Ņ ĐŋŅŅĐžŅиŅĐĩŅĐŊиĐŧ Ņ ĐˇĐ°ĐŧŅĐŊŅŅ ŅŅаŅĐĩ (Ņ ĐēаŅŅĐžĐŧĐŊĐĩ) ĐŋĐžĐģĐĩ `example`, ŅĐēĐĩ ŅŅаĐģĐž СаŅŅаŅŅĐģиĐŧ.
+
+ĐОвĐĩ ĐŋĐžĐģĐĩ `examples` Ņ JSON Schema â ŅĐĩ **ĐŋŅĐžŅŅĐž ŅĐŋиŅĐžĐē (`list`)** ĐŋŅиĐēĐģадŅв, ĐąĐĩС дОдаŅĐēОвиŅ
ĐŧĐĩŅадаĐŊиŅ
(ĐŊа вŅĐ´ĐŧŅĐŊŅ Đ˛ŅĐ´ OpenAPI).
+
+/// info | ĐĐŊŅĐžŅĐŧаŅŅŅ
+
+ĐавŅŅŅ ĐŋŅŅĐģŅ ŅĐžĐŗĐž, ŅĐē С'ŅвивŅŅ OpenAPI 3.1.0, ŅĐēиК ĐŋŅĐ´ŅŅиĐŧŅвав examples Ņ JSON Schema, ŅĐŊŅŅŅŅĐŧĐĩĐŊŅ Swagger UI ŅĐĩ Đ´ĐĩŅĐēиК ŅĐ°Ņ ĐŊĐĩ ĐŋŅĐ´ŅŅиĐŧŅвав ŅŅ Đ˛ĐĩŅŅŅŅ (ĐŋŅĐ´ŅŅиĐŧĐēа СâŅвиĐģаŅŅ Đˇ вĐĩŅŅŅŅ 5.0.0 đ).
+
+ЧĐĩŅĐĩС ŅĐĩ вĐĩŅŅŅŅ FastAPI Đ´Đž 0.99.0 вŅĐĩ ŅĐĩ виĐēĐžŅиŅŅОвŅваĐģи вĐĩŅŅŅŅ OpenAPI ĐŊиĐļŅŅ ĐˇĐ° 3.1.0.
+
+///
+
+### `Examples` в Pydantic Ņ FastAPI
+
+ĐĐžĐģи Đи дОдаŅŅĐĩ `examples` Ņ ĐŧОдĐĩĐģŅ Pydantic ŅĐĩŅĐĩС `schema_extra` айО `Field(examples=["something"])`, ŅŅ ĐŋŅиĐēĐģади дОдаŅŅŅŅŅ Đ´Đž **JSON Schema** ŅŅŅŅ ĐŧОдĐĩĐģŅ.
+
+Đ ŅŅ **JSON Schema** Pydantic-ĐŧОдĐĩĐģŅ Đ˛ĐēĐģŅŅаŅŅŅŅŅ Đ´Đž **OpenAPI** ĐаŅĐžĐŗĐž API, а ĐŋĐžŅŅĐŧ виĐēĐžŅиŅŅОвŅŅŅŅŅŅ Đ˛ UI Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ (docs UI).
+
+ĐŖ вĐĩŅŅŅŅŅ
FastAPI Đ´Đž 0.99.0 (ĐŋĐžŅиĐŊаŅŅи С 0.99.0 виĐēĐžŅиŅŅОвŅŅŅŅŅŅ ĐŊОвŅŅиК OpenAPI 3.1.0), ĐēĐžĐģи Đи виĐēĐžŅиŅŅОвŅваĐģи `example` айО `examples` С ŅĐŊŅиĐŧи ŅŅиĐģŅŅаĐŧи (`Query()`, `Body()` ŅĐžŅĐž), ŅŅ ĐŋŅиĐēĐģади ĐŊĐĩ дОдаваĐģиŅŅ Đ´Đž JSON Schema, ŅĐēиК ĐžĐŋиŅŅŅ ŅŅ Đ´Đ°ĐŊŅ (ĐŊавŅŅŅ ĐŊĐĩ Đ´Đž вĐģаŅĐŊĐžŅ Đ˛ĐĩŅŅŅŅ JSON Schema Ņ OpenAPI). ĐаŅĐžĐŧŅŅŅŅ Đ˛ĐžĐŊи дОдаваĐģиŅŅ ĐąĐĩСĐŋĐžŅĐĩŅĐĩĐ´ĐŊŅĐž Đ´Đž ĐžĐŋиŅŅ *ОйŅОйĐŊиĐēа ŅĐģŅŅ
Ņ* *(path operation)* в OpenAPI (ŅОйŅĐž ĐŋОСа ĐŧĐĩĐļаĐŧи ŅаŅŅиĐŊ, ŅĐēŅ Đ˛Đ¸ĐēĐžŅиŅŅОвŅŅŅŅ JSON Schema).
+
+ĐĐģĐĩ ŅĐĩĐŋĐĩŅ, ĐēĐžĐģи FastAPI 0.99.0 Ņ Đ˛Đ¸ŅĐĩ виĐēĐžŅиŅŅОвŅŅŅŅ OpenAPI 3.1.0, а ŅОК â JSON Schema 2020-12, ŅаСОĐŧ ŅС Swagger UI 5.0.0 Ņ Đ˛Đ¸ŅĐĩ â вŅĐĩ ŅŅаĐģĐž ĐąŅĐģŅŅ ŅĐˇĐŗĐžĐ´ĐļĐĩĐŊиĐŧ, Ņ examples ŅĐĩĐŋĐĩŅ Đ˛ĐēĐģŅŅаŅŅŅŅŅ Đ´Đž JSON Schema.
+
+### Swagger UI Ņа ŅĐŋĐĩŅиŅŅŅĐŊŅ Đ´ĐģŅ OpenAPI `examples`
+
+РаĐŊŅŅĐĩ (ŅŅаĐŊĐžĐŧ ĐŊа 26 ŅĐĩŅĐŋĐŊŅ 2023 ŅĐžĐēŅ) Swagger UI ĐŊĐĩ ĐŋŅĐ´ŅŅиĐŧŅвав ĐēŅĐģŅĐēа ĐŋŅиĐēĐģадŅв Ņ JSON Schema, ŅĐžĐŧŅ ĐēĐžŅиŅŅŅваŅŅ ĐŊĐĩ ĐŧаĐģи ĐŧĐžĐļĐģивОŅŅŅ ĐŋĐžĐēаСаŅи Đ´ĐĩĐēŅĐģŅĐēа ĐŋŅиĐēĐģадŅв Ņ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ.
+
+ЊОй виŅŅŅиŅи ŅĐĩ, FastAPI ĐŋĐžŅиĐŊаŅŅи С вĐĩŅŅŅŅ 0.103.0 **дОдав ĐŋŅĐ´ŅŅиĐŧĐēŅ** ŅŅаŅĐžĐŗĐž **OpenAPI-ŅĐŋĐĩŅиŅŅŅĐŊĐžĐŗĐž** ĐŋĐžĐģŅ `examples` ŅĐĩŅĐĩС ĐŊОвиК ĐŋаŅаĐŧĐĩŅŅ `openapi_examples`. đ¤
+
+### ĐŅĐ´ŅŅĐŧĐžĐē
+
+РаĐŊŅŅĐĩ Ņ ĐēаСав, ŅĐž ĐŊĐĩ ĐģŅĐąĐģŅ ŅŅŅĐžŅŅŅ... а ŅĐĩĐŋĐĩŅ ĐžŅŅ Ņ â ŅОСĐŋОвŅĐ´Đ°Ņ "ŅĐĩŅ
ĐŊŅŅĐŊŅ ŅŅŅĐžŅиŅĐŊŅ" ĐģĐĩĐēŅŅŅ. đ
+
+ĐĐžŅĐžŅĐēĐž: **ĐžĐŊОвŅŅŅŅŅ Đ´Đž FastAPI 0.99.0 айО виŅĐĩ** â Ņ Đ˛ŅĐĩ ŅŅаĐŊĐĩ СĐŊаŅĐŊĐž **ĐŋŅĐžŅŅŅŅиĐŧ, ŅĐˇĐŗĐžĐ´ĐļĐĩĐŊиĐŧ Ņа ŅĐŊŅŅŅŅивĐŊĐž СŅОСŅĐŧŅĐģиĐŧ**, Ņ ĐаĐŧ ĐŊĐĩ дОвĐĩĐ´ĐĩŅŅŅŅ ĐˇĐŊаŅи вŅŅ ŅŅ ŅŅŅĐžŅиŅĐŊŅ Đ´ĐĩŅаĐģŅ. đ
diff --git a/docs/uk/docs/tutorial/security/index.md b/docs/uk/docs/tutorial/security/index.md
new file mode 100644
index 000000000..c3d94be8d
--- /dev/null
+++ b/docs/uk/docs/tutorial/security/index.md
@@ -0,0 +1,104 @@
+# ĐĐĩСĐŋĐĩĐēа
+
+ĐŅĐŊŅŅ ĐąĐ°ĐŗĐ°ŅĐž ŅĐŋĐžŅОйŅв ŅĐĩаĐģŅСŅваŅи ĐąĐĩСĐŋĐĩĐēŅ, авŅĐĩĐŊŅиŅŅĐēаŅŅŅ Ņа авŅĐžŅиСаŅŅŅ.
+
+ĐĻĐĩ СаСвиŅаК ŅĐēĐģадĐŊа Ņ "ĐŊĐĩĐŋŅĐžŅŅа" ŅĐĩĐŧа.
+
+ĐŖ ĐąĐ°ĐŗĐ°ŅŅĐžŅ
ŅŅĐĩĐšĐŧвОŅĐēаŅ
Ņ ŅиŅŅĐĩĐŧаŅ
СайĐĩСĐŋĐĩŅĐĩĐŊĐŊŅ ĐąĐĩСĐŋĐĩĐēи Ņа авŅĐĩĐŊŅиŅŅĐēаŅŅŅ ĐˇĐ°ĐšĐŧĐ°Ņ Đ˛ĐĩĐģиŅĐĩСĐŊŅ ŅаŅŅиĐŊŅ ĐˇŅŅиĐģŅ Ņ ĐēĐžĐ´Ņ (ŅĐŊĐžĐ´Ņ â ĐŋĐžĐŊад 50% вŅŅĐžĐŗĐž ĐŊаĐŋиŅаĐŊĐžĐŗĐž ĐēОдŅ).
+
+**FastAPI** ĐŊĐ°Đ´Đ°Ņ ĐēŅĐģŅĐēа ŅĐŊŅŅŅŅĐŧĐĩĐŊŅŅв, ŅĐēŅ Đ´ĐžĐŋĐžĐŧĐžĐļŅŅŅ ĐаĐŧ вĐŋĐžŅаŅиŅŅ Đˇ **ĐąĐĩСĐŋĐĩĐēĐžŅ** ĐģĐĩĐŗĐēĐž, ŅвидĐēĐž, ŅŅаĐŊдаŅŅĐŊиĐŧ ŅĐŋĐžŅОйОĐŧ, ĐąĐĩС ĐŊĐĩОйŅ
ŅĐ´ĐŊĐžŅŅŅ Đ˛Đ¸Đ˛ŅаŅи вŅŅ ŅĐŋĐĩŅиŅŅĐēаŅŅŅ ĐąĐĩСĐŋĐĩĐēи.
+
+ĐĐģĐĩ ŅĐŋĐžŅаŅĐēŅ â ĐēŅĐģŅĐēа ĐēĐžŅĐžŅĐēиŅ
ĐŋĐžĐŊŅŅŅ.
+
+## ĐĐžŅĐŋŅŅаŅŅĐĩ?
+
+Đ¯ĐēŅĐž ĐаĐŧ ĐŊĐĩ ŅŅĐēĐ°Đ˛Ņ Đ˛ŅŅ ŅŅ ŅĐĩŅĐŧŅĐŊи Đš ĐŋŅĐžŅŅĐž ĐŋĐžŅŅŅĐąĐŊĐž *ŅвидĐēĐž* дОдаŅи авŅĐĩĐŊŅиŅŅĐēаŅŅŅ ĐˇĐ° ĐģĐžĐŗŅĐŊĐžĐŧ Ņ ĐŋаŅĐžĐģĐĩĐŧ â ĐŋĐĩŅĐĩŅ
ОдŅŅĐĩ Đ´Đž ĐŊаŅŅŅĐŋĐŊиŅ
ŅОСдŅĐģŅв.
+
+## OAuth2
+
+OAuth2 â ŅĐĩ ŅĐŋĐĩŅиŅŅĐēаŅŅŅ, ŅĐž ĐžĐŋиŅŅŅ ĐēŅĐģŅĐēа ŅĐŋĐžŅОйŅв ОйŅОйĐēи авŅĐĩĐŊŅиŅŅĐēаŅŅŅ Ņа авŅĐžŅиСаŅŅŅ.
+
+ĐĻĐĩ Đ´ĐžŅиŅŅ ĐžĐą'ŅĐŧĐŊа ŅĐŋĐĩŅиŅŅĐēаŅŅŅ, ŅĐēа ĐžŅ
ĐžĐŋĐģŅŅ ŅĐēĐģадĐŊŅ Đ˛Đ¸ĐŋадĐēи виĐēĐžŅиŅŅаĐŊĐŊŅ.
+
+ĐĐžĐŊа вĐēĐģŅŅĐ°Ņ ŅĐŋĐžŅОйи авŅĐĩĐŊŅиŅŅĐēаŅŅŅ ŅĐĩŅĐĩС "ŅŅĐĩŅŅ ŅŅĐžŅĐžĐŊŅ".
+
+ХаĐŧĐĩ ŅĐĩ ĐģĐĩĐļиŅŅ Đ˛ ĐžŅĐŊĐžĐ˛Ņ "вŅ
ĐžĐ´Ņ ŅĐĩŅĐĩС Google, Facebook, X (Twitter), GitHub" ŅĐžŅĐž.
+
+### OAuth 1
+
+РаĐŊŅŅĐĩ ŅŅĐŊŅвав OAuth 1, ŅĐēиК СĐŊаŅĐŊĐž вŅĐ´ŅŅСĐŊŅŅŅŅŅŅ Đ˛ŅĐ´ OAuth2 Ņ Ņ ŅĐēĐģадĐŊŅŅиĐŧ, ĐžŅĐēŅĐģŅĐēи ĐŧŅŅŅив ŅĐŋĐĩŅиŅŅĐēаŅŅŅ Đ´ĐģŅ ŅиŅŅŅваĐŊĐŊŅ ĐēĐžĐŧŅĐŊŅĐēаŅŅĐš.
+
+ĐаŅаС ĐŧаКĐļĐĩ ĐŊĐĩ виĐēĐžŅиŅŅОвŅŅŅŅŅŅ.
+
+OAuth2 ĐŊĐĩ вĐēаСŅŅ, ŅĐē ŅаĐŧĐĩ ŅиŅŅŅваŅи С'ŅĐ´ĐŊаĐŊĐŊŅ â вОĐŊĐž ĐžŅŅĐēŅŅ, ŅĐž Đ˛Đ°Ņ ĐˇĐ°ŅŅĐžŅŅĐŊĐžĐē ĐŋŅаŅŅŅ ŅĐĩŅĐĩС HTTPS.
+
+/// tip | ĐĐžŅада
+
+ĐŖ ŅОСдŅĐģŅ ĐŋŅĐž **Đ´ĐĩĐŋĐģОК** Đи ĐŋОйаŅиŅĐĩ, ŅĐē ĐŊаĐģаŅŅŅваŅи HTTPS ĐąĐĩСĐēĐžŅŅОвĐŊĐž С Traefik Ņа Let's Encrypt.
+
+///
+
+## OpenID Connect
+
+OpenID Connect â ŅĐĩ ОдĐŊа ŅĐŋĐĩŅиŅŅĐēаŅŅŅ, ĐŋОйŅдОваĐŊа ĐŊа ĐžŅĐŊĐžĐ˛Ņ **OAuth2**.
+
+ĐĐžĐŊа ŅОСŅиŅŅŅ OAuth2, ŅŅĐžŅĐŊŅŅŅи Đ´ĐĩŅĐēŅ ĐŊĐĩОдĐŊОСĐŊаŅĐŊĐžŅŅŅ Đ´ĐģŅ Đ´ĐžŅŅĐŗĐŊĐĩĐŊĐŊŅ ĐēŅаŅĐžŅ ŅŅĐŧŅŅĐŊĐžŅŅŅ.
+
+ĐаĐŋŅиĐēĐģад, вŅ
ŅĐ´ ŅĐĩŅĐĩС Google виĐēĐžŅиŅŅОвŅŅ OpenID Connect (ŅĐēиК йаСŅŅŅŅŅŅ ĐŊа OAuth2).
+
+ĐĐģĐĩ вŅ
ŅĐ´ ŅĐĩŅĐĩС Facebook â ĐŊŅ. ĐŅĐŊ ĐŧĐ°Ņ Đ˛ĐģаŅĐŊŅ ŅĐĩаĐģŅСаŅŅŅ ĐŊа ĐąĐ°ĐˇŅ OAuth2.
+
+### OpenID (ĐŊĐĩ "OpenID Connect")
+
+ĐŅĐŊŅваĐģа ŅаĐēĐžĐļ ŅĐŋĐĩŅиŅŅĐēаŅŅŅ "OpenID", ŅĐēа ĐŊаĐŧĐ°ĐŗĐ°ĐģаŅŅ ŅОСвĘŧŅСаŅи ŅŅ ŅаĐŧŅ ĐˇĐ°Đ´Đ°ŅŅ, ŅĐž Đš **OpenID Connect**, аĐģĐĩ ĐŊĐĩ йаСŅваĐģаŅŅ ĐŊа OAuth2.
+
+ĐĻĐĩ ĐąŅĐģа СОвŅŅĐŧ ŅĐŊŅа ŅиŅŅĐĩĐŧа, Ņ ŅŅĐžĐŗĐžĐ´ĐŊŅ Đ˛ĐžĐŊа ĐŧаКĐļĐĩ ĐŊĐĩ виĐēĐžŅиŅŅОвŅŅŅŅŅŅ.
+
+## OpenAPI
+
+OpenAPI (ŅаĐŊŅŅĐĩ Swagger) â ŅĐĩ ŅĐŋĐĩŅиŅŅĐēаŅŅŅ Đ´ĐģŅ ĐŋОйŅдОви API (ŅĐĩĐŋĐĩŅ ĐŋŅĐ´ ĐĩĐŗŅĐ´ĐžŅ Linux Foundation).
+
+**FastAPI** йаСŅŅŅŅŅŅ ĐŊа **OpenAPI**.
+
+ĐавдŅĐēи ŅŅĐžĐŧŅ Đи ĐžŅŅиĐŧŅŅŅĐĩ авŅĐžĐŧаŅиŅĐŊŅ ŅĐŊŅĐĩŅаĐēŅивĐŊŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ, ĐŗĐĩĐŊĐĩŅаŅŅŅ ĐēĐžĐ´Ņ Ņа ĐąĐ°ĐŗĐ°ŅĐž ŅĐŊŅĐžĐŗĐž.
+
+OpenAPI дОСвОĐģŅŅ ĐžĐŋиŅŅваŅи ŅŅСĐŊŅ "ŅŅ
ĐĩĐŧи" ĐąĐĩСĐŋĐĩĐēи.
+
+ĐиĐēĐžŅиŅŅОвŅŅŅи ŅŅ
, Đи ĐŧĐžĐļĐĩŅĐĩ ŅĐēĐžŅиŅŅаŅиŅŅ Đ˛ŅŅĐŧа ŅиĐŧи ŅĐŊŅŅŅŅĐŧĐĩĐŊŅаĐŧи, ŅĐž йаСŅŅŅŅŅŅ ĐŊа ŅŅаĐŊдаŅŅаŅ
, СОĐēŅĐĩĐŧа ŅĐŊŅĐĩŅаĐēŅивĐŊиĐŧи ŅиŅŅĐĩĐŧаĐŧи Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ.
+
+OpenAPI виСĐŊаŅĐ°Ņ ŅаĐēŅ ŅŅ
ĐĩĐŧи ĐąĐĩСĐŋĐĩĐēи:
+
+* `apiKey`: ŅĐŋĐĩŅиŅŅŅĐŊиК Đ´ĐģŅ ĐˇĐ°ŅŅĐžŅŅĐŊĐēŅ ĐēĐģŅŅ, ŅĐēиК ĐŧĐžĐļĐĩ ĐŋĐĩŅĐĩдаваŅиŅŅ ŅĐĩŅĐĩС:
+ * ĐаŅаĐŧĐĩŅŅ ĐˇĐ°ĐŋиŅŅ.
+ * ĐĐ°ĐŗĐžĐģОвОĐē.
+ * Cookie.
+* `http`: ŅŅаĐŊдаŅŅĐŊŅ ĐŧĐĩŅОди HTTP-авŅĐĩĐŊŅиŅŅĐēаŅŅŅ, вĐēĐģŅŅаŅŅи:
+ * `bearer`: ĐˇĐ°ĐŗĐžĐģОвОĐē `Authorization` ĐˇŅ ĐˇĐŊаŅĐĩĐŊĐŊŅĐŧ `Bearer` Ņа ŅĐžĐēĐĩĐŊĐžĐŧ. ĐĻĐĩ ŅŅĐŋадĐēОваĐŊĐž С OAuth2.
+ * HTTP Basic авŅĐĩĐŊŅиŅŅĐēаŅŅŅ
+ * HTTP Digest, ŅĐžŅĐž.
+* `oauth2`: ŅŅŅ ŅĐŋĐžŅОйи ОйŅОйĐēи ĐąĐĩСĐŋĐĩĐēи Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ OAuth2 (ŅаĐē СваĐŊŅ ÂĢĐŋĐžŅĐžĐēиÂģ).
+ * ĐĐĩŅĐēŅ Đˇ ŅиŅ
ĐŋĐžŅĐžĐēŅв ĐŋŅĐ´Ņ
ОдŅŅŅ Đ´ĐģŅ ŅŅвОŅĐĩĐŊĐŊŅ Đ˛ĐģаŅĐŊĐžĐŗĐž ĐŋŅОваКдĐĩŅа авŅĐĩĐŊŅиŅŅĐēаŅŅŅ OAuth 2.0 (ĐŊаĐŋŅиĐēĐģад, Google, Facebook, X (Twitter), GitHub ŅĐžŅĐž):
+ * `implicit`â ĐŊĐĩŅвĐŊиК
+ * `clientCredentials`â ОйĐģŅĐēĐžĐ˛Ņ Đ´Đ°ĐŊŅ ĐēĐģŅŅĐŊŅа
+ * `authorizationCode` â ĐēОд авŅĐžŅиСаŅŅŅ
+ * ĐĐģĐĩ Ņ ĐžĐ´Đ¸ĐŊ ĐžĐēŅĐĩĐŧиК ÂĢĐŋĐžŅŅĐēÂģ, ŅĐēиК ŅĐ´ĐĩаĐģŅĐŊĐž ĐŋŅĐ´Ņ
ОдиŅŅ Đ´ĐģŅ ŅĐĩаĐģŅСаŅŅŅ Đ°Đ˛ŅĐĩĐŊŅиŅŅĐēаŅŅŅ Đ˛ŅĐĩŅĐĩдиĐŊŅ ĐžĐ´ĐŊĐžĐŗĐž дОдаŅĐēŅ:
+ * `password`: Ņ ĐŊаŅŅŅĐŋĐŊиŅ
ŅОСдŅĐģаŅ
ĐąŅĐ´Đĩ ĐŋŅиĐēĐģад виĐēĐžŅиŅŅаĐŊĐŊŅ ŅŅĐžĐŗĐž ĐŋĐžŅĐžĐēŅ.
+* `openIdConnect`: дОСвОĐģŅŅ Đ°Đ˛ŅĐžĐŧаŅиŅĐŊĐž виŅвĐģŅŅи ĐŋаŅаĐŧĐĩŅŅи авŅĐĩĐŊŅиŅŅĐēаŅŅŅ OAuth2.
+ * ĐĻĐĩ авŅĐžĐŧаŅиŅĐŊĐĩ виŅвĐģĐĩĐŊĐŊŅ Đ˛Đ¸ĐˇĐŊаŅаŅŅŅŅŅ Ņ ŅĐŋĐĩŅиŅŅĐēаŅŅŅ OpenID Connect.
+
+
+/// tip | ĐĐžŅада
+
+ĐĐŊŅĐĩĐŗŅаŅŅŅ ŅĐŊŅиŅ
ĐŋŅОваКдĐĩŅŅв авŅĐĩĐŊŅиŅŅĐēаŅŅŅ/авŅĐžŅиСаŅŅŅ, ŅаĐēиŅ
ŅĐē Google, Facebook, X (Twitter), GitHub ŅĐžŅĐž â ŅаĐēĐžĐļ ĐŧĐžĐļĐģива Ņ Đ˛ŅĐ´ĐŊĐžŅĐŊĐž ĐŋŅĐžŅŅа.
+
+ĐаКŅĐēĐģадĐŊŅŅĐĩ â ŅĐĩ ŅŅвОŅиŅи вĐģаŅĐŊĐžĐŗĐž ĐŋŅОваКдĐĩŅа авŅĐĩĐŊŅиŅŅĐēаŅŅŅ/авŅĐžŅиСаŅŅŅ, ŅĐē Google Ņи Facebook. ĐĐģĐĩ **FastAPI** ĐŊĐ°Đ´Đ°Ņ ĐаĐŧ ŅĐŊŅŅŅŅĐŧĐĩĐŊŅи, ŅОй СŅОйиŅи ŅĐĩ ĐģĐĩĐŗĐēĐž, ĐąĐĩŅŅŅи ĐŊа ŅĐĩĐąĐĩ ваĐļĐēŅ ŅаŅŅиĐŊŅ ŅОйОŅи.
+
+///
+
+## ĐĐŊŅŅŅŅĐŧĐĩĐŊŅи **FastAPI**
+
+FastAPI ĐŊĐ°Đ´Đ°Ņ ĐēŅĐģŅĐēа ŅĐŊŅŅŅŅĐŧĐĩĐŊŅŅв Đ´ĐģŅ ĐēĐžĐļĐŊĐžŅ Đˇ ĐžĐŋиŅаĐŊиŅ
ŅŅ
ĐĩĐŧ ĐąĐĩСĐŋĐĩĐēи в ĐŧОдŅĐģŅ `fastapi.security`, ŅĐēŅ ŅĐŋŅĐžŅŅŅŅŅ Đ˛Đ¸ĐēĐžŅиŅŅаĐŊĐŊŅ ŅиŅ
ĐŧĐĩŅ
аĐŊŅСĐŧŅв СаŅ
иŅŅŅ.
+
+ĐŖ ĐŊаŅŅŅĐŋĐŊиŅ
ŅОСдŅĐģаŅ
Đи ĐŋОйаŅиŅĐĩ, ŅĐē дОдаŅи ĐąĐĩСĐŋĐĩĐēŅ Đ´Đž ŅĐ˛ĐžĐŗĐž API Са Đ´ĐžĐŋĐžĐŧĐžĐŗĐžŅ ŅиŅ
ŅĐŊŅŅŅŅĐŧĐĩĐŊŅŅв **FastAPI**.
+
+Đ ŅаĐēĐžĐļ ĐŋОйаŅиŅĐĩ, ŅĐē вОĐŊа авŅĐžĐŧаŅиŅĐŊĐž ŅĐŊŅĐĩĐŗŅŅŅŅŅŅŅ Đ˛ ŅĐŊŅĐĩŅаĐēŅивĐŊŅ Đ´ĐžĐēŅĐŧĐĩĐŊŅаŅŅŅ Đ˛Đ°ŅĐžĐŗĐž API.
diff --git a/docs/zh/docs/deployment/concepts.md b/docs/zh/docs/deployment/concepts.md
index 7a0b6c3d2..f7208da7c 100644
--- a/docs/zh/docs/deployment/concepts.md
+++ b/docs/zh/docs/deployment/concepts.md
@@ -220,7 +220,7 @@
čŋäēåˇĨäŊčŋį¨å°æ¯čŋčĄæ¨įåēį¨į¨åēįčŋį¨īŧåŽäģŦå°æ§čĄä¸ģčĻ莥įŽäģĨæĨæļ **蝎æą** åšļčŋå **ååē**īŧåšļä¸åŽäģŦå°å čŊŊæ¨æžå
Ĩ RAM ä¸įåéä¸įäģģäŊå
厚ã
-
+
åŊįļīŧé¤ä翍įåēį¨į¨åēäšå¤īŧåä¸å°æēå¨å¯čŊčŋčŋčĄ**å
ļäģčŋį¨**ã
diff --git a/docs/zh/docs/deployment/https.md b/docs/zh/docs/deployment/https.md
index 9c963d587..d994c4add 100644
--- a/docs/zh/docs/deployment/https.md
+++ b/docs/zh/docs/deployment/https.md
@@ -86,7 +86,7 @@
DNS æåĄå¨äŧå蝿ĩč§å¨äŊŋ፿ä¸ĒįšåŽį **IP å°å**ã čŋå°æ¯äŊ å¨ DNS æåĄå¨ä¸ä¸ēäŊ įæåĄå¨é
įŊŽįå
Ŧå
ą IP å°åã
-
+
### TLS æĄæåŧå§
@@ -94,7 +94,7 @@ DNS æåĄå¨äŧå蝿ĩč§å¨äŊŋ፿ä¸ĒįšåŽį **IP å°å**ã čŋå°æ¯
éäŋĄįįŦŦä¸é¨ååĒæ¯åģēįĢåŽĸæˇį̝åæåĄå¨äšé´įčŋæĨåšļåŗåŽåŽäģŦå°äŊŋį¨įå å¯å¯éĨįã
-
+
åŽĸæˇį̝åæåĄå¨äšé´åģēįĢ TLS čŋæĨįčŋį¨į§°ä¸ē **TLS æĄæ**ã
@@ -112,7 +112,7 @@ TLS įģæĸäģŖįå¯äģĨčŽŋéŽä¸ä¸Ēæå¤ä¸Ē **TLS č¯äšĻ**īŧHTTPS č¯äšĻīŧã
å¨čŋį§æ
åĩä¸īŧåŽå°äŊŋį¨`someapp.example.com`įč¯äšĻã
-
+
åŽĸæˇį̝厞įģ**äŋĄäģģ**įæč¯Ĩ TLS č¯äšĻįåŽäŊīŧ卿Ŧäžä¸ä¸ē Let's EncryptīŧäŊæäģŦį¨åäŧįå°īŧīŧå æ¤åŽå¯äģĨ**éĒč¯**č¯Ĩč¯äšĻæ¯åĻææã
@@ -134,19 +134,19 @@ TLS įģæĸäģŖįå¯äģĨčŽŋéŽä¸ä¸Ēæå¤ä¸Ē **TLS č¯äšĻ**īŧHTTPS č¯äšĻīŧã
æĨ䏿ĨīŧåŽĸæˇį̝åéä¸ä¸Ē **HTTPS 蝎æą**ã čŋå
ļåŽåĒæ¯ä¸ä¸Ēéčŋ TLS å å¯čŋæĨį HTTP 蝎æąã
-
+
### č§Ŗå¯č¯ˇæą
TLS įģæĸäģŖįå°äŊŋį¨åååĨŊįå å¯įŽæŗ**č§Ŗå¯č¯ˇæą**īŧåšļå°**īŧč§Ŗå¯įīŧHTTP 蝎æą**äŧ čžå°čŋčĄåēį¨į¨åēįčŋį¨īŧäžåĻčŋčĄ FastAPI åēį¨į Uvicorn čŋį¨īŧã
-
+
### HTTP ååē
åēį¨į¨åēå°å¤į蝎æąåšļå TLS įģæĸäģŖįåé**īŧæĒå å¯īŧHTTP ååē**ã
-
+
### HTTPS ååē
@@ -154,7 +154,7 @@ TLS įģæĸäģŖįå°äŊŋį¨åååĨŊįå å¯įŽæŗ**č§Ŗå¯č¯ˇæą**īŧåšļå°**īŧ
æĨ䏿Ĩīŧæĩč§å¨å°éĒč¯åå翝åĻææåæ¯åĻäŊŋį¨äēæŖįĄŽįå å¯å¯éĨįãįļååŽäŧ**č§Ŗå¯ååē**åšļå¤įåŽã
-
+
åŽĸæˇį̝īŧæĩč§å¨īŧå°įĨéååēæĨčĒæŖįĄŽįæåĄå¨īŧå ä¸ēåŽäŊŋį¨äēäģäģŦäšåäŊŋ፠**HTTPS č¯äšĻ** åååēįå å¯įŽæŗã
@@ -164,7 +164,7 @@ TLS įģæĸäģŖįå°äŊŋį¨åååĨŊįå å¯įŽæŗ**č§Ŗå¯č¯ˇæą**īŧåšļå°**īŧ
åĒæä¸ä¸Ēčŋį¨å¯äģĨå¤įįšåŽį IP åį̝åŖīŧ卿äģŦįį¤ēäžä¸ä¸ē TLS įģæĸäģŖįīŧīŧäŊå
ļäģåēį¨į¨åē/čŋį¨äšå¯äģĨ卿åĄå¨ä¸čŋčĄīŧåĒčĻåŽäģŦä¸å°č¯äŊŋį¨į¸åį **å
Ŧå
ą IP åį̝åŖįįģå**ã
-
+
čŋæ ˇīŧTLS įģæĸäģŖįå°ąå¯äģĨä¸ēå¤ä¸Ēåēį¨į¨åēå¤į**å¤ä¸Ēåå**į HTTPS åč¯äšĻīŧįļå卿¯į§æ
åĩä¸å°č¯ˇæąäŧ čžå°æŖįĄŽįåēį¨į¨åēã
@@ -174,7 +174,7 @@ TLS įģæĸäģŖįå°äŊŋį¨åååĨŊįå å¯įŽæŗ**č§Ŗå¯č¯ˇæą**īŧåšļå°**īŧ
įļåīŧäŧæåĻä¸ä¸Ēį¨åēīŧ卿äēæ
åĩ䏿¯åĻä¸ä¸Ēį¨åēīŧ卿äēæ
åĩä¸å¯čŊæ¯åä¸ä¸Ē TLS įģæĸäģŖįīŧä¸ Let's Encrypt éäŋĄåšļæ´æ°č¯äšĻã
-
+
**TLS č¯äšĻ** **ä¸ååį¸å
ŗč**īŧč䏿¯ä¸ IP å°åį¸å
ŗčã
diff --git a/docs/zh/docs/deployment/manually.md b/docs/zh/docs/deployment/manually.md
index 30ee7a1e9..3dc5942e3 100644
--- a/docs/zh/docs/deployment/manually.md
+++ b/docs/zh/docs/deployment/manually.md
@@ -1,159 +1,157 @@
-# æå¨čŋčĄæåĄå¨ - Uvicorn
+# æå¨čŋčĄæåĄå¨
-å¨čŋ፿åĄå¨čŽĄįŽæēä¸čŋčĄ **FastAPI** åēį¨į¨åēæéįä¸ģčĻä¸čĨŋæ¯ ASGI æåĄå¨į¨åēīŧäžåĻ **Uvicorn**ã
+## äŊŋ፠`fastapi run` åŊäģ¤
-æ 3 ä¸Ēä¸ģčĻå¯éæšæĄīŧ
+įŽčč¨äšīŧäŊŋ፠`fastapi run` æĨčŋčĄæ¨į FastAPI åēį¨į¨åēīŧ
-* Uvicorn īŧéĢæ§čŊ ASGI æåĄå¨ã
-* Hypercorn īŧä¸ HTTP/2 å Trio įå
ŧ厚į ASGI æåĄå¨ã
-* Daphne īŧä¸ē Django Channels æåģēį ASGI æåĄå¨ã
-
-## æåĄå¨ä¸ģæēåæåĄå¨į¨åē
-
-å
ŗäēåį§°īŧæä¸ä¸Ēå°įģčéčĻ莰äŊã đĄ
-
-â**æåĄå¨**âä¸č¯é常į¨äēæčŋį¨/äēčŽĄįŽæēīŧįŠįæēæčææēīŧäģĨåå¨č¯ĨčŽĄįŽæēä¸čŋčĄįį¨åēīŧäžåĻ Uvicornīŧã
+
-č¯ˇčŽ°äŊīŧåŊæ¨ä¸čŦč¯ģå°âæåĄå¨âčŋä¸Ēå蝿ļīŧåŽå¯čŊæįæ¯čŋ两č
äšä¸ã
+```console
+$
fastapi run
main.py
-åŊæå°čŋį¨ä¸ģæēæļīŧé常å°å
ļį§°ä¸ē**æåĄå¨**īŧäŊäšį§°ä¸ē**æēå¨**(machine)ã**VM**īŧčææēīŧã**čįš**ã čŋäēéŊæ¯ææį§įąģåįčŋį¨čŽĄįŽæēīŧé常čŋčĄ Linuxīŧæ¨å¯äģĨå¨å
ļä¸čŋčĄį¨åēã
+
FastAPI Starting production server đ
+ Searching for package file structure from directories
+ with
__init__.py files
+ Importing from
/home/user/code/ awesomeapp
-## åŽčŖ
æåĄå¨į¨åē
+
module đ main.py
-æ¨å¯äģĨäŊŋį¨äģĨä¸åŊäģ¤åŽčŖ
ASGI å
ŧ厚æåĄå¨īŧ
+
code Importing the FastAPI app object from the module with
+ the following code:
-//// tab | Uvicorn
+
from main import app
-*
Uvicorn īŧä¸ä¸ĒåŋĢåĻéĒįĩ ASGI æåĄå¨īŧåēäē uvloop å httptools æåģēã
+
app Using import string:
main:app
-
+ server Server started at http://0.0.0.0:8000
+ server Documentation at http://0.0.0.0:8000/docs
-```console
-$ pip install "uvicorn[standard]"
+ Logs:
----> 100%
+ INFO Started server process [ 2306215 ]
+ INFO Waiting for application startup.
+ INFO Application startup complete.
+ INFO Uvicorn running on http://0.0.0.0:8000 ( Press CTRL+C
+ to quit)
```
-/// tip
+čŋå¨å¤§å¤æ°æ
åĩä¸éŊčŊæŖå¸¸čŋčĄãđ
-éčŋæˇģå `standard`īŧUvicorn å°åŽčŖ
åšļäŊŋį¨ä¸ä翍čįéĸå¤äžčĩ饚ã
+äžåĻīŧæ¨å¯äģĨäŊŋį¨č¯ĨåŊäģ¤å¨åŽšå¨ãæåĄå¨įį¯åĸä¸å¯å¨æ¨į **FastAPI** åēį¨ã
-å
ļä¸å
æŦ`uvloop`īŧåŽæ¯`asyncio`įéĢæ§čŊæŋäģŖåīŧåŽæäžäē厍大įåšļåæ§čŊæåã
+## ASGI æåĄå¨
-///
+莊æäģŦæˇąå
Ĩäēč§Ŗä¸äēįģčã
-////
+FastAPI äŊŋį¨äēä¸į§į¨äēæåģē Python Web æĄæļåæåĄå¨įæ åīŧį§°ä¸ē
ASGI ãFastAPI æŦ贍䏿¯ä¸ä¸Ē ASGI Web æĄæļã
-//// tab | Hypercorn
+čĻå¨čŋ፿åĄå¨ä¸čŋčĄ **FastAPI** åēį¨īŧæäģģäŊå
ļäģ ASGI åēį¨īŧīŧæ¨éčĻä¸ä¸Ē ASGI æåĄå¨į¨åēīŧäžåĻ **Uvicorn**ãåŽæ¯ `fastapi` åŊäģ¤éģ莤äŊŋį¨į ASGI æåĄå¨ã
-*
Hypercorn īŧä¸ä¸Ēäšä¸ HTTP/2 å
ŧ厚į ASGI æåĄå¨ã
-
-
+餿¤äšå¤īŧčŋæå
ļäģä¸äēå¯éį ASGI æåĄå¨īŧäžåĻīŧ
-```console
-$ pip install hypercorn
-
----> 100%
-```
-
-
+*
Uvicorn īŧéĢæ§čŊ ASGI æåĄå¨ã
+*
Hypercorn īŧä¸ HTTP/2 å Trio įå
ŧ厚į ASGI æåĄå¨ã
+*
Daphne īŧä¸ē Django Channels æåģēį ASGI æåĄå¨ã
+*
Granian īŧåēäē Rust į HTTP æåĄå¨īŧä¸ä¸ē Python åēį¨čŽžčŽĄã
+*
NGINX Unit īŧNGINX Unit æ¯ä¸ä¸ĒčŊģéįē§ä¸įĩæ´ģį Web åēį¨čŋčĄæļį¯åĸã
-...æäģģäŊå
ļäģ ASGI æåĄå¨ã
+## æåĄå¨ä¸ģæēåæåĄå¨į¨åē
-////
+å
ŗäēåį§°īŧæä¸ä¸Ēå°įģčéčĻ莰äŊã đĄ
-## čŋčĄæåĄå¨į¨åē
+â**æåĄå¨**âä¸č¯é常į¨äēæčŋį¨/äēčŽĄįŽæēīŧįŠįæēæčææēīŧäģĨåå¨č¯ĨčŽĄįŽæēä¸čŋčĄįį¨åēīŧäžåĻ Uvicornīŧã
-æ¨å¯äģĨæį
§äšåæį¨ä¸įį¸åæšåŧčŋčĄåēį¨į¨åēīŧäŊä¸äŊŋį¨`--reload`é饚īŧäžåĻīŧ
+č¯ˇčŽ°äŊīŧåŊæ¨ä¸čŦč¯ģå°âæåĄå¨âčŋä¸Ēå蝿ļīŧåŽå¯čŊæįæ¯čŋ两č
äšä¸ã
-//// tab | Uvicorn
+åŊæå°čŋį¨ä¸ģæēæļīŧé常å°å
ļį§°ä¸ē**æåĄå¨**īŧäŊäšį§°ä¸ē**æēå¨**(machine)ã**VM**īŧčææēīŧã**čįš**ã čŋäēéŊæ¯ææį§įąģåįčŋį¨čŽĄįŽæēīŧé常čŋčĄ Linuxīŧæ¨å¯äģĨå¨å
ļä¸čŋčĄį¨åēã
-
-```console
-$ uvicorn main:app --host 0.0.0.0 --port 80
+## åŽčŖ
æåĄå¨į¨åē
-INFO : Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit)
-```
+åŊæ¨åŽčŖ
FastAPI æļīŧåŽčĒå¸Ļä¸ä¸Ēįäē§į¯åĸæåĄå¨ââUvicornīŧåšļ䏿¨å¯äģĨäŊŋ፠`fastapi run` åŊä줿Ĩå¯å¨åŽã
-
+ä¸čŋīŧæ¨äšå¯äģĨæå¨åŽčŖ
ASGI æåĄå¨ã
-////
+č¯ˇįĄŽäŋæ¨ååģēåšļæŋæ´ģä¸ä¸Ē[čæį¯åĸ](../virtual-environments.md){.internal-link target=_blank}īŧįļåååŽčŖ
æåĄå¨åēį¨į¨åēã
-//// tab | Hypercorn
+äžåĻīŧčĻåŽčŖ
Uvicornīŧå¯äģĨčŋčĄäģĨä¸åŊäģ¤īŧ
```console
-$ hypercorn main:app --bind 0.0.0.0:80
+$ pip install "uvicorn[standard]"
-Running on 0.0.0.0:8080 over http (CTRL + C to quit)
+---> 100%
```
-////
+įąģäŧŧįæĩį¨äšéį¨äēäģģäŊå
ļäģ ASGI æåĄå¨į¨åēã
-/// warning
+/// tip
-åĻææ¨æŖå¨äŊŋį¨`--reload`é饚īŧč¯ˇčŽ°äŊå é¤åŽã
+éčŋæˇģå `standard` é饚īŧUvicorn å°åŽčŖ
åšļäŊŋį¨ä¸ä翍čįéĸå¤äžčĩ饚ã
- `--reload` é饚æļčæ´å¤čĩæēīŧåšļ䏿´ä¸į¨ŗåŽã
+å
ļä¸å
æŦ `uvloop`īŧčŋæ¯ `asyncio` įéĢæ§čŊæŋäģŖæšæĄīŧčŊ夿žčæååšļåæ§čŊã
- åŽå¨**åŧå**æé´æåžå¤§å¸ŽåŠīŧäŊæ¨**ä¸åēč¯Ĩ**å¨**įäē§į¯åĸ**ä¸äŊŋį¨åŽã
+åŊæ¨äŊŋ፠`pip install "fastapi[standard]"` åŽčŖ
FastAPI æļīŧåŽé
ä¸äšäŧåŽčŖ
`uvicorn[standard]`ã
///
-## Hypercorn with Trio
-
-Starlette å **FastAPI** åēäē
AnyIO īŧ æäģĨåŽäģŦæčŊåæļä¸ Python įæ ååē
asyncio å
Trio å
ŧ厚ã
-
-å°ŊįŽĄåĻæ¤īŧUvicorn įŽåäģ
ä¸ asyncio å
ŧ厚īŧåšļä¸é常äŊŋį¨
`uvloop` , åŽæ¯`asyncio`įéĢæ§čŊæŋäģŖåã
-
-äŊåĻæäŊ æŗį´æĨäŊŋį¨**Trio**īŧéŖäšäŊ å¯äģĨäŊŋį¨**Hypercorn**īŧå ä¸ēåŽæ¯æåŽã â¨
-
-### åŽčŖ
å
ˇæ Trio į Hypercorn
+## čŋčĄæåĄå¨į¨åē
-éĻå
īŧæ¨éčĻåŽčŖ
å
ˇæ Trio æ¯æį Hypercornīŧ
+åĻææ¨æå¨åŽčŖ
äē ASGI æåĄå¨īŧé常éčĻäģĨįšåŽæ ŧåŧäŧ éä¸ä¸Ēå¯ŧå
ĨåįŦĻ串īŧäģĨäžŋæåĄå¨čŊ夿ŖįĄŽå¯ŧå
Ĩæ¨į FastAPI åēį¨īŧ
```console
-$ pip install "hypercorn[trio]"
----> 100%
+$ uvicorn main:app --host 0.0.0.0 --port 80
+
+INFO : Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit)
```
-### Run with Trio
+/// note
-įļåäŊ å¯äģĨäŧ éåŧ`trio`įģåŊäģ¤čĄé饚`--worker-class`:
+åŊäģ¤ `uvicorn main:app` įåĢäšåĻä¸īŧ
-
+* `main`īŧæįæ¯ `main.py` æäģļīŧåŗ Python âæ¨Ąåâīŧã
+* `app`īŧæįæ¯ `main.py` æäģļä¸éčŋ `app = FastAPI()` ååģēįå¯ščąĄã
-```console
-$ hypercorn main:app --worker-class trio
+åŽįäģˇäēäģĨä¸å¯ŧå
Ĩč¯åĨīŧ
+
+```Python
+from main import app
```
-
+///
+
+æ¯į§ ASGI æåĄå¨į¨åēé常éŊäŧæįąģäŧŧįåŊäģ¤īŧæ¨å¯äģĨå¨åŽäģŦįåŽæšææĄŖä¸æžå°æ´å¤äŋĄæ¯ã
+
+/// warning
+
+Uvicorn åå
ļäģæåĄå¨æ¯æ `--reload` é饚īŧč¯Ĩé饚å¨åŧåčŋį¨ä¸é常æį¨ã
-čŋå°éčŋæ¨įåēį¨į¨åēå¯å¨ HypercornīŧåšļäŊŋ፠Trio äŊä¸ēåį̝ã
+äŊ `--reload` é饚äŧæļčæ´å¤čĩæēīŧä¸į¸å¯šä¸į¨ŗåŽã
-į°å¨æ¨å¯äģĨå¨åēį¨į¨åēå
é¨äŊŋ፠Trioã æč
æ´åĨŊ῝īŧæ¨å¯äģĨäŊŋ፠AnyIOīŧäŊŋæ¨įäģŖį ä¸ Trio å asyncio å
ŧ厚ã đ
+åŽå¯šäē**åŧåéļæŽĩ**é常æå¸ŽåŠīŧäŊå¨**įäē§į¯åĸ**ä¸**ä¸åēč¯Ĩ**äŊŋį¨ã
+
+///
## é¨įŊ˛æĻåŋĩ
-čŋäēį¤ēäžčŋčĄæåĄå¨į¨åēīŧäžåĻ Uvicornīŧīŧå¯å¨**åä¸Ēčŋį¨**īŧ卿æ IPīŧ`0.0.0.0`)ä¸įåŦéĸåŽäšį̝åŖīŧäžåĻ`80`)ã
+čŋäēį¤ēäžčŋčĄæåĄå¨į¨åēīŧäžåĻ Uvicornīŧīŧå¯å¨**åä¸Ēčŋį¨**īŧ卿æ IPīŧ`0.0.0.0`īŧä¸įåŦéĸåŽäšį̝åŖīŧäžåĻ`80`īŧã
čŋæ¯åēæŦæčˇ¯ã äŊæ¨å¯čŊéčĻå¤įä¸äēå
ļäģäēæ
īŧäžåĻīŧ
* åŽå
¨æ§ - HTTPS
* å¯å¨æļčŋčĄ
* éæ°å¯å¨
-* ReplicationīŧčŋčĄįčŋ፿°īŧ
+* å¤åļīŧčŋčĄįčŋ፿°īŧ
* å
å
* åŧå§åįæĨéǤ
diff --git a/docs/zh/docs/deployment/server-workers.md b/docs/zh/docs/deployment/server-workers.md
index eb0252a5c..e46ba7a09 100644
--- a/docs/zh/docs/deployment/server-workers.md
+++ b/docs/zh/docs/deployment/server-workers.md
@@ -1,4 +1,4 @@
-# Server Workers - Gunicorn with Uvicorn
+# æåĄå¨åˇĨäŊčŋį¨īŧWorkersīŧ - äŊŋ፠Uvicorn įå¤åˇĨäŊčŋ፿¨Ąåŧ
莊æäģŦå饞ä¸ä¸äšåįé¨įŊ˛æĻåŋĩīŧ
@@ -9,125 +9,79 @@
* å
å
* å¯å¨åįå
åæĨéǤ
-å°įŽåä¸ēæĸīŧéčŋææĄŖä¸įæææį¨īŧæ¨å¯čŊ厞įģå¨**åä¸Ēčŋį¨**ä¸čŋčĄäēå Uvicorn čŋæ ˇį**æåĄå¨į¨åē**ã
+å°įŽåä¸ēæĸīŧå¨ææĄŖä¸įæææį¨ä¸īŧæ¨å¯čŊä¸į´æ¯å¨čŋčĄä¸ä¸Ē**æåĄå¨į¨åē**īŧäžåĻäŊŋ፠`fastapi` åŊä줿Ĩå¯å¨ UvicornīŧčåŽéģ莤čŋčĄįæ¯**åčŋ፿¨Ąåŧ**ã
-é¨įŊ˛åēį¨į¨åēæļīŧæ¨å¯čŊ叿čŋčĄä¸äē**čŋį¨å¤åļ**īŧäģĨåŠį¨**夿 ¸**åšļčŊå¤å¤įæ´å¤č¯ˇæąã
+é¨įŊ˛åēį¨į¨åēæļīŧæ¨å¯čŊ叿čŋčĄä¸äē**čŋį¨å¤åļ**īŧäģĨåŠį¨**夿 ¸** CPU åšļčŊå¤å¤įæ´å¤č¯ˇæąã
æŖåĻæ¨å¨ä¸ä¸įĢ æå
ŗ[é¨įŊ˛æĻåŋĩ](concepts.md){.internal-link target=_blank}ä¸įå°įīŧæ¨å¯äģĨäŊŋį¨å¤į§įįĨã
-å¨čŋéæå°åæ¨åąį¤ēåĻäŊå°
**Gunicorn** ä¸ **Uvicorn worker čŋį¨** ä¸čĩˇäŊŋį¨ã
+卿ŦįĢ čä¸īŧæå°åæ¨åąį¤ēåĻäŊäŊŋ፠`fastapi` åŊä줿ᴿĨäŊŋ፠`uvicorn` åŊäģ¤äģĨ**å¤åˇĨäŊčŋ፿¨Ąåŧ**čŋčĄ **Uvicorn**ã
/// info
åĻææ¨æŖå¨äŊŋį¨åŽšå¨īŧäžåĻ Docker æ Kubernetesīŧæå°å¨ä¸ä¸įĢ ä¸å蝿¨æ´å¤į¸å
ŗäŋĄæ¯īŧ[厚å¨ä¸į FastAPI - Docker](docker.md){.internal-link target=_blank}ã
-įšåĢæ¯īŧåŊå¨ **Kubernetes** ä¸čŋčĄæļīŧæ¨å¯čŊ**䏿ŗ**äŊŋ፠Gunicornīŧ违čŋčĄ **æ¯ä¸Ē厚å¨ä¸ä¸Ē Uvicorn čŋį¨**īŧäŊæå°å¨æŦįĢ åéĸå蝿¨čŋä¸įšã
+æ¯čžįšåĢ῝īŧå¨ **Kubernetes** į¯åĸä¸čŋčĄæļīŧæ¨é常**ä¸éčĻ**äŊŋį¨å¤ä¸ĒåˇĨäŊčŋį¨īŧ违**æ¯ä¸Ē厚å¨čŋčĄä¸ä¸Ē Uvicorn čŋį¨**ãä¸čŋīŧæäŧ卿ŦįĢ čįåįģé¨åč¯Ļįģäģįģčŋä¸įšã
///
-## Gunicorn with Uvicorn Workers
+## å¤ä¸ĒåˇĨäŊčŋį¨
-**Gunicorn**ä¸ģčĻæ¯ä¸ä¸ĒäŊŋį¨**WSGIæ å**įåē፿åĄå¨ã čŋæåŗį Gunicorn å¯äģĨä¸ē Flask å Django įåēį¨į¨åēæäžæåĄã Gunicorn æŦčēĢä¸ **FastAPI** ä¸å
ŧ厚īŧå ä¸ē FastAPI äŊŋ፿æ°į **
ASGI æ å **ã
+æ¨å¯äģĨäŊŋ፠`--workers` åŊäģ¤čĄé饚æĨå¯å¨å¤ä¸ĒåˇĨäŊčŋį¨īŧ
-äŊ Gunicorn æ¯æå
åŊ **čŋį¨įŽĄįå¨** åšļå
čŽ¸į¨æˇåč¯åŽčĻäŊŋį¨åĒä¸ĒįšåŽį **workerįąģ**ã įļå Gunicorn å°äŊŋį¨č¯Ĩįąģå¯å¨ä¸ä¸Ēæå¤ä¸Ē **workerčŋį¨**ã
+//// tab | `fastapi`
-**Uvicorn** æä¸ä¸Ē Gunicorn å
ŧ厚įworkerįąģã
-
-äŊŋį¨čŋį§įģåīŧGunicorn å°å
åŊ **čŋį¨įŽĄįå¨**īŧįåŦ **į̝åŖ** å **IP**ã åŽäŧå°éäŋĄ**äŧ čž**å°čŋčĄ**Uvicornįąģ**įworkerčŋį¨ã
-
-įļåä¸Gunicornå
ŧ厚į**Uvicorn worker**įąģå°č´č´Ŗå°Gunicornåéįæ°æŽčŊŦæĸä¸ēASGIæ åäģĨäžFastAPIäŊŋį¨ã
-
-## åŽčŖ
Gunicorn å Uvicorn
+åĻææ¨äŊŋ፠`fastapi` åŊäģ¤īŧ
```console
-$ pip install "uvicorn[standard]" gunicorn
-
----> 100%
-```
-
-
+$
fastapi run --workers 4
main.py
-čŋå°åŽčŖ
å¸Ļæ`standard`æŠåąå
īŧäģĨčˇåžéĢæ§čŊīŧį Uvicorn å Gunicornã
+
FastAPI Starting production server đ
-## Run Gunicorn with Uvicorn Workers
+ Searching for package file structure from directories with
+
__init__.py files
+ Importing from
/home/user/code/ awesomeapp
-æĨ䏿ĨäŊ å¯äģĨéčŋäģĨä¸åŊäģ¤čŋčĄGunicorn:
-
-
-
-```console
-$ gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:80
-
-[19499] [INFO] Starting gunicorn 20.1.0
-[19499] [INFO] Listening at: http://0.0.0.0:80 (19499)
-[19499] [INFO] Using worker: uvicorn.workers.UvicornWorker
-[19511] [INFO] Booting worker with pid: 19511
-[19513] [INFO] Booting worker with pid: 19513
-[19514] [INFO] Booting worker with pid: 19514
-[19515] [INFO] Booting worker with pid: 19515
-[19511] [INFO] Started server process [19511]
-[19511] [INFO] Waiting for application startup.
-[19511] [INFO] Application startup complete.
-[19513] [INFO] Started server process [19513]
-[19513] [INFO] Waiting for application startup.
-[19513] [INFO] Application startup complete.
-[19514] [INFO] Started server process [19514]
-[19514] [INFO] Waiting for application startup.
-[19514] [INFO] Application startup complete.
-[19515] [INFO] Started server process [19515]
-[19515] [INFO] Waiting for application startup.
-[19515] [INFO] Application startup complete.
-```
-
-
+
module đ main.py
+
code Importing the FastAPI app object from the module with the
+ following code:
-莊æäģŦį῝ä¸Ēé饚įåĢäšīŧ
+
from main import app
-* `main:app`īŧčŋä¸ Uvicorn äŊŋį¨į蝿ŗį¸åīŧ`main` 襨į¤ēåä¸ē"`main`"į Python æ¨Ąåīŧå æ¤æ¯æäģļ `main.py`ã `app` æ¯ **FastAPI** åēį¨į¨åēįåéåį§°ã
- * äŊ å¯äģĨæŗčąĄ `main:app` į¸åŊäēä¸ä¸Ē Python `import` č¯åĨīŧäžåĻīŧ
+
app Using import string:
main:app
- ```Python
- from main import app
- ```
+
server Server started at
http://0.0.0.0:8000
+
server Documentation at
http://0.0.0.0:8000/docs
- * å æ¤īŧ`main:app` ä¸įååˇį¸åŊäē `from main import app` ä¸į Python `import` é¨åã
+ Logs:
-* `--workers`īŧčĻäŊŋį¨įworkerčŋ፿°éīŧæ¯ä¸Ēčŋį¨å°čŋčĄä¸ä¸Ē Uvicorn workerčŋį¨īŧ卿Ŧäžä¸ä¸ē 4 ä¸Ēworkerčŋį¨ã
-
-* `--worker-class`īŧå¨workerčŋį¨ä¸äŊŋį¨įä¸ Gunicorn å
ŧ厚įåˇĨäŊįąģã
- * čŋéæäģŦäŧ éäē Gunicorn å¯äģĨå¯ŧå
ĨåäŊŋį¨įįąģīŧ
-
- ```Python
- import uvicorn.workers.UvicornWorker
- ```
-
-* `--bind`īŧčŋåč¯ Gunicorn čĻįåŦį IP åį̝åŖīŧäŊŋį¨ååˇ (`:`) åé IP åį̝åŖã
- * åĻææ¨į´æĨčŋčĄ Uvicornīŧåå¯äģĨäŊŋį¨`--host 0.0.0.0`å`--port 80`īŧč䏿¯`--bind 0.0.0.0:80`īŧGunicorn é饚īŧã
-
-
-å¨čžåēä¸īŧæ¨å¯äģĨįå°åŽæžį¤ēä翝ä¸Ēčŋį¨į **PID**īŧčŋ፠IDīŧīŧåŽåĒæ¯ä¸ä¸Ēæ°åīŧã
-
-äŊ å¯äģĨįå°īŧ
-
-* Gunicorn **čŋį¨įŽĄįå¨** äģĨ PID `19499` åŧ头īŧ卿¨įæ
åĩä¸īŧåŽå°æ¯ä¸ä¸Ēä¸åįæ°åīŧã
-* įļååŽåŧå§`Listening at: http://0.0.0.0:80`ã
-* įļååŽæŖæĩå°åŽåŋ
éĄģäŊŋ፠`uvicorn.workers.UvicornWorker` å¤įworkerįąģã
-* įļååŽå¯å¨**4ä¸Ēworker**īŧæ¯ä¸ĒéŊæčĒåˇąįPIDīŧ`19511`ã`19513`ã`19514`å`19515`ã
-
-Gunicorn čŋå°č´č´ŖįŽĄį**æģčŋį¨**å**éæ°å¯å¨**æ°čŋį¨īŧåĻæéčĻäŋæworkeræ°éīŧã å æ¤īŧčŋå¨ä¸åŽį¨åēĻ䏿åŠäēä¸éĸå襨ä¸**éå¯**įæĻåŋĩã
-
-å°ŊįŽĄåĻæ¤īŧæ¨å¯čŊčŋ叿æä¸äēå¤é¨įä¸čĨŋīŧäģĨįĄŽäŋå¨åŋ
čĻæļ**éæ°å¯å¨ Gunicorn**īŧåšļä¸**å¨å¯å¨æļčŋčĄåŽ**įã
+
INFO Uvicorn running on
http://0.0.0.0:8000 ( Press CTRL+C to
+ quit
)
+
INFO Started parent process
[ 27365 ]
+
INFO Started server process
[ 27368 ]
+
INFO Started server process
[ 27369 ]
+
INFO Started server process
[ 27370 ]
+
INFO Started server process
[ 27367 ]
+
INFO Waiting for application startup.
+
INFO Waiting for application startup.
+
INFO Waiting for application startup.
+
INFO Waiting for application startup.
+
INFO Application startup complete.
+
INFO Application startup complete.
+
INFO Application startup complete.
+
INFO Application startup complete.
+```
-## Uvicorn with Workers
+
-Uvicorn äšæä¸ä¸Ēé饚å¯äģĨå¯å¨åčŋčĄå¤ä¸Ē **workerčŋį¨**ã
+////
-įļčīŧå°įŽåä¸ēæĸīŧUvicorn å¤įworkerčŋį¨įčŊ忝 Gunicorn æ´æéã å æ¤īŧåĻææ¨æŗæĨæčŋä¸Ēįē§åĢīŧPython įē§åĢīŧįčŋį¨įŽĄįå¨īŧéŖäšæåĨŊå°č¯äŊŋ፠Gunicorn äŊä¸ēčŋį¨įŽĄįå¨ã
+//// tab | `uvicorn`
-æ čŽēåĻäŊīŧæ¨éŊå¯äģĨåčŋæ ˇčŋčĄåŽīŧ
+åĻææ¨æ´æŗčĻį´æĨäŊŋ፠`uvicorn` åŊäģ¤īŧ
@@ -151,13 +105,15 @@ $ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4
+////
+
čŋéå¯ä¸įæ°ééĄšæ¯ `--workers` åč¯ Uvicorn å¯å¨ 4 ä¸ĒåˇĨäŊčŋį¨ã
-æ¨čŋå¯äģĨįå°åŽæžį¤ēä翝ä¸Ēčŋį¨į **PID**īŧįļčŋį¨īŧčŋæ¯ **čŋį¨įŽĄįå¨**īŧį PID ä¸ē`27365`īŧæ¯ä¸ĒåˇĨäŊčŋį¨į PID ä¸ēīŧ`27368`ã`27369`īŧ `27370`å`27367`ã
+æ¨čŋå¯äģĨįå°åŽæžį¤ēä翝ä¸Ēčŋį¨į **PID**īŧįļčŋį¨īŧčŋæ¯**čŋį¨įŽĄįå¨**īŧį PID ä¸ē`27365`īŧæ¯ä¸ĒåˇĨäŊčŋį¨į PID ä¸ēīŧ`27368`ã`27369`īŧ `27370`å`27367`ã
## é¨įŊ˛æĻåŋĩ
-å¨čŋéīŧæ¨äēč§ŖäēåĻäŊäŊŋ፠**Gunicorn**īŧæ UvicornīŧįŽĄį **Uvicorn åˇĨäŊčŋį¨**æĨ**åšļčĄ**åēį¨į¨åēįæ§čĄīŧåŠį¨ CPU ä¸į **夿 ¸**īŧåšļ čŊ夿ģĄčļŗ**æ´å¤č¯ˇæą**ã
+å¨čŋéīŧæ¨åĻäš äēåĻäŊäŊŋį¨å¤ä¸Ē**åˇĨäŊčŋį¨īŧworkersīŧ**æĨ莊åēį¨į¨åēįæ§čĄ**åšļčĄå**īŧå
ååŠį¨ CPU į**夿 ¸æ§čŊ**īŧåšļčŊå¤å¤į**æ´å¤į蝎æą**ã
äģä¸éĸįé¨įŊ˛æĻåŋĩå襨æĨįīŧäŊŋį¨workerä¸ģčĻæåŠäē**å¤åļ**é¨åīŧåšļ寚**éæ°å¯å¨**æä¸įšå¸ŽåŠīŧäŊæ¨äģįļéčĻį
§éĄžå
ļäģé¨åīŧ
@@ -170,15 +126,13 @@ $ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4
## 厚å¨å Docker
-å¨å
ŗäē [厚å¨ä¸į FastAPI - Docker](docker.md){.internal-link target=_blank} įä¸ä¸įĢ ä¸īŧæå°äģįģä¸äēå¯į¨äēå¤įå
ļäģ **é¨įŊ˛æĻåŋĩ** įįįĨã
-
-æčŋå°åæ¨åąį¤ē **åŽæš Docker éå**īŧå
ļä¸å
æŦ **Gunicorn å Uvicorn worker** äģĨåä¸äē寚įŽåæ
åĩæį¨įéģ莤é
įŊŽã
+å¨å
ŗäē [厚å¨ä¸į FastAPI - Docker](docker.md){.internal-link target=_blank} įä¸ä¸įĢ ä¸īŧæå°äģįģä¸äēå¯į¨äēå¤įå
ļäģ**é¨įŊ˛æĻåŋĩ**įįįĨã
-å¨éŖéīŧæčŋå°åæ¨åąį¤ēåĻäŊ **äģ头åŧå§æåģēčĒåˇąįéå** äģĨčŋčĄåä¸Ē Uvicorn čŋį¨īŧæ˛Ąæ Gunicornīŧã čŋæ¯ä¸ä¸ĒįŽåįčŋį¨īŧåšļä¸å¯čŊæ¯æ¨å¨äŊŋį¨å **Kubernetes** čŋæ ˇįåå¸åŧ厚å¨įŽĄįįŗģįģæļæŗčĻåįäēæ
ã
+æå°åæ¨åąį¤ēåĻäŊ**äģéļåŧå§æåģēčĒåˇąįéå**īŧäģĨčŋčĄä¸ä¸ĒåįŦį Uvicorn čŋį¨ãčŋä¸Ēčŋį¨į¸å¯šįŽåīŧåšļä¸å¨äŊŋ፠**Kubernetes** įåå¸åŧ厚å¨įŽĄįįŗģįģæļīŧčŋéå¸¸æ¯æ¨éčĻéåįæšæŗã
## å饞
-æ¨å¯äģĨäŊŋį¨**Gunicorn**īŧæUvicornīŧäŊä¸ēUvicornåˇĨäŊčŋį¨įčŋį¨įŽĄįå¨īŧäģĨåŠį¨**夿 ¸CPU**īŧ**åšļčĄčŋčĄå¤ä¸Ēčŋį¨**ã
+æ¨å¯äģĨå¨äŊŋ፠`fastapi` æ `uvicorn` åŊä줿ļīŧéčŋ `--workers` CLI é饚å¯į¨å¤ä¸ĒåˇĨäŊčŋį¨īŧworkersīŧīŧäģĨå
ååŠį¨**夿 ¸ CPU**īŧäģĨ**åšļčĄčŋčĄå¤ä¸Ēčŋį¨**ã
åĻææ¨čĻ莞įŊŽ**čĒåˇąįé¨įŊ˛įŗģįģ**īŧåæļčĒåˇąå¤įå
ļäģé¨įŊ˛æĻåŋĩīŧåå¯äģĨäŊŋį¨čŋäēåˇĨå
ˇåæŗæŗã
diff --git a/docs/zh/docs/python-types.md b/docs/zh/docs/python-types.md
index 5126cb847..ba767da87 100644
--- a/docs/zh/docs/python-types.md
+++ b/docs/zh/docs/python-types.md
@@ -228,7 +228,7 @@ John Doe
## Pydantic æ¨Ąå
-Pydantic æ¯ä¸ä¸Ē፿Ĩ፿Ĩæ§čĄæ°æŽæ ĄéĒį Python åēã
+Pydantic æ¯ä¸ä¸Ē፿Ĩæ§čĄæ°æŽæ ĄéĒį Python åēã
äŊ å¯äģĨå°æ°æŽį"įģæ"åŖ°æä¸ēå
ˇæåąæ§įįąģã
diff --git a/docs/zh/docs/tutorial/bigger-applications.md b/docs/zh/docs/tutorial/bigger-applications.md
index 318e10fd7..554bc654f 100644
--- a/docs/zh/docs/tutorial/bigger-applications.md
+++ b/docs/zh/docs/tutorial/bigger-applications.md
@@ -52,7 +52,7 @@ from app.routers import items
* čŋæä¸ä¸ĒåįŽåŊ `app/internal/` å
åĢåĻä¸ä¸Ē `__init__.py` æäģļīŧå æ¤åŽæ¯åä¸ä¸ĒãPython åå
ãīŧ`app.internal`ã
* `app/internal/admin.py` æ¯åĻä¸ä¸Ē忍Ąåīŧ`app.internal.admin`ã
-
+
å¸Ļææŗ¨éįå䏿äģļįģæīŧ
@@ -244,7 +244,7 @@ from .dependencies import get_token_header
č¯ˇčŽ°äŊæäģŦįį¨åē/æäģļįģææ¯ææ ˇįīŧ
-
+
---
diff --git a/docs/zh/docs/tutorial/first-steps.md b/docs/zh/docs/tutorial/first-steps.md
index c4ff460e0..80a34116a 100644
--- a/docs/zh/docs/tutorial/first-steps.md
+++ b/docs/zh/docs/tutorial/first-steps.md
@@ -11,26 +11,42 @@
```console
-$ uvicorn main:app --reload
+$ fastapi dev main.py
-INFO : Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
-INFO : Started reloader process [28720]
-INFO : Started server process [28722]
-INFO : Waiting for application startup.
-INFO : Application startup complete.
-```
+ FastAPI Starting development server đ
-
+ Searching for package file structure from directories
+ with __init__.py files
+ Importing from /home/user/code/ awesomeapp
-/// note
+ module đ main.py
-`uvicorn main:app` åŊäģ¤åĢäšåĻä¸:
+ code Importing the FastAPI app object from the module with
+ the following code:
-* `main`īŧ`main.py` æäģļīŧä¸ä¸Ē Pythonãæ¨Ąåãīŧã
-* `app`īŧå¨ `main.py` æäģļä¸éčŋ `app = FastAPI()` ååģēįå¯ščąĄã
-* `--reload`īŧ莊æåĄå¨å¨æ´æ°äģŖį åéæ°å¯å¨ãäģ
å¨åŧåæļäŊŋį¨č¯Ĩé饚ã
+ from main import app
-///
+ app Using import string: main:app
+
+ server Server started at http://127.0.0.1:8000
+ server Documentation at http://127.0.0.1:8000/docs
+
+ tip Running in development mode, for production use:
+ fastapi run
+
+ Logs:
+
+ INFO Will watch for changes in these directories:
+ [ '/home/user/code/awesomeapp' ]
+ INFO Uvicorn running on http://127.0.0.1:8000 ( Press CTRL+C
+ to quit)
+ INFO Started reloader process [ 383138 ] using WatchFiles
+ INFO Started server process [ 383153 ]
+ INFO Waiting for application startup.
+ INFO Application startup complete.
+```
+
+
å¨čžåēä¸īŧäŧæä¸čĄäŋĄæ¯åä¸éĸčŋæ ˇīŧ
@@ -38,7 +54,6 @@ $ uvicorn main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
-
č¯ĨčĄæžį¤ēäēäŊ įåēį¨å¨æŦæēææäžæåĄį URL å°åã
### æĨį
@@ -63,7 +78,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
ååž http://127.0.0.1:8000/redoc ã
-äŊ å°äŧįå°å¯éįčĒå¨įæææĄŖ īŧįą ReDoc æäž)īŧ
+äŊ å°äŧįå°å¯éįčĒå¨įæææĄŖ īŧįą ReDoc æäžīŧīŧ

@@ -77,9 +92,9 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
#### APIãæ¨Ąåŧã
-å¨čŋį§å翝ä¸īŧOpenAPI æ¯ä¸į§č§åŽåĻäŊåŽäš API æ¨Ąåŧįč§čã
+å¨čŋį§å翝ä¸īŧOpenAPI æ¯ä¸į§č§åŽåĻäŊåŽäš API æ¨Ąåŧįč§čã
-åŽäšį OpenAPI æ¨Ąåŧå°å
æŦäŊ į API 莝åžīŧäģĨååŽäģŦå¯čŊäŊŋį¨įåæ°įįã
+ãæ¨ĄåŧãįåŽäšå
æŦäŊ į API 莝åžīŧäģĨååŽäģŦå¯čŊäŊŋį¨įåæ°įįã
#### æ°æŽãæ¨Ąåŧã
@@ -93,7 +108,7 @@ OpenAPI ä¸ēäŊ į API åŽäš API æ¨Ąåŧãč¯Ĩæ¨Ąåŧä¸å
åĢäēäŊ į API åé
#### æĨį `openapi.json`
-åĻæäŊ 寚åå§į OpenAPI æ¨Ąåŧéŋäģäšæ ˇåæå°åĨŊåĨīŧå
ļåŽåŽåĒæ¯ä¸ä¸ĒčĒå¨įæįå
åĢäēææ API æčŋ°į JSONã
+åĻæäŊ 寚åå§į OpenAPI æ¨Ąåŧéŋäģäšæ ˇåæå°åĨŊåĨīŧFastAPI čĒå¨įæäēå
åĢææ API æčŋ°į JSONīŧæ¨Ąåŧīŧã
äŊ å¯äģĨį´æĨå¨īŧhttp://127.0.0.1:8000/openapi.json įå°åŽã
@@ -101,7 +116,7 @@ OpenAPI ä¸ēäŊ į API åŽäš API æ¨Ąåŧãč¯Ĩæ¨Ąåŧä¸å
åĢäēäŊ į API åé
```JSON
{
- "openapi": "3.0.2",
+ "openapi": "3.1.0",
"info": {
"title": "FastAPI",
"version": "0.1.0"
@@ -140,7 +155,7 @@ OpenAPI ä¸ēäŊ į API åŽäš API æ¨Ąåŧãč¯Ĩæ¨Ąåŧä¸å
åĢäēäŊ į API åé
`FastAPI` æ¯į´æĨäģ `Starlette` įģ§æŋįįąģã
-äŊ å¯äģĨéčŋ `FastAPI` äŊŋ፿æį Starlette įåčŊã
+äŊ å¯äģĨéčŋ `FastAPI` äŊŋ፿æį Starlette įåčŊã
///
@@ -152,34 +167,6 @@ OpenAPI ä¸ēäŊ į API åŽäš API æ¨Ąåŧãč¯Ĩæ¨Ąåŧä¸å
åĢäēäŊ į API åé
čŋä¸ĒåŽäžå°æ¯ååģēäŊ ææ API įä¸ģčĻäē¤äēå¯ščąĄã
-čŋä¸Ē `app` åæ ˇå¨åĻä¸åŊäģ¤ä¸čĸĢ `uvicorn` æåŧį¨īŧ
-
-
-
-```console
-$ uvicorn main:app --reload
-
-INFO : Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
-```
-
-
-
-åĻæäŊ åä¸éĸčŋæ ˇååģēåēį¨īŧ
-
-{* ../../docs_src/first_steps/tutorial002.py hl[3] *}
-
-å°äģŖį æžå
Ĩ `main.py` æäģļä¸īŧįļåäŊ å¯äģĨåä¸éĸčŋæ ˇčŋčĄ `uvicorn`īŧ
-
-
-
-```console
-$ uvicorn main:my_awesome_api --reload
-
-INFO : Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
-```
-
-
-
### æĨéǤ 3īŧååģēä¸ä¸Ē*čˇ¯åžæäŊ*
#### 莝åž
@@ -279,13 +266,13 @@ https://example.com/items/foo
/// tip
-æ¨å¯äģĨéæäŊŋį¨äģģäŊä¸ä¸ĒæäŊīŧHTTPæšæŗīŧã
+äŊ å¯äģĨéæäŊŋį¨äģģäŊä¸ä¸ĒæäŊīŧHTTPæšæŗīŧã
**FastAPI** æ˛ĄæåŧēåļčĻæąæäŊæäģģäŊįšåŽįåĢäšã
æ¤å¤æäžįäŋĄæ¯äģ
äŊä¸ēæå¯ŧīŧč䏿¯čĻæąã
-æ¯åĻīŧåŊäŊŋ፠GraphQL æļé常äŊ ææįå¨äŊéŊéčŋ `post` ä¸į§æšæŗæ§čĄã
+æ¯åĻīŧåŊäŊŋ፠GraphQL æļé常äŊ ææįå¨äŊéŊéčŋ `POST` ä¸į§æšæŗæ§čĄã
///
@@ -331,6 +318,6 @@ https://example.com/items/foo
* å¯ŧå
Ĩ `FastAPI`ã
* ååģēä¸ä¸Ē `app` åŽäžã
-* įŧåä¸ä¸Ē**čˇ¯åžæäŊčŖ
éĨ°å¨**īŧåĻ `@app.get("/")`īŧã
-* įŧåä¸ä¸Ē**čˇ¯åžæäŊåŊæ°**īŧåĻä¸éĸį `def root(): ...`īŧã
-* čŋčĄåŧåæåĄå¨īŧåĻ `uvicorn main:app --reload`īŧã
+* įŧåä¸ä¸Ē**čˇ¯åžæäŊčŖ
éĨ°å¨**īŧåĻ `@app.get("/")`ã
+* åŽäšä¸ä¸Ē**čˇ¯åžæäŊåŊæ°**īŧåĻ `def root(): ...`ã
+* äŊŋį¨åŊäģ¤ `fastapi dev` čŋčĄåŧåæåĄå¨ã
diff --git a/docs/zh/docs/tutorial/index.md b/docs/zh/docs/tutorial/index.md
index ab19f02c5..3ca927337 100644
--- a/docs/zh/docs/tutorial/index.md
+++ b/docs/zh/docs/tutorial/index.md
@@ -1,34 +1,58 @@
# æį¨ - ፿ˇæå
-æŦæį¨å°ä¸æĨæĨåäŊ åąį¤ēåĻäŊäŊŋ፠**FastAPI** įįģ大é¨åįšæ§ã
+æŦæį¨å°ä¸æĨæĨ忍åąį¤ēåĻäŊäŊŋ፠**FastAPI** įįģ大é¨åįšæ§ã
-åä¸ĒįĢ čįå
厚åžĒå翏čŋīŧäŊæ¯åå´įģįåįŦįä¸ģéĸīŧæäģĨäŊ å¯äģĨį´æĨ莺čŊŦå°æä¸ĒįĢ čäģĨč§ŖåŗäŊ įįšåŽéæąã
+åä¸ĒįĢ čįå
厚åžĒå翏čŋīŧäŊæ¯åå´įģįåįŦįä¸ģéĸīŧæäģĨæ¨å¯äģĨį´æĨ莺čŊŦå°æä¸ĒįĢ čäģĨč§Ŗåŗæ¨įįšåŽéæąã
-æŦæį¨åæ ˇå¯äģĨäŊä¸ēå°æĨįåčæåã
-
-äŊ å¯äģĨéæļåå°æŦæį¨åšļæĨé
äŊ éčĻįå
厚ã
+æŦæį¨åæ ˇå¯äģĨäŊä¸ēå°æĨįåčæåīŧæäģĨæ¨å¯äģĨéæļåå°æŦæį¨åšļæĨé
æ¨éčĻįå
厚ã
## čŋčĄäģŖį
ææäģŖį įæŽĩéŊå¯äģĨå¤åļåį´æĨäŊŋį¨īŧåŽäģŦåŽé
䏿¯įģčŋæĩč¯į Python æäģļīŧã
-čĻčŋčĄäģģäŊį¤ēäžīŧ蝎å°äģŖį å¤åļå° `main.py` æäģļä¸īŧįļåäŊŋį¨äģĨä¸åŊäģ¤å¯å¨ `uvicorn`īŧ
+čĻčŋčĄäģģäŊį¤ēäžīŧ蝎å°äģŖį å¤åļå° `main.py` æäģļä¸īŧįļåäŊŋį¨äģĨä¸åŊäģ¤å¯å¨ `fastapi dev`īŧ
```console
-$ uvicorn main:app --reload
+$ fastapi dev main.py
+
+ FastAPI Starting development server đ
+
+ Searching for package file structure from directories
+ with __init__.py files
+ Importing from /home/user/code/ awesomeapp
+
+ module đ main.py
+
+ code Importing the FastAPI app object from the module with
+ the following code:
+
+ from main import app
+
+ app Using import string: main:app
+
+ server Server started at http://127.0.0.1:8000
+ server Documentation at http://127.0.0.1:8000/docs
+
+ tip Running in development mode, for production use:
+ fastapi run
+
+ Logs:
-INFO : Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
-INFO : Started reloader process [28720]
-INFO : Started server process [28722]
-INFO : Waiting for application startup.
-INFO : Application startup complete.
+ INFO Will watch for changes in these directories:
+ [ '/home/user/code/awesomeapp' ]
+ INFO Uvicorn running on http://127.0.0.1:8000 ( Press CTRL+C
+ to quit)
+ INFO Started reloader process [ 383138 ] using WatchFiles
+ INFO Started server process [ 383153 ]
+ INFO Waiting for application startup.
+ INFO Application startup complete.
```
-åŧēįåģē莎äŊ 卿Ŧå°įŧåæå¤åļäģŖį īŧ寚å
ļčŋčĄįŧčžåšļčŋčĄã
+**åŧēįåģē莎**æ¨å¨æŦå°įŧåæå¤åļäģŖį īŧ寚å
ļčŋčĄįŧčžåšļčŋčĄã
å¨įŧčžå¨ä¸äŊŋ፠FastAPI äŧįæŖå°åąį°åēåŽįäŧåŋīŧåĒéčĻįŧååžå°įäģŖį īŧææįįąģåæŖæĨīŧäģŖį čĄĨå
¨įįã
@@ -36,48 +60,34 @@ $ uvicorn main:app --reload
## åŽčŖ
FastAPI
-įŦŦä¸ä¸ĒæĨéǤæ¯åŽčŖ
FastAPIã
+įŦŦä¸ä¸ĒæĨéǤæ¯åŽčŖ
FastAPI.
-ä¸ēäēäŊŋ፿Ŧæį¨īŧäŊ å¯čŊéčĻåŽčŖ
ææįå¯éäžčĩå寚åēåčŊīŧ
+č¯ˇįĄŽäŋæ¨ååģēåšļæŋæ´ģä¸ä¸Ē[čæį¯åĸ](../virtual-environments.md){.internal-link target=_blank}īŧįļå**åŽčŖ
FastAPI**īŧ
```console
-$ pip install "fastapi[all]"
+$ pip install "fastapi[standard]"
---> 100%
```
-......äģĨä¸åŽčŖ
čŋå
æŦäē `uvicorn`īŧäŊ å¯äģĨå°å
ļį¨äŊčŋčĄäģŖį įæåĄå¨ã
-
/// note
-äŊ äšå¯äģĨååŧæĨåŽčŖ
ã
-
-ååĻäŊ æŗå°åēį¨į¨åēé¨įŊ˛å°įäē§į¯åĸīŧäŊ å¯čŊčĻæ§čĄäģĨ䏿äŊīŧ
-
-```
-pip install fastapi
-```
-
-åšļä¸åŽčŖ
`uvicorn`æĨäŊä¸ēæåĄå¨īŧ
-
-```
-pip install "uvicorn[standard]"
-```
+åŊæ¨äŊŋ፠`pip install "fastapi[standard]"` čŋčĄåŽčŖ
æļīŧåŽäŧéå¸Ļä¸äēéģ莤įå¯éæ åäžčĩ饚ã
-įļå寚äŊ æŗäŊŋį¨įæ¯ä¸Ēå¯éäžčĩéĄšäšæ§čĄį¸åįæäŊã
+åĻææ¨ä¸æŗåŽčŖ
čŋäēå¯éäžčĩīŧå¯äģĨéæŠåŽčŖ
`pip install fastapi`ã
///
## čŋéļ፿ˇæå
-卿Ŧ**æį¨-፿ˇæå**äšåīŧäŊ å¯äģĨé
č¯ģ**čŋéļ፿ˇæå**ã
+卿Ŧ**æį¨-፿ˇæå**äšåīŧæ¨å¯äģĨé
č¯ģ**čŋéļ፿ˇæå**ã
**čŋéļ፿ˇæå**äģĨæŦæį¨ä¸ēåēįĄīŧäŊŋį¨į¸åįæĻåŋĩīŧåšļææä¸äēéĸå¤įįšæ§ã
-äŊæ¯äŊ åēč¯Ĩå
é
č¯ģ**æį¨-፿ˇæå**īŧåŗäŊ į°å¨æŖå¨é
č¯ģįå
厚īŧã
+äŊæ¯æ¨åēč¯Ĩå
é
č¯ģ**æį¨-፿ˇæå**īŧåŗæ¨į°å¨æŖå¨é
č¯ģįå
厚īŧã
-æį¨įģčŋį˛žåŋ莞莥īŧäŊŋäŊ å¯äģĨäģ
éčŋ**æį¨-፿ˇæå**æĨåŧåä¸ä¸ĒåŽæ´įåēį¨į¨åēīŧįļåæ šæŽäŊ įéčĻīŧäŊŋį¨**čŋéļ፿ˇæå**ä¸įä¸äēå
ļäģæĻåŋĩīŧäģĨä¸åįæšåŧæĨæŠåąåŽã
+æį¨įģčŋį˛žåŋ莞莥īŧäŊŋæ¨å¯äģĨäģ
éčŋ**æį¨-፿ˇæå**æĨåŧåä¸ä¸ĒåŽæ´įåēį¨į¨åēīŧįļåæ šæŽæ¨įéčĻīŧäŊŋį¨**čŋéļ፿ˇæå**ä¸įä¸äēå
ļäģæĻåŋĩīŧäģĨä¸åįæšåŧæĨæŠåąåŽã
diff --git a/docs_src/custom_docs_ui/tutorial001.py b/docs_src/custom_docs_ui/tutorial001.py
index f7ceb0c2f..1cfcce19a 100644
--- a/docs_src/custom_docs_ui/tutorial001.py
+++ b/docs_src/custom_docs_ui/tutorial001.py
@@ -29,7 +29,7 @@ async def redoc_html():
return get_redoc_html(
openapi_url=app.openapi_url,
title=app.title + " - ReDoc",
- redoc_js_url="https://unpkg.com/redoc@next/bundles/redoc.standalone.js",
+ redoc_js_url="https://unpkg.com/redoc@2/bundles/redoc.standalone.js",
)
diff --git a/docs_src/header_param_models/tutorial003.py b/docs_src/header_param_models/tutorial003.py
new file mode 100644
index 000000000..dc2eb74bd
--- /dev/null
+++ b/docs_src/header_param_models/tutorial003.py
@@ -0,0 +1,19 @@
+from typing import List, Union
+
+from fastapi import FastAPI, Header
+from pydantic import BaseModel
+
+app = FastAPI()
+
+
+class CommonHeaders(BaseModel):
+ host: str
+ save_data: bool
+ if_modified_since: Union[str, None] = None
+ traceparent: Union[str, None] = None
+ x_tag: List[str] = []
+
+
+@app.get("/items/")
+async def read_items(headers: CommonHeaders = Header(convert_underscores=False)):
+ return headers
diff --git a/docs_src/header_param_models/tutorial003_an.py b/docs_src/header_param_models/tutorial003_an.py
new file mode 100644
index 000000000..e3edb1189
--- /dev/null
+++ b/docs_src/header_param_models/tutorial003_an.py
@@ -0,0 +1,22 @@
+from typing import List, Union
+
+from fastapi import FastAPI, Header
+from pydantic import BaseModel
+from typing_extensions import Annotated
+
+app = FastAPI()
+
+
+class CommonHeaders(BaseModel):
+ host: str
+ save_data: bool
+ if_modified_since: Union[str, None] = None
+ traceparent: Union[str, None] = None
+ x_tag: List[str] = []
+
+
+@app.get("/items/")
+async def read_items(
+ headers: Annotated[CommonHeaders, Header(convert_underscores=False)],
+):
+ return headers
diff --git a/docs_src/header_param_models/tutorial003_an_py310.py b/docs_src/header_param_models/tutorial003_an_py310.py
new file mode 100644
index 000000000..07bfa83bf
--- /dev/null
+++ b/docs_src/header_param_models/tutorial003_an_py310.py
@@ -0,0 +1,21 @@
+from typing import Annotated
+
+from fastapi import FastAPI, Header
+from pydantic import BaseModel
+
+app = FastAPI()
+
+
+class CommonHeaders(BaseModel):
+ host: str
+ save_data: bool
+ if_modified_since: str | None = None
+ traceparent: str | None = None
+ x_tag: list[str] = []
+
+
+@app.get("/items/")
+async def read_items(
+ headers: Annotated[CommonHeaders, Header(convert_underscores=False)],
+):
+ return headers
diff --git a/docs_src/header_param_models/tutorial003_an_py39.py b/docs_src/header_param_models/tutorial003_an_py39.py
new file mode 100644
index 000000000..8be6b01d0
--- /dev/null
+++ b/docs_src/header_param_models/tutorial003_an_py39.py
@@ -0,0 +1,21 @@
+from typing import Annotated, Union
+
+from fastapi import FastAPI, Header
+from pydantic import BaseModel
+
+app = FastAPI()
+
+
+class CommonHeaders(BaseModel):
+ host: str
+ save_data: bool
+ if_modified_since: Union[str, None] = None
+ traceparent: Union[str, None] = None
+ x_tag: list[str] = []
+
+
+@app.get("/items/")
+async def read_items(
+ headers: Annotated[CommonHeaders, Header(convert_underscores=False)],
+):
+ return headers
diff --git a/docs_src/header_param_models/tutorial003_py310.py b/docs_src/header_param_models/tutorial003_py310.py
new file mode 100644
index 000000000..65e92a28c
--- /dev/null
+++ b/docs_src/header_param_models/tutorial003_py310.py
@@ -0,0 +1,17 @@
+from fastapi import FastAPI, Header
+from pydantic import BaseModel
+
+app = FastAPI()
+
+
+class CommonHeaders(BaseModel):
+ host: str
+ save_data: bool
+ if_modified_since: str | None = None
+ traceparent: str | None = None
+ x_tag: list[str] = []
+
+
+@app.get("/items/")
+async def read_items(headers: CommonHeaders = Header(convert_underscores=False)):
+ return headers
diff --git a/docs_src/header_param_models/tutorial003_py39.py b/docs_src/header_param_models/tutorial003_py39.py
new file mode 100644
index 000000000..848c34111
--- /dev/null
+++ b/docs_src/header_param_models/tutorial003_py39.py
@@ -0,0 +1,19 @@
+from typing import Union
+
+from fastapi import FastAPI, Header
+from pydantic import BaseModel
+
+app = FastAPI()
+
+
+class CommonHeaders(BaseModel):
+ host: str
+ save_data: bool
+ if_modified_since: Union[str, None] = None
+ traceparent: Union[str, None] = None
+ x_tag: list[str] = []
+
+
+@app.get("/items/")
+async def read_items(headers: CommonHeaders = Header(convert_underscores=False)):
+ return headers
diff --git a/fastapi/__init__.py b/fastapi/__init__.py
index 757b76106..b02bf8b4f 100644
--- a/fastapi/__init__.py
+++ b/fastapi/__init__.py
@@ -1,6 +1,6 @@
"""FastAPI framework, high performance, easy to learn, fast to code, ready for production"""
-__version__ = "0.115.11"
+__version__ = "0.116.1"
from starlette import status as status
diff --git a/fastapi/_compat.py b/fastapi/_compat.py
index c07e4a3b0..227ad837d 100644
--- a/fastapi/_compat.py
+++ b/fastapi/_compat.py
@@ -16,6 +16,7 @@ from typing import (
Tuple,
Type,
Union,
+ cast,
)
from fastapi.exceptions import RequestErrorModel
@@ -231,6 +232,10 @@ if PYDANTIC_V2:
field_mapping, definitions = schema_generator.generate_definitions(
inputs=inputs
)
+ for item_def in cast(Dict[str, Dict[str, Any]], definitions).values():
+ if "description" in item_def:
+ item_description = cast(str, item_def["description"]).split("\f")[0]
+ item_def["description"] = item_description
return field_mapping, definitions # type: ignore[return-value]
def is_scalar_field(field: ModelField) -> bool:
diff --git a/fastapi/applications.py b/fastapi/applications.py
index 6d427cdc2..05c7bd2be 100644
--- a/fastapi/applications.py
+++ b/fastapi/applications.py
@@ -748,7 +748,7 @@ class FastAPI(Starlette):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -1720,7 +1720,7 @@ class FastAPI(Starlette):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -2093,7 +2093,7 @@ class FastAPI(Starlette):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -2471,7 +2471,7 @@ class FastAPI(Starlette):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -2849,7 +2849,7 @@ class FastAPI(Starlette):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -3222,7 +3222,7 @@ class FastAPI(Starlette):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -3595,7 +3595,7 @@ class FastAPI(Starlette):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -3968,7 +3968,7 @@ class FastAPI(Starlette):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -4346,7 +4346,7 @@ class FastAPI(Starlette):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -4425,7 +4425,7 @@ class FastAPI(Starlette):
app = FastAPI()
- @app.put("/items/{item_id}")
+ @app.trace("/items/{item_id}")
def trace_item(item_id: str):
return None
```
@@ -4515,14 +4515,17 @@ class FastAPI(Starlette):
```python
import time
+ from typing import Awaitable, Callable
- from fastapi import FastAPI, Request
+ from fastapi import FastAPI, Request, Response
app = FastAPI()
@app.middleware("http")
- async def add_process_time_header(request: Request, call_next):
+ async def add_process_time_header(
+ request: Request, call_next: Callable[[Request], Awaitable[Response]]
+ ) -> Response:
start_time = time.time()
response = await call_next(request)
process_time = time.time() - start_time
diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py
index cf8f88e1c..5ce40b7c6 100644
--- a/fastapi/dependencies/utils.py
+++ b/fastapi/dependencies/utils.py
@@ -780,9 +780,15 @@ def request_params_to_args(
first_field = fields[0]
fields_to_extract = fields
single_not_embedded_field = False
+ default_convert_underscores = True
if len(fields) == 1 and lenient_issubclass(first_field.type_, BaseModel):
fields_to_extract = get_cached_model_fields(first_field.type_)
single_not_embedded_field = True
+ # If headers are in a Pydantic model, the way to disable convert_underscores
+ # would be with Header(convert_underscores=False) at the Pydantic model level
+ default_convert_underscores = getattr(
+ first_field.field_info, "convert_underscores", True
+ )
params_to_process: Dict[str, Any] = {}
@@ -793,7 +799,9 @@ def request_params_to_args(
if isinstance(received_params, Headers):
# Handle fields extracted from a Pydantic Model for a header, each field
# doesn't have a FieldInfo of type Header with the default convert_underscores=True
- convert_underscores = getattr(field.field_info, "convert_underscores", True)
+ convert_underscores = getattr(
+ field.field_info, "convert_underscores", default_convert_underscores
+ )
if convert_underscores:
alias = (
field.alias
@@ -838,6 +846,25 @@ def request_params_to_args(
return values, errors
+def is_union_of_base_models(field_type: Any) -> bool:
+ """Check if field type is a Union where all members are BaseModel subclasses."""
+ from fastapi.types import UnionType
+
+ origin = get_origin(field_type)
+
+ # Check if it's a Union type (covers both typing.Union and types.UnionType in Python 3.10+)
+ if origin is not Union and origin is not UnionType:
+ return False
+
+ union_args = get_args(field_type)
+
+ for arg in union_args:
+ if not lenient_issubclass(arg, BaseModel):
+ return False
+
+ return True
+
+
def _should_embed_body_fields(fields: List[ModelField]) -> bool:
if not fields:
return False
@@ -851,10 +878,12 @@ def _should_embed_body_fields(fields: List[ModelField]) -> bool:
# If it explicitly specifies it is embedded, it has to be embedded
if getattr(first_field.field_info, "embed", None):
return True
- # If it's a Form (or File) field, it has to be a BaseModel to be top level
+ # If it's a Form (or File) field, it has to be a BaseModel (or a union of BaseModels) to be top level
# otherwise it has to be embedded, so that the key value pair can be extracted
- if isinstance(first_field.field_info, params.Form) and not lenient_issubclass(
- first_field.type_, BaseModel
+ if (
+ isinstance(first_field.field_info, params.Form)
+ and not lenient_issubclass(first_field.type_, BaseModel)
+ and not is_union_of_base_models(first_field.type_)
):
return True
return False
diff --git a/fastapi/openapi/docs.py b/fastapi/openapi/docs.py
index c2ec358d2..f181b43c1 100644
--- a/fastapi/openapi/docs.py
+++ b/fastapi/openapi/docs.py
@@ -188,7 +188,7 @@ def get_redoc_html(
It is normally set to a CDN URL.
"""
),
- ] = "https://cdn.jsdelivr.net/npm/redoc@next/bundles/redoc.standalone.js",
+ ] = "https://cdn.jsdelivr.net/npm/redoc@2/bundles/redoc.standalone.js",
redoc_favicon_url: Annotated[
str,
Doc(
diff --git a/fastapi/openapi/utils.py b/fastapi/openapi/utils.py
index bd8f3c106..808646cc2 100644
--- a/fastapi/openapi/utils.py
+++ b/fastapi/openapi/utils.py
@@ -32,6 +32,7 @@ from fastapi.utils import (
generate_operation_id_for_path,
is_body_allowed_for_status_code,
)
+from pydantic import BaseModel
from starlette.responses import JSONResponse
from starlette.routing import BaseRoute
from starlette.status import HTTP_422_UNPROCESSABLE_ENTITY
@@ -113,6 +114,13 @@ def _get_openapi_operation_parameters(
(ParamTypes.header, header_params),
(ParamTypes.cookie, cookie_params),
]
+ default_convert_underscores = True
+ if len(flat_dependant.header_params) == 1:
+ first_field = flat_dependant.header_params[0]
+ if lenient_issubclass(first_field.type_, BaseModel):
+ default_convert_underscores = getattr(
+ first_field.field_info, "convert_underscores", True
+ )
for param_type, param_group in parameter_groups:
for param in param_group:
field_info = param.field_info
@@ -126,8 +134,21 @@ def _get_openapi_operation_parameters(
field_mapping=field_mapping,
separate_input_output_schemas=separate_input_output_schemas,
)
+ name = param.alias
+ convert_underscores = getattr(
+ param.field_info,
+ "convert_underscores",
+ default_convert_underscores,
+ )
+ if (
+ param_type == ParamTypes.header
+ and param.alias == param.name
+ and convert_underscores
+ ):
+ name = param.name.replace("_", "-")
+
parameter = {
- "name": param.alias,
+ "name": name,
"in": param_type.value,
"required": param.required,
"schema": param_schema,
diff --git a/fastapi/routing.py b/fastapi/routing.py
index 80d22cc3b..aa6658c5c 100644
--- a/fastapi/routing.py
+++ b/fastapi/routing.py
@@ -9,6 +9,7 @@ from typing import (
Any,
AsyncIterator,
Callable,
+ Collection,
Coroutine,
Dict,
List,
@@ -814,7 +815,7 @@ class APIRouter(routing.Router):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -862,7 +863,7 @@ class APIRouter(routing.Router):
def route(
self,
path: str,
- methods: Optional[List[str]] = None,
+ methods: Optional[Collection[str]] = None,
name: Optional[str] = None,
include_in_schema: bool = True,
) -> Callable[[DecoratedCallable], DecoratedCallable]:
@@ -1626,7 +1627,7 @@ class APIRouter(routing.Router):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -2003,7 +2004,7 @@ class APIRouter(routing.Router):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -2385,7 +2386,7 @@ class APIRouter(routing.Router):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -2767,7 +2768,7 @@ class APIRouter(routing.Router):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -3144,7 +3145,7 @@ class APIRouter(routing.Router):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -3521,7 +3522,7 @@ class APIRouter(routing.Router):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -3903,7 +3904,7 @@ class APIRouter(routing.Router):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
@@ -4285,7 +4286,7 @@ class APIRouter(routing.Router):
This affects the generated OpenAPI (e.g. visible at `/docs`).
Read more about it in the
- [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-from-openapi).
+ [FastAPI docs for Query Parameters and String Validations](https://fastapi.tiangolo.com/tutorial/query-params-str-validations/#exclude-parameters-from-openapi).
"""
),
] = True,
diff --git a/fastapi/security/oauth2.py b/fastapi/security/oauth2.py
index 5ffad5986..88e394db1 100644
--- a/fastapi/security/oauth2.py
+++ b/fastapi/security/oauth2.py
@@ -85,7 +85,7 @@ class OAuth2PasswordRequestForm:
],
password: Annotated[
str,
- Form(),
+ Form(json_schema_extra={"format": "password"}),
Doc(
"""
`password` string. The OAuth2 spec requires the exact field name
@@ -130,7 +130,7 @@ class OAuth2PasswordRequestForm:
] = None,
client_secret: Annotated[
Union[str, None],
- Form(),
+ Form(json_schema_extra={"format": "password"}),
Doc(
"""
If there's a `client_password` (and a `client_id`), they can be sent
@@ -457,11 +457,26 @@ class OAuth2PasswordBearer(OAuth2):
"""
),
] = True,
+ refreshUrl: Annotated[
+ Optional[str],
+ Doc(
+ """
+ The URL to refresh the token and obtain a new one.
+ """
+ ),
+ ] = None,
):
if not scopes:
scopes = {}
flows = OAuthFlowsModel(
- password=cast(Any, {"tokenUrl": tokenUrl, "scopes": scopes})
+ password=cast(
+ Any,
+ {
+ "tokenUrl": tokenUrl,
+ "refreshUrl": refreshUrl,
+ "scopes": scopes,
+ },
+ )
)
super().__init__(
flows=flows,
diff --git a/pyproject.toml b/pyproject.toml
index 1c540e2f6..7709451ff 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -43,7 +43,7 @@ classifiers = [
"Topic :: Internet :: WWW/HTTP",
]
dependencies = [
- "starlette>=0.40.0,<0.47.0",
+ "starlette>=0.40.0,<0.48.0",
"pydantic>=1.7.4,!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0",
"typing-extensions>=4.8.0",
]
@@ -58,7 +58,26 @@ Changelog = "https://fastapi.tiangolo.com/release-notes/"
[project.optional-dependencies]
standard = [
- "fastapi-cli[standard] >=0.0.5",
+ "fastapi-cli[standard] >=0.0.8",
+ # For the test client
+ "httpx >=0.23.0",
+ # For templates
+ "jinja2 >=3.1.5",
+ # For forms and file uploads
+ "python-multipart >=0.0.18",
+ # To validate email fields
+ "email-validator >=2.0.0",
+ # Uvicorn with uvloop
+ "uvicorn[standard] >=0.12.0",
+ # TODO: this should be part of some pydantic optional extra dependencies
+ # # Settings management
+ # "pydantic-settings >=2.0.0",
+ # # Extra Pydantic data types
+ # "pydantic-extra-types >=2.0.0",
+]
+
+standard-no-fastapi-cloud-cli = [
+ "fastapi-cli[standard-no-fastapi-cloud-cli] >=0.0.8",
# For the test client
"httpx >=0.23.0",
# For templates
@@ -77,7 +96,7 @@ standard = [
]
all = [
- "fastapi-cli[standard] >=0.0.5",
+ "fastapi-cli[standard] >=0.0.8",
# # For the test client
"httpx >=0.23.0",
# For templates
diff --git a/requirements-docs-tests.txt b/requirements-docs-tests.txt
index e7718e61d..e7684a2e3 100644
--- a/requirements-docs-tests.txt
+++ b/requirements-docs-tests.txt
@@ -1,4 +1,4 @@
# For mkdocstrings and tests
-httpx >=0.23.0,<0.28.0
+httpx >=0.23.0,<0.29.0
# For linting and generating docs versions
-ruff ==0.9.4
+ruff ==0.11.2
diff --git a/requirements-docs.txt b/requirements-docs.txt
index 8812e27f9..5c5701f73 100644
--- a/requirements-docs.txt
+++ b/requirements-docs.txt
@@ -1,18 +1,18 @@
-e .
-r requirements-docs-tests.txt
-mkdocs-material==9.6.1
+mkdocs-material==9.6.15
mdx-include >=1.4.1,<2.0.0
mkdocs-redirects>=1.2.1,<1.3.0
-typer == 0.12.5
+typer == 0.16.0
pyyaml >=5.3.1,<7.0.0
# For Material for MkDocs, Chinese search
jieba==0.42.1
# For image processing by Material for MkDocs
-pillow==11.1.0
+pillow==11.3.0
# For image processing by Material for MkDocs
cairosvg==2.7.1
mkdocstrings[python]==0.26.1
-griffe-typingdoc==0.2.7
+griffe-typingdoc==0.2.8
# For griffe, it formats with black
black==25.1.0
mkdocs-macros-plugin==1.3.7
diff --git a/requirements-github-actions.txt b/requirements-github-actions.txt
index 920aefea6..f807d06a8 100644
--- a/requirements-github-actions.txt
+++ b/requirements-github-actions.txt
@@ -1,6 +1,6 @@
PyGithub>=2.3.0,<3.0.0
pydantic>=2.5.3,<3.0.0
pydantic-settings>=2.1.0,<3.0.0
-httpx>=0.27.0,<0.28.0
+httpx>=0.27.0,<0.29.0
pyyaml >=5.3.1,<7.0.0
smokeshow
diff --git a/requirements-tests.txt b/requirements-tests.txt
index 6a870add6..b9f2b2b66 100644
--- a/requirements-tests.txt
+++ b/requirements-tests.txt
@@ -3,14 +3,14 @@
pytest >=7.1.3,<9.0.0
coverage[toml] >= 6.5.0,< 8.0
mypy ==1.8.0
-dirty-equals ==0.8.0
-sqlmodel==0.0.23
+dirty-equals ==0.9.0
+sqlmodel==0.0.24
flask >=1.1.2,<4.0.0
anyio[trio] >=3.2.1,<5.0.0
PyJWT==2.8.0
pyyaml >=5.3.1,<7.0.0
passlib[bcrypt] >=1.7.2,<2.0.0
-inline-snapshot==0.19.3
+inline-snapshot>=0.21.1
# types
types-ujson ==5.10.0.20240515
types-orjson ==3.6.2
diff --git a/requirements-translations.txt b/requirements-translations.txt
index a8f8a02d7..90f718032 100644
--- a/requirements-translations.txt
+++ b/requirements-translations.txt
@@ -1 +1,2 @@
-pydantic-ai==0.0.15
+pydantic-ai==0.0.30
+GitPython==3.1.45
diff --git a/scripts/label_approved.py b/scripts/label_approved.py
index 271444504..81de92efb 100644
--- a/scripts/label_approved.py
+++ b/scripts/label_approved.py
@@ -27,7 +27,7 @@ if settings.debug:
logging.basicConfig(level=logging.DEBUG)
else:
logging.basicConfig(level=logging.INFO)
-logging.debug(f"Using config: {settings.json()}")
+logging.debug(f"Using config: {settings.model_dump_json()}")
g = Github(settings.token.get_secret_value())
repo = g.get_repo(settings.github_repository)
for pr in repo.get_pulls(state="open"):
@@ -48,7 +48,7 @@ for pr in repo.get_pulls(state="open"):
]
config = settings.config or default_config
for approved_label, conf in config.items():
- logging.debug(f"Processing config: {conf.json()}")
+ logging.debug(f"Processing config: {conf.model_dump_json()}")
if conf.await_label is None or (conf.await_label in pr_label_by_name):
logging.debug(f"Processable PR: {pr.number}")
if len(approved_reviews) >= conf.number:
diff --git a/scripts/people.py b/scripts/people.py
index f61fd31c9..7418b4595 100644
--- a/scripts/people.py
+++ b/scripts/people.py
@@ -119,6 +119,7 @@ class Settings(BaseSettings):
github_token: SecretStr
github_repository: str
httpx_timeout: int = 30
+ sleep_interval: int = 5
def get_graphql_response(
@@ -184,7 +185,7 @@ def get_discussion_nodes(settings: Settings) -> list[DiscussionsNode]:
discussion_nodes.append(discussion_edge.node)
last_edge = discussion_edges[-1]
# Handle GitHub secondary rate limits, requests per minute
- time.sleep(5)
+ time.sleep(settings.sleep_interval)
discussion_edges = get_graphql_question_discussion_edges(
settings=settings, after=last_edge.cursor
)
diff --git a/scripts/translate.py b/scripts/translate.py
index 9a2136d1b..b78d7211b 100644
--- a/scripts/translate.py
+++ b/scripts/translate.py
@@ -2,9 +2,11 @@ from functools import lru_cache
from pathlib import Path
from typing import Iterable
+import git
import typer
import yaml
from pydantic_ai import Agent
+from rich import print
non_translated_sections = (
"reference/",
@@ -28,8 +30,38 @@ The content is written in markdown, write the translation in markdown as well. D
When there's an example of code, the console or a terminal, normally surrounded by triple backticks and a keyword like "console" or "bash" (e.g. ```console), do not translate the content, keep the original in English.
The original content will be surrounded by triple percentage signs (%) and you should translate it to the target language. Do not include the triple percentage signs in the translation.
+
+There are special blocks of notes, tips and others that look like:
+
+/// note
+
+To translate it, keep the same line and add the translation after a vertical bar.
+
+For example, if you were translating to Spanish, you would write:
+
+/// note | Nota
+
+Some examples in Spanish:
+
+Source:
+
+/// tip
+
+Result:
+
+/// tip | Consejo
+
+Source:
+
+/// details | Preview
+
+Result:
+
+/// details | Vista previa
"""
+app = typer.Typer()
+
@lru_cache
def get_langs() -> dict[str, str]:
@@ -46,6 +78,17 @@ def generate_lang_path(*, lang: str, path: Path) -> Path:
return out_path
+def generate_en_path(*, lang: str, path: Path) -> Path:
+ en_docs_path = Path("docs/en/docs")
+ assert not str(path).startswith(str(en_docs_path)), (
+ f"Path must not be inside {en_docs_path}"
+ )
+ lang_docs_path = Path(f"docs/{lang}/docs")
+ out_path = Path(str(path).replace(str(lang_docs_path), str(en_docs_path)))
+ return out_path
+
+
+@app.command()
def translate_page(*, lang: str, path: Path) -> None:
langs = get_langs()
language = langs[lang]
@@ -64,12 +107,14 @@ def translate_page(*, lang: str, path: Path) -> None:
original_content = path.read_text()
old_translation: str | None = None
if out_path.exists():
+ print(f"Found existing translation: {out_path}")
old_translation = out_path.read_text()
+ print(f"Translating {path} to {lang} ({language})")
agent = Agent("openai:gpt-4o")
prompt_segments = [
- lang_prompt_content,
general_prompt,
+ lang_prompt_content,
]
if old_translation:
prompt_segments.extend(
@@ -89,13 +134,14 @@ def translate_page(*, lang: str, path: Path) -> None:
]
)
prompt = "\n\n".join(prompt_segments)
-
+ print(f"Running agent for {out_path}")
result = agent.run_sync(prompt)
out_content = f"{result.data.strip()}\n"
+ print(f"Saving translation to {out_path}")
out_path.write_text(out_content)
-def iter_paths_to_translate() -> Iterable[Path]:
+def iter_all_en_paths() -> Iterable[Path]:
"""
Iterate on the markdown files to translate in order of priority.
"""
@@ -119,12 +165,16 @@ def iter_paths_to_translate() -> Iterable[Path]:
yield path
-def translate_all(lang: str) -> None:
- paths_to_process: list[Path] = []
- for path in iter_paths_to_translate():
+def iter_en_paths_to_translate() -> Iterable[Path]:
+ for path in iter_all_en_paths():
if str(path).replace("docs/en/docs/", "").startswith(non_translated_sections):
continue
- paths_to_process.append(path)
+ yield path
+
+
+@app.command()
+def translate_all(lang: str) -> None:
+ paths_to_process = list(iter_en_paths_to_translate())
print("Original paths:")
for p in paths_to_process:
print(f" - {p}")
@@ -151,12 +201,82 @@ def translate_all(lang: str) -> None:
print(f"Done translating: {p}")
-def main(*, lang: str, path: Path = None) -> None:
- if path:
+@app.command()
+def list_removable(lang: str) -> list[Path]:
+ removable_paths: list[Path] = []
+ lang_paths = Path(f"docs/{lang}").rglob("*.md")
+ for path in lang_paths:
+ en_path = generate_en_path(lang=lang, path=path)
+ if not en_path.exists():
+ removable_paths.append(path)
+ print(removable_paths)
+ return removable_paths
+
+
+@app.command()
+def list_all_removable() -> list[Path]:
+ all_removable_paths: list[Path] = []
+ langs = get_langs()
+ for lang in langs:
+ if lang == "en":
+ continue
+ removable_paths = list_removable(lang)
+ all_removable_paths.extend(removable_paths)
+ print(all_removable_paths)
+ return all_removable_paths
+
+
+@app.command()
+def remove_removable(lang: str) -> None:
+ removable_paths = list_removable(lang)
+ for path in removable_paths:
+ path.unlink()
+ print(f"Removed: {path}")
+ print("Done removing all removable paths")
+
+
+@app.command()
+def remove_all_removable() -> None:
+ all_removable = list_all_removable()
+ for removable_path in all_removable:
+ removable_path.unlink()
+ print(f"Removed: {removable_path}")
+ print("Done removing all removable paths")
+
+
+@app.command()
+def list_outdated(lang: str) -> list[Path]:
+ dir_path = Path(__file__).absolute().parent.parent
+ repo = git.Repo(dir_path)
+
+ outdated_paths: list[Path] = []
+ en_lang_paths = list(iter_en_paths_to_translate())
+ for path in en_lang_paths:
+ lang_path = generate_lang_path(lang=lang, path=path)
+ if not lang_path.exists():
+ outdated_paths.append(path)
+ continue
+ en_commit_datetime = list(repo.iter_commits(paths=path, max_count=1))[
+ 0
+ ].committed_datetime
+ lang_commit_datetime = list(repo.iter_commits(paths=lang_path, max_count=1))[
+ 0
+ ].committed_datetime
+ if lang_commit_datetime < en_commit_datetime:
+ outdated_paths.append(path)
+ print(outdated_paths)
+ return outdated_paths
+
+
+@app.command()
+def update_outdated(lang: str) -> None:
+ outdated_paths = list_outdated(lang)
+ for path in outdated_paths:
+ print(f"Updating lang: {lang} path: {path}")
translate_page(lang=lang, path=path)
- else:
- translate_all(lang=lang)
+ print(f"Done updating: {path}")
+ print("Done updating all outdated paths")
if __name__ == "__main__":
- typer.run(main)
+ app()
diff --git a/tests/test_application.py b/tests/test_application.py
index 5c62f5f6e..a7d50ea72 100644
--- a/tests/test_application.py
+++ b/tests/test_application.py
@@ -43,7 +43,7 @@ def test_redoc():
response = client.get("/redoc")
assert response.status_code == 200, response.text
assert response.headers["content-type"] == "text/html; charset=utf-8"
- assert "redoc@next" in response.text
+ assert "redoc@2" in response.text
def test_enum_status_code_response():
diff --git a/tests/test_openapi_model_description_trim_on_formfeed.py b/tests/test_openapi_model_description_trim_on_formfeed.py
new file mode 100644
index 000000000..e18d4f6b2
--- /dev/null
+++ b/tests/test_openapi_model_description_trim_on_formfeed.py
@@ -0,0 +1,31 @@
+from fastapi import FastAPI
+from fastapi.testclient import TestClient
+from pydantic import BaseModel
+
+app = FastAPI()
+
+
+class MyModel(BaseModel):
+ """
+ A model with a form feed character in the title.
+ \f
+ Text after form feed character.
+ """
+
+
+@app.get("/foo")
+def foo(v: MyModel): # pragma: no cover
+ pass
+
+
+client = TestClient(app)
+
+
+def test_openapi():
+ response = client.get("/openapi.json")
+ assert response.status_code == 200, response.text
+ openapi_schema = response.json()
+
+ assert openapi_schema["components"]["schemas"]["MyModel"]["description"] == (
+ "A model with a form feed character in the title.\n"
+ )
diff --git a/tests/test_tutorial/test_cookie_param_models/test_tutorial002.py b/tests/test_tutorial/test_cookie_param_models/test_tutorial002.py
index 30adadc8a..cef6f6630 100644
--- a/tests/test_tutorial/test_cookie_param_models/test_tutorial002.py
+++ b/tests/test_tutorial/test_cookie_param_models/test_tutorial002.py
@@ -5,7 +5,13 @@ from dirty_equals import IsDict
from fastapi.testclient import TestClient
from inline_snapshot import snapshot
-from tests.utils import needs_py39, needs_py310, needs_pydanticv1, needs_pydanticv2
+from tests.utils import (
+ needs_py39,
+ needs_py310,
+ needs_pydanticv1,
+ needs_pydanticv2,
+ pydantic_snapshot,
+)
@pytest.fixture(
@@ -59,8 +65,8 @@ def test_cookie_param_model_defaults(client: TestClient):
def test_cookie_param_model_invalid(client: TestClient):
response = client.get("/items/")
assert response.status_code == 422
- assert response.json() == snapshot(
- IsDict(
+ assert response.json() == pydantic_snapshot(
+ v2=snapshot(
{
"detail": [
{
@@ -71,9 +77,8 @@ def test_cookie_param_model_invalid(client: TestClient):
}
]
}
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
+ ),
+ v1=snapshot(
{
"detail": [
{
@@ -83,7 +88,7 @@ def test_cookie_param_model_invalid(client: TestClient):
}
]
}
- )
+ ),
)
@@ -144,18 +149,23 @@ def test_openapi_schema(client: TestClient):
"name": "fatebook_tracker",
"in": "cookie",
"required": False,
- "schema": IsDict(
- {
- "anyOf": [{"type": "string"}, {"type": "null"}],
- "title": "Fatebook Tracker",
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {
- "type": "string",
- "title": "Fatebook Tracker",
- }
+ "schema": pydantic_snapshot(
+ v2=snapshot(
+ {
+ "anyOf": [
+ {"type": "string"},
+ {"type": "null"},
+ ],
+ "title": "Fatebook Tracker",
+ }
+ ),
+ v1=snapshot(
+ # TODO: remove when deprecating Pydantic v1
+ {
+ "type": "string",
+ "title": "Fatebook Tracker",
+ }
+ ),
),
},
{
diff --git a/tests/test_tutorial/test_custom_docs_ui/test_tutorial001.py b/tests/test_tutorial/test_custom_docs_ui/test_tutorial001.py
index aff070d74..cb8e8c224 100644
--- a/tests/test_tutorial/test_custom_docs_ui/test_tutorial001.py
+++ b/tests/test_tutorial/test_custom_docs_ui/test_tutorial001.py
@@ -33,7 +33,7 @@ def test_swagger_ui_oauth2_redirect_html(client: TestClient):
def test_redoc_html(client: TestClient):
response = client.get("/redoc")
assert response.status_code == 200, response.text
- assert "https://unpkg.com/redoc@next/bundles/redoc.standalone.js" in response.text
+ assert "https://unpkg.com/redoc@2/bundles/redoc.standalone.js" in response.text
def test_api(client: TestClient):
diff --git a/tests/test_tutorial/test_custom_request_and_route/test_tutorial002.py b/tests/test_tutorial/test_custom_request_and_route/test_tutorial002.py
index 6f7355aaa..647f1c5dd 100644
--- a/tests/test_tutorial/test_custom_request_and_route/test_tutorial002.py
+++ b/tests/test_tutorial/test_custom_request_and_route/test_tutorial002.py
@@ -1,4 +1,4 @@
-from dirty_equals import IsDict
+from dirty_equals import IsDict, IsOneOf
from fastapi.testclient import TestClient
from docs_src.custom_request_and_route.tutorial002 import app
@@ -24,14 +24,16 @@ def test_exception_handler_body_access():
"input": {"numbers": [1, 2, 3]},
}
],
- "body": '{"numbers": [1, 2, 3]}',
+ # httpx 0.28.0 switches to compact JSON https://github.com/encode/httpx/issues/3363
+ "body": IsOneOf('{"numbers": [1, 2, 3]}', '{"numbers":[1,2,3]}'),
}
}
) | IsDict(
# TODO: remove when deprecating Pydantic v1
{
"detail": {
- "body": '{"numbers": [1, 2, 3]}',
+ # httpx 0.28.0 switches to compact JSON https://github.com/encode/httpx/issues/3363
+ "body": IsOneOf('{"numbers": [1, 2, 3]}', '{"numbers":[1,2,3]}'),
"errors": [
{
"loc": ["body"],
diff --git a/tests/test_tutorial/test_header_param_models/test_tutorial001.py b/tests/test_tutorial/test_header_param_models/test_tutorial001.py
index 06b2404cf..bc876897b 100644
--- a/tests/test_tutorial/test_header_param_models/test_tutorial001.py
+++ b/tests/test_tutorial/test_header_param_models/test_tutorial001.py
@@ -129,13 +129,13 @@ def test_openapi_schema(client: TestClient):
"schema": {"type": "string", "title": "Host"},
},
{
- "name": "save_data",
+ "name": "save-data",
"in": "header",
"required": True,
"schema": {"type": "boolean", "title": "Save Data"},
},
{
- "name": "if_modified_since",
+ "name": "if-modified-since",
"in": "header",
"required": False,
"schema": IsDict(
@@ -171,7 +171,7 @@ def test_openapi_schema(client: TestClient):
),
},
{
- "name": "x_tag",
+ "name": "x-tag",
"in": "header",
"required": False,
"schema": {
diff --git a/tests/test_tutorial/test_header_param_models/test_tutorial002.py b/tests/test_tutorial/test_header_param_models/test_tutorial002.py
index e07655a0c..0615521c4 100644
--- a/tests/test_tutorial/test_header_param_models/test_tutorial002.py
+++ b/tests/test_tutorial/test_header_param_models/test_tutorial002.py
@@ -140,13 +140,13 @@ def test_openapi_schema(client: TestClient):
"schema": {"type": "string", "title": "Host"},
},
{
- "name": "save_data",
+ "name": "save-data",
"in": "header",
"required": True,
"schema": {"type": "boolean", "title": "Save Data"},
},
{
- "name": "if_modified_since",
+ "name": "if-modified-since",
"in": "header",
"required": False,
"schema": IsDict(
@@ -182,7 +182,7 @@ def test_openapi_schema(client: TestClient):
),
},
{
- "name": "x_tag",
+ "name": "x-tag",
"in": "header",
"required": False,
"schema": {
diff --git a/tests/test_tutorial/test_header_param_models/test_tutorial003.py b/tests/test_tutorial/test_header_param_models/test_tutorial003.py
new file mode 100644
index 000000000..60940e1da
--- /dev/null
+++ b/tests/test_tutorial/test_header_param_models/test_tutorial003.py
@@ -0,0 +1,285 @@
+import importlib
+
+import pytest
+from dirty_equals import IsDict
+from fastapi.testclient import TestClient
+from inline_snapshot import snapshot
+
+from tests.utils import needs_py39, needs_py310
+
+
+@pytest.fixture(
+ name="client",
+ params=[
+ "tutorial003",
+ pytest.param("tutorial003_py39", marks=needs_py39),
+ pytest.param("tutorial003_py310", marks=needs_py310),
+ "tutorial003_an",
+ pytest.param("tutorial003_an_py39", marks=needs_py39),
+ pytest.param("tutorial003_an_py310", marks=needs_py310),
+ ],
+)
+def get_client(request: pytest.FixtureRequest):
+ mod = importlib.import_module(f"docs_src.header_param_models.{request.param}")
+
+ client = TestClient(mod.app)
+ return client
+
+
+def test_header_param_model(client: TestClient):
+ response = client.get(
+ "/items/",
+ headers=[
+ ("save_data", "true"),
+ ("if_modified_since", "yesterday"),
+ ("traceparent", "123"),
+ ("x_tag", "one"),
+ ("x_tag", "two"),
+ ],
+ )
+ assert response.status_code == 200
+ assert response.json() == {
+ "host": "testserver",
+ "save_data": True,
+ "if_modified_since": "yesterday",
+ "traceparent": "123",
+ "x_tag": ["one", "two"],
+ }
+
+
+def test_header_param_model_no_underscore(client: TestClient):
+ response = client.get(
+ "/items/",
+ headers=[
+ ("save-data", "true"),
+ ("if-modified-since", "yesterday"),
+ ("traceparent", "123"),
+ ("x-tag", "one"),
+ ("x-tag", "two"),
+ ],
+ )
+ assert response.status_code == 422
+ assert response.json() == snapshot(
+ {
+ "detail": [
+ IsDict(
+ {
+ "type": "missing",
+ "loc": ["header", "save_data"],
+ "msg": "Field required",
+ "input": {
+ "host": "testserver",
+ "traceparent": "123",
+ "x_tag": [],
+ "accept": "*/*",
+ "accept-encoding": "gzip, deflate",
+ "connection": "keep-alive",
+ "user-agent": "testclient",
+ "save-data": "true",
+ "if-modified-since": "yesterday",
+ "x-tag": "two",
+ },
+ }
+ )
+ | IsDict(
+ # TODO: remove when deprecating Pydantic v1
+ {
+ "type": "value_error.missing",
+ "loc": ["header", "save_data"],
+ "msg": "field required",
+ }
+ )
+ ]
+ }
+ )
+
+
+def test_header_param_model_defaults(client: TestClient):
+ response = client.get("/items/", headers=[("save_data", "true")])
+ assert response.status_code == 200
+ assert response.json() == {
+ "host": "testserver",
+ "save_data": True,
+ "if_modified_since": None,
+ "traceparent": None,
+ "x_tag": [],
+ }
+
+
+def test_header_param_model_invalid(client: TestClient):
+ response = client.get("/items/")
+ assert response.status_code == 422
+ assert response.json() == snapshot(
+ {
+ "detail": [
+ IsDict(
+ {
+ "type": "missing",
+ "loc": ["header", "save_data"],
+ "msg": "Field required",
+ "input": {
+ "x_tag": [],
+ "host": "testserver",
+ "accept": "*/*",
+ "accept-encoding": "gzip, deflate",
+ "connection": "keep-alive",
+ "user-agent": "testclient",
+ },
+ }
+ )
+ | IsDict(
+ # TODO: remove when deprecating Pydantic v1
+ {
+ "type": "value_error.missing",
+ "loc": ["header", "save_data"],
+ "msg": "field required",
+ }
+ )
+ ]
+ }
+ )
+
+
+def test_header_param_model_extra(client: TestClient):
+ response = client.get(
+ "/items/", headers=[("save_data", "true"), ("tool", "plumbus")]
+ )
+ assert response.status_code == 200, response.text
+ assert response.json() == snapshot(
+ {
+ "host": "testserver",
+ "save_data": True,
+ "if_modified_since": None,
+ "traceparent": None,
+ "x_tag": [],
+ }
+ )
+
+
+def test_openapi_schema(client: TestClient):
+ response = client.get("/openapi.json")
+ assert response.status_code == 200, response.text
+ assert response.json() == snapshot(
+ {
+ "openapi": "3.1.0",
+ "info": {"title": "FastAPI", "version": "0.1.0"},
+ "paths": {
+ "/items/": {
+ "get": {
+ "summary": "Read Items",
+ "operationId": "read_items_items__get",
+ "parameters": [
+ {
+ "name": "host",
+ "in": "header",
+ "required": True,
+ "schema": {"type": "string", "title": "Host"},
+ },
+ {
+ "name": "save_data",
+ "in": "header",
+ "required": True,
+ "schema": {"type": "boolean", "title": "Save Data"},
+ },
+ {
+ "name": "if_modified_since",
+ "in": "header",
+ "required": False,
+ "schema": IsDict(
+ {
+ "anyOf": [{"type": "string"}, {"type": "null"}],
+ "title": "If Modified Since",
+ }
+ )
+ | IsDict(
+ # TODO: remove when deprecating Pydantic v1
+ {
+ "type": "string",
+ "title": "If Modified Since",
+ }
+ ),
+ },
+ {
+ "name": "traceparent",
+ "in": "header",
+ "required": False,
+ "schema": IsDict(
+ {
+ "anyOf": [{"type": "string"}, {"type": "null"}],
+ "title": "Traceparent",
+ }
+ )
+ | IsDict(
+ # TODO: remove when deprecating Pydantic v1
+ {
+ "type": "string",
+ "title": "Traceparent",
+ }
+ ),
+ },
+ {
+ "name": "x_tag",
+ "in": "header",
+ "required": False,
+ "schema": {
+ "type": "array",
+ "items": {"type": "string"},
+ "default": [],
+ "title": "X Tag",
+ },
+ },
+ ],
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {"application/json": {"schema": {}}},
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ },
+ },
+ },
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "HTTPValidationError": {
+ "properties": {
+ "detail": {
+ "items": {
+ "$ref": "#/components/schemas/ValidationError"
+ },
+ "type": "array",
+ "title": "Detail",
+ }
+ },
+ "type": "object",
+ "title": "HTTPValidationError",
+ },
+ "ValidationError": {
+ "properties": {
+ "loc": {
+ "items": {
+ "anyOf": [{"type": "string"}, {"type": "integer"}]
+ },
+ "type": "array",
+ "title": "Location",
+ },
+ "msg": {"type": "string", "title": "Message"},
+ "type": {"type": "string", "title": "Error Type"},
+ },
+ "type": "object",
+ "required": ["loc", "msg", "type"],
+ "title": "ValidationError",
+ },
+ }
+ },
+ }
+ )
diff --git a/tests/test_tutorial/test_security/test_tutorial003.py b/tests/test_tutorial/test_security/test_tutorial003.py
index 37fc2618f..2bbb2e851 100644
--- a/tests/test_tutorial/test_security/test_tutorial003.py
+++ b/tests/test_tutorial/test_security/test_tutorial003.py
@@ -163,7 +163,11 @@ def test_openapi_schema(client: TestClient):
}
),
"username": {"title": "Username", "type": "string"},
- "password": {"title": "Password", "type": "string"},
+ "password": {
+ "title": "Password",
+ "type": "string",
+ "format": "password",
+ },
"scope": {"title": "Scope", "type": "string", "default": ""},
"client_id": IsDict(
{
@@ -179,11 +183,16 @@ def test_openapi_schema(client: TestClient):
{
"title": "Client Secret",
"anyOf": [{"type": "string"}, {"type": "null"}],
+ "format": "password",
}
)
| IsDict(
# TODO: remove when deprecating Pydantic v1
- {"title": "Client Secret", "type": "string"}
+ {
+ "title": "Client Secret",
+ "type": "string",
+ "format": "password",
+ }
),
},
},
diff --git a/tests/test_tutorial/test_security/test_tutorial005.py b/tests/test_tutorial/test_security/test_tutorial005.py
index 88c3d7815..ad644d61b 100644
--- a/tests/test_tutorial/test_security/test_tutorial005.py
+++ b/tests/test_tutorial/test_security/test_tutorial005.py
@@ -377,7 +377,11 @@ def test_openapi_schema(mod: ModuleType):
}
),
"username": {"title": "Username", "type": "string"},
- "password": {"title": "Password", "type": "string"},
+ "password": {
+ "title": "Password",
+ "type": "string",
+ "format": "password",
+ },
"scope": {"title": "Scope", "type": "string", "default": ""},
"client_id": IsDict(
{
@@ -393,11 +397,16 @@ def test_openapi_schema(mod: ModuleType):
{
"title": "Client Secret",
"anyOf": [{"type": "string"}, {"type": "null"}],
+ "format": "password",
}
)
| IsDict(
# TODO: remove when deprecating Pydantic v1
- {"title": "Client Secret", "type": "string"}
+ {
+ "title": "Client Secret",
+ "type": "string",
+ "format": "password",
+ }
),
},
},
diff --git a/tests/test_tutorial/test_settings/test_tutorial001.py b/tests/test_tutorial/test_settings/test_tutorial001.py
index eb30dbcee..92a5782d4 100644
--- a/tests/test_tutorial/test_settings/test_tutorial001.py
+++ b/tests/test_tutorial/test_settings/test_tutorial001.py
@@ -1,14 +1,26 @@
+import importlib
+
+import pytest
from fastapi.testclient import TestClient
from pytest import MonkeyPatch
-from ...utils import needs_pydanticv2
+from ...utils import needs_pydanticv1, needs_pydanticv2
-@needs_pydanticv2
-def test_settings(monkeypatch: MonkeyPatch):
+@pytest.fixture(
+ name="app",
+ params=[
+ pytest.param("tutorial001", marks=needs_pydanticv2),
+ pytest.param("tutorial001_pv1", marks=needs_pydanticv1),
+ ],
+)
+def get_app(request: pytest.FixtureRequest, monkeypatch: MonkeyPatch):
monkeypatch.setenv("ADMIN_EMAIL", "admin@example.com")
- from docs_src.settings.tutorial001 import app
+ mod = importlib.import_module(f"docs_src.settings.{request.param}")
+ return mod.app
+
+def test_settings(app):
client = TestClient(app)
response = client.get("/info")
assert response.status_code == 200, response.text
diff --git a/tests/test_tutorial/test_settings/test_tutorial001_pv1.py b/tests/test_tutorial/test_settings/test_tutorial001_pv1.py
deleted file mode 100644
index e4659de66..000000000
--- a/tests/test_tutorial/test_settings/test_tutorial001_pv1.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from fastapi.testclient import TestClient
-from pytest import MonkeyPatch
-
-from ...utils import needs_pydanticv1
-
-
-@needs_pydanticv1
-def test_settings(monkeypatch: MonkeyPatch):
- monkeypatch.setenv("ADMIN_EMAIL", "admin@example.com")
- from docs_src.settings.tutorial001_pv1 import app
-
- client = TestClient(app)
- response = client.get("/info")
- assert response.status_code == 200, response.text
- assert response.json() == {
- "app_name": "Awesome API",
- "admin_email": "admin@example.com",
- "items_per_user": 50,
- }
diff --git a/tests/test_tutorial/test_sql_databases/test_tutorial002.py b/tests/test_tutorial/test_sql_databases/test_tutorial002.py
index 79e48c1c3..8a98f9a2d 100644
--- a/tests/test_tutorial/test_sql_databases/test_tutorial002.py
+++ b/tests/test_tutorial/test_sql_databases/test_tutorial002.py
@@ -4,7 +4,7 @@ import warnings
import pytest
from dirty_equals import IsDict, IsInt
from fastapi.testclient import TestClient
-from inline_snapshot import snapshot
+from inline_snapshot import Is, snapshot
from sqlalchemy import StaticPool
from sqlmodel import SQLModel, create_engine
from sqlmodel.main import default_registry
@@ -117,14 +117,14 @@ def test_crud_app(client: TestClient):
)
assert response.status_code == 200, response.text
assert response.json() == snapshot(
- {"name": "Dog Pond", "age": None, "id": hero_id}
+ {"name": "Dog Pond", "age": None, "id": Is(hero_id)}
)
# Get updated hero
response = client.get(f"/heroes/{hero_id}")
assert response.status_code == 200, response.text
assert response.json() == snapshot(
- {"name": "Dog Pond", "age": None, "id": hero_id}
+ {"name": "Dog Pond", "age": None, "id": Is(hero_id)}
)
# Delete a hero
diff --git a/tests/test_union_forms.py b/tests/test_union_forms.py
new file mode 100644
index 000000000..cbe98ea82
--- /dev/null
+++ b/tests/test_union_forms.py
@@ -0,0 +1,156 @@
+from typing import Union
+
+from fastapi import FastAPI, Form
+from fastapi.testclient import TestClient
+from pydantic import BaseModel
+from typing_extensions import Annotated
+
+app = FastAPI()
+
+
+class UserForm(BaseModel):
+ name: str
+ email: str
+
+
+class CompanyForm(BaseModel):
+ company_name: str
+ industry: str
+
+
+@app.post("/form-union/")
+def post_union_form(data: Annotated[Union[UserForm, CompanyForm], Form()]):
+ return {"received": data}
+
+
+client = TestClient(app)
+
+
+def test_post_user_form():
+ response = client.post(
+ "/form-union/", data={"name": "John Doe", "email": "john@example.com"}
+ )
+ assert response.status_code == 200, response.text
+ assert response.json() == {
+ "received": {"name": "John Doe", "email": "john@example.com"}
+ }
+
+
+def test_post_company_form():
+ response = client.post(
+ "/form-union/", data={"company_name": "Tech Corp", "industry": "Technology"}
+ )
+ assert response.status_code == 200, response.text
+ assert response.json() == {
+ "received": {"company_name": "Tech Corp", "industry": "Technology"}
+ }
+
+
+def test_invalid_form_data():
+ response = client.post(
+ "/form-union/",
+ data={"name": "John", "company_name": "Tech Corp"},
+ )
+ assert response.status_code == 422, response.text
+
+
+def test_empty_form():
+ response = client.post("/form-union/")
+ assert response.status_code == 422, response.text
+
+
+def test_openapi_schema():
+ response = client.get("/openapi.json")
+ assert response.status_code == 200, response.text
+
+ assert response.json() == {
+ "openapi": "3.1.0",
+ "info": {"title": "FastAPI", "version": "0.1.0"},
+ "paths": {
+ "/form-union/": {
+ "post": {
+ "summary": "Post Union Form",
+ "operationId": "post_union_form_form_union__post",
+ "requestBody": {
+ "content": {
+ "application/x-www-form-urlencoded": {
+ "schema": {
+ "anyOf": [
+ {"$ref": "#/components/schemas/UserForm"},
+ {"$ref": "#/components/schemas/CompanyForm"},
+ ],
+ "title": "Data",
+ }
+ }
+ },
+ "required": True,
+ },
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {"application/json": {"schema": {}}},
+ },
+ "422": {
+ "description": "Validation Error",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/HTTPValidationError"
+ }
+ }
+ },
+ },
+ },
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "CompanyForm": {
+ "properties": {
+ "company_name": {"type": "string", "title": "Company Name"},
+ "industry": {"type": "string", "title": "Industry"},
+ },
+ "type": "object",
+ "required": ["company_name", "industry"],
+ "title": "CompanyForm",
+ },
+ "HTTPValidationError": {
+ "properties": {
+ "detail": {
+ "items": {"$ref": "#/components/schemas/ValidationError"},
+ "type": "array",
+ "title": "Detail",
+ }
+ },
+ "type": "object",
+ "title": "HTTPValidationError",
+ },
+ "UserForm": {
+ "properties": {
+ "name": {"type": "string", "title": "Name"},
+ "email": {"type": "string", "title": "Email"},
+ },
+ "type": "object",
+ "required": ["name", "email"],
+ "title": "UserForm",
+ },
+ "ValidationError": {
+ "properties": {
+ "loc": {
+ "items": {
+ "anyOf": [{"type": "string"}, {"type": "integer"}]
+ },
+ "type": "array",
+ "title": "Location",
+ },
+ "msg": {"type": "string", "title": "Message"},
+ "type": {"type": "string", "title": "Error Type"},
+ },
+ "type": "object",
+ "required": ["loc", "msg", "type"],
+ "title": "ValidationError",
+ },
+ }
+ },
+ }
diff --git a/tests/test_validate_response_recursive/app_pv1.py b/tests/test_validate_response_recursive/app.py
similarity index 79%
rename from tests/test_validate_response_recursive/app_pv1.py
rename to tests/test_validate_response_recursive/app.py
index 4cfc4b3ee..d23d27980 100644
--- a/tests/test_validate_response_recursive/app_pv1.py
+++ b/tests/test_validate_response_recursive/app.py
@@ -1,6 +1,7 @@
from typing import List
from fastapi import FastAPI
+from fastapi._compat import PYDANTIC_V2
from pydantic import BaseModel
app = FastAPI()
@@ -11,9 +12,6 @@ class RecursiveItem(BaseModel):
name: str
-RecursiveItem.update_forward_refs()
-
-
class RecursiveSubitemInSubmodel(BaseModel):
sub_items2: List["RecursiveItemViaSubmodel"] = []
name: str
@@ -24,7 +22,13 @@ class RecursiveItemViaSubmodel(BaseModel):
name: str
-RecursiveSubitemInSubmodel.update_forward_refs()
+if PYDANTIC_V2:
+ RecursiveItem.model_rebuild()
+ RecursiveSubitemInSubmodel.model_rebuild()
+ RecursiveItemViaSubmodel.model_rebuild()
+else:
+ RecursiveItem.update_forward_refs()
+ RecursiveSubitemInSubmodel.update_forward_refs()
@app.get("/items/recursive", response_model=RecursiveItem)
diff --git a/tests/test_validate_response_recursive/app_pv2.py b/tests/test_validate_response_recursive/app_pv2.py
deleted file mode 100644
index 8c93a8349..000000000
--- a/tests/test_validate_response_recursive/app_pv2.py
+++ /dev/null
@@ -1,51 +0,0 @@
-from typing import List
-
-from fastapi import FastAPI
-from pydantic import BaseModel
-
-app = FastAPI()
-
-
-class RecursiveItem(BaseModel):
- sub_items: List["RecursiveItem"] = []
- name: str
-
-
-RecursiveItem.model_rebuild()
-
-
-class RecursiveSubitemInSubmodel(BaseModel):
- sub_items2: List["RecursiveItemViaSubmodel"] = []
- name: str
-
-
-class RecursiveItemViaSubmodel(BaseModel):
- sub_items1: List[RecursiveSubitemInSubmodel] = []
- name: str
-
-
-RecursiveSubitemInSubmodel.model_rebuild()
-RecursiveItemViaSubmodel.model_rebuild()
-
-
-@app.get("/items/recursive", response_model=RecursiveItem)
-def get_recursive():
- return {"name": "item", "sub_items": [{"name": "subitem", "sub_items": []}]}
-
-
-@app.get("/items/recursive-submodel", response_model=RecursiveItemViaSubmodel)
-def get_recursive_submodel():
- return {
- "name": "item",
- "sub_items1": [
- {
- "name": "subitem",
- "sub_items2": [
- {
- "name": "subsubitem",
- "sub_items1": [{"name": "subsubsubitem", "sub_items2": []}],
- }
- ],
- }
- ],
- }
diff --git a/tests/test_validate_response_recursive/test_validate_response_recursive_pv2.py b/tests/test_validate_response_recursive/test_validate_response_recursive.py
similarity index 90%
rename from tests/test_validate_response_recursive/test_validate_response_recursive_pv2.py
rename to tests/test_validate_response_recursive/test_validate_response_recursive.py
index 7d45e7fe4..21a299ab8 100644
--- a/tests/test_validate_response_recursive/test_validate_response_recursive_pv2.py
+++ b/tests/test_validate_response_recursive/test_validate_response_recursive.py
@@ -1,12 +1,9 @@
from fastapi.testclient import TestClient
-from ..utils import needs_pydanticv2
+from .app import app
-@needs_pydanticv2
def test_recursive():
- from .app_pv2 import app
-
client = TestClient(app)
response = client.get("/items/recursive")
assert response.status_code == 200, response.text
diff --git a/tests/test_validate_response_recursive/test_validate_response_recursive_pv1.py b/tests/test_validate_response_recursive/test_validate_response_recursive_pv1.py
deleted file mode 100644
index de578ae03..000000000
--- a/tests/test_validate_response_recursive/test_validate_response_recursive_pv1.py
+++ /dev/null
@@ -1,33 +0,0 @@
-from fastapi.testclient import TestClient
-
-from ..utils import needs_pydanticv1
-
-
-@needs_pydanticv1
-def test_recursive():
- from .app_pv1 import app
-
- client = TestClient(app)
- response = client.get("/items/recursive")
- assert response.status_code == 200, response.text
- assert response.json() == {
- "sub_items": [{"name": "subitem", "sub_items": []}],
- "name": "item",
- }
-
- response = client.get("/items/recursive-submodel")
- assert response.status_code == 200, response.text
- assert response.json() == {
- "name": "item",
- "sub_items1": [
- {
- "name": "subitem",
- "sub_items2": [
- {
- "name": "subsubitem",
- "sub_items1": [{"name": "subsubsubitem", "sub_items2": []}],
- }
- ],
- }
- ],
- }
diff --git a/tests/utils.py b/tests/utils.py
index 460c028f7..ae9543e3b 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -2,6 +2,7 @@ import sys
import pytest
from fastapi._compat import PYDANTIC_V2
+from inline_snapshot import Snapshot
needs_py39 = pytest.mark.skipif(sys.version_info < (3, 9), reason="requires python3.9+")
needs_py310 = pytest.mark.skipif(
@@ -9,3 +10,25 @@ needs_py310 = pytest.mark.skipif(
)
needs_pydanticv2 = pytest.mark.skipif(not PYDANTIC_V2, reason="requires Pydantic v2")
needs_pydanticv1 = pytest.mark.skipif(PYDANTIC_V2, reason="requires Pydantic v1")
+
+
+def pydantic_snapshot(
+ *,
+ v2: Snapshot,
+ v1: Snapshot, # TODO: remove v1 argument when deprecating Pydantic v1
+):
+ """
+ This function should be used like this:
+
+ >>> assert value == pydantic_snapshot(v2=snapshot(),v1=snapshot())
+
+ inline-snapshot will create the snapshots when pytest is executed for each versions of pydantic.
+
+ It is also possible to use the function inside snapshots for version-specific values.
+
+ >>> assert value == snapshot({
+ "data": "some data",
+ "version_specific": pydantic_snapshot(v2=snapshot(),v1=snapshot()),
+ })
+ """
+ return v2 if PYDANTIC_V2 else v1