From: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
Date: Thu, 12 Feb 2026 19:57:34 +0000 (+0100)
Subject: 🌐 Update translations for ru (update-outdated) (#14909)
X-Git-Tag: 0.129.1~41
X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=55a9eee13a7c228b358bd110976b3aeab3185fe2;p=thirdparty%2Ffastapi%2Ffastapi.git
🌐 Update translations for ru (update-outdated) (#14909)
* Update all
* Reflect latest changes in `docs/en/docs/tutorial/security/oauth2-jwt.md`
---
diff --git a/docs/ru/docs/advanced/additional-responses.md b/docs/ru/docs/advanced/additional-responses.md
index fca4f072da..ca36ba20e3 100644
--- a/docs/ru/docs/advanced/additional-responses.md
+++ b/docs/ru/docs/advanced/additional-responses.md
@@ -26,7 +26,7 @@
ÐапÑимеÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÑвиÑÑ ÐµÑÑ Ð¾Ð´Ð¸Ð½ оÑÐ²ÐµÑ Ñо ÑÑаÑÑÑ-кодом `404` и Pydantic-моделÑÑ `Message`, можно напиÑаÑÑ:
-{* ../../docs_src/additional_responses/tutorial001_py39.py hl[18,22] *}
+{* ../../docs_src/additional_responses/tutorial001_py310.py hl[18,22] *}
/// note | ÐÑимеÑание
@@ -203,7 +203,7 @@
Ð Ñакже оÑÐ²ÐµÑ Ñо ÑÑаÑÑÑ-кодом `200`, коÑоÑÑй иÑполÑзÑÐµÑ Ð²Ð°Ñ `response_model`, но вклÑÑÐ°ÐµÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий `example`:
-{* ../../docs_src/additional_responses/tutorial003_py39.py hl[20:31] *}
+{* ../../docs_src/additional_responses/tutorial003_py310.py hl[20:31] *}
ÐÑÑ ÑÑо бÑÐ´ÐµÑ Ð¾Ð±Ñединено и вклÑÑено в Ð²Ð°Ñ OpenAPI и оÑобÑажено в докÑменÑаÑии API:
diff --git a/docs/ru/docs/advanced/advanced-dependencies.md b/docs/ru/docs/advanced/advanced-dependencies.md
index fb2643cd5c..686a0cf91e 100644
--- a/docs/ru/docs/advanced/advanced-dependencies.md
+++ b/docs/ru/docs/advanced/advanced-dependencies.md
@@ -18,7 +18,7 @@
ÐÐ»Ñ ÑÑого обÑÑвлÑем меÑод `__call__`:
-{* ../../docs_src/dependencies/tutorial011_an_py39.py hl[12] *}
+{* ../../docs_src/dependencies/tutorial011_an_py310.py hl[12] *}
Ð ÑÑом ÑлÑÑае именно `__call__` **FastAPI** иÑполÑзÑÐµÑ Ð´Ð»Ñ Ð¿ÑовеÑки дополниÑелÑнÑÑ
паÑамеÑÑов и подзавиÑимоÑÑей, и именно он бÑÐ´ÐµÑ Ð²Ñзван, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð·Ð¶Ðµ пеÑедаÑÑ Ð·Ð½Ð°Ñение паÑамеÑÑÑ Ð² ваÑей *ÑÑнкÑии-обÑабоÑÑике пÑÑи*.
@@ -26,7 +26,7 @@
ТепеÑÑ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ `__init__`, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÑвиÑÑ Ð¿Ð°ÑамеÑÑÑ ÑкземплÑÑа, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾ÑоÑÑÑ
бÑдем «паÑамеÑÑизоваÑÑ» завиÑимоÑÑÑ:
-{* ../../docs_src/dependencies/tutorial011_an_py39.py hl[9] *}
+{* ../../docs_src/dependencies/tutorial011_an_py310.py hl[9] *}
Ð ÑÑом ÑлÑÑае **FastAPI** вовÑе не ÑÑÐ¾Ð³Ð°ÐµÑ `__init__` и не завиÑÐ¸Ñ Ð¾Ñ Ð½ÐµÐ³Ð¾ â Ð¼Ñ Ð¸ÑполÑзÑем его напÑÑмÑÑ Ð² наÑем коде.
@@ -34,7 +34,7 @@
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ ÑоздаÑÑ ÑкземплÑÑ ÑÑого клаÑÑа Ñак:
-{* ../../docs_src/dependencies/tutorial011_an_py39.py hl[18] *}
+{* ../../docs_src/dependencies/tutorial011_an_py310.py hl[18] *}
Так Ð¼Ñ Â«Ð¿Ð°ÑамеÑÑизÑем» наÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ: ÑепеÑÑ Ð²Ð½ÑÑÑи Ð½ÐµÑ Ñ
ÑаниÑÑÑ "bar" в аÑÑибÑÑе `checker.fixed_content`.
@@ -50,7 +50,7 @@ checker(q="somequery")
â¦Ð¸ пеÑедаÑÑ Ð²Ð¾Ð·Ð²ÑаÑÑнное знаÑение как знаÑение завиÑимоÑÑи в паÑамеÑÑ `fixed_content_included` наÑей *ÑÑнкÑии-обÑабоÑÑика пÑÑи*:
-{* ../../docs_src/dependencies/tutorial011_an_py39.py hl[22] *}
+{* ../../docs_src/dependencies/tutorial011_an_py310.py hl[22] *}
/// tip | СовеÑ
diff --git a/docs/ru/docs/advanced/advanced-python-types.md b/docs/ru/docs/advanced/advanced-python-types.md
new file mode 100644
index 0000000000..62dcf8c4f1
--- /dev/null
+++ b/docs/ru/docs/advanced/advanced-python-types.md
@@ -0,0 +1,61 @@
+# ÐÑодвинÑÑÑе ÑÐ¸Ð¿Ñ Python { #advanced-python-types }
+
+Ðиже неÑколÑко дополниÑелÑнÑÑ
идей, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð¿Ñи ÑабоÑе Ñ Ñипами Python.
+
+## ÐÑполÑзование `Union` или `Optional` { #using-union-or-optional }
+
+ÐÑли по какой-Ñо пÑиÑине Ð²Ð°Ñ ÐºÐ¾Ð´ не Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ `|`, напÑимеÑ, еÑли ÑÑо не анноÑаÑÐ¸Ñ Ñипов, а ÑÑо-Ñо вÑоде `response_model=`, вмеÑÑо веÑÑикалÑной ÑеÑÑÑ (`|`) можно иÑполÑзоваÑÑ `Union` из `typing`.
+
+ÐапÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ, ÑÑо знаÑение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ `str` или `None`:
+
+```python
+from typing import Union
+
+
+def say_hi(name: Union[str, None]):
+ print(f"Hi {name}!")
+```
+
+Ð `typing` Ñакже еÑÑÑ ÑокÑаÑение, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÑвиÑÑ, ÑÑо знаÑение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ `None`, â `Optional`.
+
+ÐÐ¾Ñ ÑÐ¾Ð²ÐµÑ Ñ Ð¼Ð¾ÐµÐ¹ оÑÐµÐ½Ñ ÑÑбÑекÑивной ÑоÑки зÑениÑ:
+
+- ð¨ ÐзбегайÑе иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ `Optional[SomeType]`
+- ÐмеÑÑо ÑÑого ⨠иÑполÑзÑйÑе **`Union[SomeType, None]`** â¨.
+
+Ðба ваÑианÑа ÑквиваленÑÐ½Ñ Ð¸ под капоÑом ÑÑо одно и Ñо же, но Ñ Ð±Ñ Ñекомендовал `Union` вмеÑÑо `Optional`, поÑÐ¾Ð¼Ñ ÑÑо Ñлово «optional» Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°Ð²Ð¾Ð´Ð¸ÑÑ Ð½Ð° мÑÑлÑ, ÑÑо знаÑение необÑзаÑелÑное, Ñогда как на Ñамом деле ÑÑо ознаÑÐ°ÐµÑ Â«Ð·Ð½Ð°Ñение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ `None`», даже еÑли оно не ÑвлÑеÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑм и по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ ÑÑебÑеÑÑÑ.
+
+Ðо-моемÑ, `Union[SomeType, None]` более Ñвно пеÑедаÑÑ ÑмÑÑл.
+
+РеÑÑ ÑолÑко о ÑловаÑ
и названиÑÑ
. Ðо ÑÑи Ñлова могÑÑ Ð²Ð»Ð¸ÑÑÑ Ð½Ð° Ñо, как Ð²Ñ Ð¸ ваÑа команда дÑмаеÑе о коде.
+
+РкаÑеÑÑве пÑимеÑа возÑмÑм ÑакÑÑ ÑÑнкÑиÑ:
+
+```python
+from typing import Optional
+
+
+def say_hi(name: Optional[str]):
+ print(f"Hey {name}!")
+```
+
+ÐаÑамеÑÑ `name` обÑÑвлен как `Optional[str]`, но он не ÑвлÑеÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑм: Ð²Ñ Ð½Ðµ можеÑе вÑзваÑÑ ÑÑнкÑÐ¸Ñ Ð±ÐµÐ· ÑÑого паÑамеÑÑа:
+
+```Python
+say_hi() # РнеÑ, ÑÑо вÑзÑÐ²Ð°ÐµÑ Ð¾ÑибкÑ! ð±
+```
+
+ÐаÑамеÑÑ `name` по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¾Ð±ÑзаÑелен (не «optional»), Ñак как Ñ Ð½ÐµÐ³Ð¾ Ð½ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ. ÐÑи ÑÑом `name` пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ `None` в каÑеÑÑве знаÑениÑ:
+
+```Python
+say_hi(name=None) # ÐÑо ÑабоÑаеÑ, None допÑÑÑим ð
+```
+
+ХоÑоÑÐ°Ñ Ð½Ð¾Ð²Ð¾ÑÑÑ: в болÑÑинÑÑве ÑлÑÑаев Ð²Ñ ÑможеÑе пÑоÑÑо иÑполÑзоваÑÑ `|` Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ñединений Ñипов:
+
+```python
+def say_hi(name: str | None):
+ print(f"Hey {name}!")
+```
+
+Так ÑÑо обÑÑно вам не о Ñем пеÑеживаÑÑ Ð¸Ð·âза названий вÑоде `Optional` и `Union`. ð
diff --git a/docs/ru/docs/advanced/async-tests.md b/docs/ru/docs/advanced/async-tests.md
index e689704066..52939c2559 100644
--- a/docs/ru/docs/advanced/async-tests.md
+++ b/docs/ru/docs/advanced/async-tests.md
@@ -32,11 +32,11 @@
Файл `main.py`:
-{* ../../docs_src/async_tests/app_a_py39/main.py *}
+{* ../../docs_src/async_tests/app_a_py310/main.py *}
Файл `test_main.py` ÑодеÑÐ¶Ð¸Ñ ÑеÑÑÑ Ð´Ð»Ñ `main.py`, ÑепеÑÑ Ð¾Ð½ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ñак:
-{* ../../docs_src/async_tests/app_a_py39/test_main.py *}
+{* ../../docs_src/async_tests/app_a_py310/test_main.py *}
## ÐапÑÑк ÑеÑÑов { #run-it }
@@ -56,7 +56,7 @@ $ pytest
ÐаÑÐºÐµÑ `@pytest.mark.anyio` говоÑÐ¸Ñ pytest, ÑÑо ÑеÑÑÐ¾Ð²Ð°Ñ ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ð²Ñзвана аÑинÑ
Ñонно:
-{* ../../docs_src/async_tests/app_a_py39/test_main.py hl[7] *}
+{* ../../docs_src/async_tests/app_a_py310/test_main.py hl[7] *}
/// tip | ÐодÑказка
@@ -66,7 +66,7 @@ $ pytest
ÐаÑем Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑоздаÑÑ `AsyncClient` Ñо ÑÑÑлкой на пÑиложение и поÑÑлаÑÑ Ð°ÑинÑ
ÑоннÑе запÑоÑÑ, иÑполÑзÑÑ `await`.
-{* ../../docs_src/async_tests/app_a_py39/test_main.py hl[9:12] *}
+{* ../../docs_src/async_tests/app_a_py310/test_main.py hl[9:12] *}
ÐÑо ÑквиваленÑно ÑледÑÑÑемÑ:
@@ -94,6 +94,6 @@ response = client.get('/')
/// tip | ÐодÑказка
-ÐÑли Ð²Ñ ÑÑолкнÑлиÑÑ Ñ `RuntimeError: Task attached to a different loop` пÑи вÑзове аÑинÑ
ÑоннÑÑ
ÑÑнкÑий в ваÑиÑ
ÑеÑÑаÑ
(напÑимеÑ, пÑи иÑполÑзовании MongoDB's MotorClient), Ñо не забÑвайÑе иниÑиализиÑоваÑÑ Ð¾Ð±ÑекÑÑ, коÑоÑÑм нÑжен Ñикл ÑобÑÑий (event loop), ÑолÑко внÑÑÑи аÑинÑ
ÑоннÑÑ
ÑÑнкÑий, напÑимеÑ, в `'@app.on_event("startup")` callback.
+ÐÑли Ð²Ñ ÑÑолкнÑлиÑÑ Ñ `RuntimeError: Task attached to a different loop` пÑи вÑзове аÑинÑ
ÑоннÑÑ
ÑÑнкÑий в ваÑиÑ
ÑеÑÑаÑ
(напÑимеÑ, пÑи иÑполÑзовании MongoDB's MotorClient), Ñо не забÑвайÑе иниÑиализиÑоваÑÑ Ð¾Ð±ÑекÑÑ, коÑоÑÑм нÑжен Ñикл ÑобÑÑий (event loop), ÑолÑко внÑÑÑи аÑинÑ
ÑоннÑÑ
ÑÑнкÑий, напÑимеÑ, в `@app.on_event("startup")` callback.
///
diff --git a/docs/ru/docs/advanced/behind-a-proxy.md b/docs/ru/docs/advanced/behind-a-proxy.md
index f78da01a09..ec75ed3698 100644
--- a/docs/ru/docs/advanced/behind-a-proxy.md
+++ b/docs/ru/docs/advanced/behind-a-proxy.md
@@ -44,7 +44,7 @@ $ fastapi run --forwarded-allow-ips="*"
ÐапÑимеÑ, Ð²Ñ Ð¾Ð±ÑÑвили опеÑаÑÐ¸Ñ Ð¿ÑÑи `/items/`:
-{* ../../docs_src/behind_a_proxy/tutorial001_01_py39.py hl[6] *}
+{* ../../docs_src/behind_a_proxy/tutorial001_01_py310.py hl[6] *}
ÐÑли ÐºÐ»Ð¸ÐµÐ½Ñ Ð¾Ð±ÑаÑиÑÑÑ Ðº `/items`, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑоизойдÑÑ ÑедиÑÐµÐºÑ Ð½Ð° `/items/`.
@@ -115,7 +115,7 @@ sequenceDiagram
ХоÑÑ Ð²ÐµÑÑ Ð²Ð°Ñ ÐºÐ¾Ð´ напиÑан Ñ ÑаÑÑÑÑом, ÑÑо пÑÑÑ Ð¾Ð´Ð¸Ð½ â `/app`.
-{* ../../docs_src/behind_a_proxy/tutorial001_py39.py hl[6] *}
+{* ../../docs_src/behind_a_proxy/tutorial001_py310.py hl[6] *}
ÐÑокÑи бÑÐ´ÐµÑ Â«Ð¾Ð±ÑезаÑÑ» пÑеÑÐ¸ÐºÑ Ð¿ÑÑи на леÑÑ Ð¿ÐµÑед пеÑедаÑей запÑоÑа на ÑеÑÐ²ÐµÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (ÑкоÑее вÑего Uvicorn, запÑÑеннÑй ÑеÑез FastAPI CLI), поддеÑÐ¶Ð¸Ð²Ð°Ñ Ñ Ð²Ð°Ñего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð»Ð»ÑзиÑ, ÑÑо его обÑлÑживаÑÑ Ð¿Ð¾ `/app`, ÑÑÐ¾Ð±Ñ Ð²Ð°Ð¼ не пÑиÑлоÑÑ Ð¼ÐµÐ½ÑÑÑ Ð²ÐµÑÑ ÐºÐ¾Ð´ и добавлÑÑÑ Ð¿ÑеÑÐ¸ÐºÑ `/api/v1`.
@@ -193,7 +193,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
ÐдеÑÑ Ð¼Ñ Ð´Ð¾Ð±Ð°Ð²Ð»Ñем его в ÑообÑение лиÑÑ Ð´Ð»Ñ Ð´ÐµÐ¼Ð¾Ð½ÑÑÑаÑии.
-{* ../../docs_src/behind_a_proxy/tutorial001_py39.py hl[8] *}
+{* ../../docs_src/behind_a_proxy/tutorial001_py310.py hl[8] *}
ÐаÑем, еÑли Ð²Ñ Ð·Ð°Ð¿ÑÑÑиÑе Uvicorn Ñак:
@@ -220,7 +220,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
ÐÑли Ð½ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи пеÑедаÑÑ Ð¾Ð¿ÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки `--root-path` (или аналог), Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑказаÑÑ Ð¿Ð°ÑамеÑÑ `root_path` пÑи Ñоздании пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI:
-{* ../../docs_src/behind_a_proxy/tutorial002_py39.py hl[3] *}
+{* ../../docs_src/behind_a_proxy/tutorial002_py310.py hl[3] *}
ÐеÑедаÑа `root_path` в `FastAPI` ÑквиваленÑна опÑии командной ÑÑÑоки `--root-path` Ð´Ð»Ñ Uvicorn или Hypercorn.
@@ -241,17 +241,17 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
Uvicorn ожидаеÑ, ÑÑо пÑокÑи обÑаÑиÑÑÑ Ðº Ð½ÐµÐ¼Ñ Ð¿Ð¾ `http://127.0.0.1:8000/app`, а Ñже задаÑа пÑокÑи â добавиÑÑ ÑвеÑÑ
Ñ Ð¿ÑеÑÐ¸ÐºÑ `/api/v1`.
-## РпÑокÑи Ñ ÑÑезаннÑм пÑеÑикÑом пÑÑи { #about-proxies-with-a-stripped-path-prefix }
+## РпÑокÑи Ñ ÑÑнкÑией ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿ÑеÑикÑа пÑÑи { #about-proxies-with-a-stripped-path-prefix }
-ÐомниÑе, ÑÑо пÑокÑи Ñ ÑÑезаннÑм пÑеÑикÑом пÑÑи â лиÑÑ Ð¾Ð´Ð¸Ð½ из ваÑианÑов наÑÑÑойки.
+ÐомниÑе, ÑÑо пÑокÑи Ñ ÑÑнкÑией ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿ÑеÑикÑа пÑÑи â лиÑÑ Ð¾Ð´Ð¸Ð½ из ваÑианÑов наÑÑÑойки.
-Ðо многиÑ
ÑлÑÑаÑÑ
по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑокÑи бÑÐ´ÐµÑ Ð±ÐµÐ· ÑÑезанного пÑеÑикÑа пÑÑи.
+Ðо многиÑ
ÑлÑÑаÑÑ
по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑокÑи бÑÐ´ÐµÑ Ð±ÐµÐ· ÑÑнкÑии ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿ÑеÑикÑа пÑÑи.
-Ð Ñаком ÑлÑÑае (без ÑÑезанного пÑеÑикÑа) пÑокÑи ÑлÑÑаеÑ, напÑимеÑ, по адÑеÑÑ `https://myawesomeapp.com`, и еÑли бÑаÑÐ·ÐµÑ Ð¸Ð´ÑÑ Ð½Ð° `https://myawesomeapp.com/api/v1/app`, а Ð²Ð°Ñ ÑеÑÐ²ÐµÑ (напÑимеÑ, Uvicorn) ÑлÑÑÐ°ÐµÑ Ð½Ð° `http://127.0.0.1:8000`, Ñо пÑокÑи (без ÑÑезанного пÑеÑикÑа) обÑаÑиÑÑÑ Ðº Uvicorn по ÑÐ¾Ð¼Ñ Ð¶Ðµ пÑÑи: `http://127.0.0.1:8000/api/v1/app`.
+Ð Ñаком ÑлÑÑае (без ÑÑнкÑии ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿ÑеÑикÑа пÑÑи) пÑокÑи ÑлÑÑаеÑ, напÑимеÑ, по адÑеÑÑ `https://myawesomeapp.com`, и еÑли бÑаÑÐ·ÐµÑ Ð¸Ð´ÑÑ Ð½Ð° `https://myawesomeapp.com/api/v1/app`, а Ð²Ð°Ñ ÑеÑÐ²ÐµÑ (напÑимеÑ, Uvicorn) ÑлÑÑÐ°ÐµÑ Ð½Ð° `http://127.0.0.1:8000`, Ñо пÑокÑи (без ÑÑезанного пÑеÑикÑа) обÑаÑиÑÑÑ Ðº Uvicorn по ÑÐ¾Ð¼Ñ Ð¶Ðµ пÑÑи: `http://127.0.0.1:8000/api/v1/app`.
## ÐокалÑное ÑеÑÑиÑование Ñ Traefik { #testing-locally-with-traefik }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе легко поÑкÑпеÑименÑиÑоваÑÑ Ð»Ð¾ÐºÐ°Ð»Ñно Ñ ÑÑезаннÑм пÑеÑикÑом пÑÑи, иÑполÑзÑÑ Traefik.
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе легко поÑкÑпеÑименÑиÑоваÑÑ Ð»Ð¾ÐºÐ°Ð»Ñно Ñ ÑÑнкÑией ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¿ÑеÑикÑа пÑÑи, иÑполÑзÑÑ Traefik.
СкаÑайÑе Traefik â ÑÑо один бинаÑнÑй Ñайл; ÑаÑпакÑйÑе аÑÑ
ив и запÑÑÑиÑе его пÑÑмо из ÑеÑминала.
@@ -400,7 +400,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
ÐапÑимеÑ:
-{* ../../docs_src/behind_a_proxy/tutorial003_py39.py hl[4:7] *}
+{* ../../docs_src/behind_a_proxy/tutorial003_py310.py hl[4:7] *}
ÐÑÐ´ÐµÑ ÑгенеÑиÑована ÑÑ
ема OpenAPI пÑимеÑно ÑакаÑ:
@@ -455,7 +455,7 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
ÐÑли Ð²Ñ Ð½Ðµ Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ FastAPI добавлÑл авÑомаÑиÑеÑкий ÑеÑвеÑ, иÑполÑзÑÑ `root_path`, ÑкажиÑе паÑамеÑÑ `root_path_in_servers=False`:
-{* ../../docs_src/behind_a_proxy/tutorial004_py39.py hl[9] *}
+{* ../../docs_src/behind_a_proxy/tutorial004_py310.py hl[9] *}
и Ñогда ÑÑÐ¾Ñ ÑеÑÐ²ÐµÑ Ð½Ðµ бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½ в ÑÑ
ÐµÐ¼Ñ OpenAPI.
diff --git a/docs/ru/docs/advanced/custom-response.md b/docs/ru/docs/advanced/custom-response.md
index 49550b49ff..b9f91373da 100644
--- a/docs/ru/docs/advanced/custom-response.md
+++ b/docs/ru/docs/advanced/custom-response.md
@@ -30,7 +30,7 @@
Ðо еÑли Ð²Ñ ÑвеÑенÑ, ÑÑо ÑодеÑжимое, коÑоÑое Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе, **ÑеÑиализÑемо в JSON**, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пеÑедаÑÑ ÐµÐ³Ð¾ напÑÑмÑÑ Ð² клаÑÑ Ð¾ÑвеÑа и избежаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ
накладнÑÑ
ÑаÑÑ
одов, коÑоÑÑе FastAPI понÑÑ Ð±Ñ, пÑопÑÑÐºÐ°Ñ Ð²Ð¾Ð·Ð²ÑаÑаемое ÑодеÑжимое ÑеÑез `jsonable_encoder` пеÑед пеÑедаÑей в клаÑÑ Ð¾ÑвеÑа.
-{* ../../docs_src/custom_response/tutorial001b_py39.py hl[2,7] *}
+{* ../../docs_src/custom_response/tutorial001b_py310.py hl[2,7] *}
/// info | ÐнÑоÑмаÑиÑ
@@ -55,7 +55,7 @@
- ÐмпоÑÑиÑÑйÑе `HTMLResponse`.
- ÐеÑедайÑе `HTMLResponse` в паÑамеÑÑ `response_class` ваÑего декоÑаÑоÑа опеÑаÑии пÑÑи.
-{* ../../docs_src/custom_response/tutorial002_py39.py hl[2,7] *}
+{* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *}
/// info | ÐнÑоÑмаÑиÑ
@@ -73,17 +73,17 @@
Ð¢Ð¾Ñ Ð¶Ðµ пÑÐ¸Ð¼ÐµÑ ÑвеÑÑ
Ñ, возвÑаÑаÑÑий `HTMLResponse`, Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ñак:
-{* ../../docs_src/custom_response/tutorial003_py39.py hl[2,7,19] *}
+{* ../../docs_src/custom_response/tutorial003_py310.py hl[2,7,19] *}
/// warning | ÐÑедÑпÑеждение
-`Response`, возвÑаÑÑннÑй напÑÑмÑÑ Ð²Ð°Ñей ÑÑнкÑией-обÑабоÑÑиком пÑÑи, не бÑÐ´ÐµÑ Ð·Ð°Ð´Ð¾ÐºÑменÑиÑован в OpenAPI (напÑимеÑ, `Content-Type` нне бÑÐ´ÐµÑ Ð·Ð°Ð´Ð¾ÐºÑменÑиÑова) и не бÑÐ´ÐµÑ Ð²Ð¸Ð´ÐµÐ½ в авÑомаÑиÑеÑки ÑгенеÑиÑованной инÑеÑакÑивной докÑменÑаÑии.
+`Response`, возвÑаÑÑннÑй напÑÑмÑÑ Ð²Ð°Ñей ÑÑнкÑией-обÑабоÑÑиком пÑÑи, не бÑÐ´ÐµÑ Ð·Ð°Ð´Ð¾ÐºÑменÑиÑован в OpenAPI (напÑимеÑ, `Content-Type` не бÑÐ´ÐµÑ Ð·Ð°Ð´Ð¾ÐºÑменÑиÑован) и не бÑÐ´ÐµÑ Ð²Ð¸Ð´ÐµÐ½ в авÑомаÑиÑеÑки ÑгенеÑиÑованной инÑеÑакÑивной докÑменÑаÑии.
///
/// info | ÐнÑоÑмаÑиÑ
-РазÑмееÑÑÑ, ÑакÑиÑеÑкие заголовок `Content-Type`, ÑÑаÑÑÑ-код и Ñ.д. возÑмÑÑÑÑ Ð¸Ð· обÑекÑа `Response`, коÑоÑÑй Ð²Ñ Ð²ÐµÑнÑли.
+РазÑмееÑÑÑ, ÑакÑиÑеÑкий заголовок `Content-Type`, ÑÑаÑÑÑ-код и Ñ.д. возÑмÑÑÑÑ Ð¸Ð· обÑекÑа `Response`, коÑоÑÑй Ð²Ñ Ð²ÐµÑнÑли.
///
@@ -97,7 +97,7 @@
ÐапÑимеÑ, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑо-Ñо вÑоде:
-{* ../../docs_src/custom_response/tutorial004_py39.py hl[7,21,23] *}
+{* ../../docs_src/custom_response/tutorial004_py310.py hl[7,21,23] *}
Ð ÑÑом пÑимеÑе ÑÑнкÑÐ¸Ñ `generate_html_response()` Ñже генеÑиÑÑÐµÑ Ð¸ возвÑаÑÐ°ÐµÑ `Response` вмеÑÑо возвÑаÑа HTML в `str`.
@@ -136,7 +136,7 @@
FastAPI (ÑакÑиÑеÑки Starlette) авÑомаÑиÑеÑки Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Content-Length. Также бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½ заголовок Content-Type, оÑнованнÑй на `media_type` и Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ charset Ð´Ð»Ñ ÑекÑÑовÑÑ
Ñипов.
-{* ../../docs_src/response_directly/tutorial002_py39.py hl[1,18] *}
+{* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *}
### `HTMLResponse` { #htmlresponse }
@@ -146,7 +146,7 @@ FastAPI (ÑакÑиÑеÑки Starlette) авÑомаÑиÑеÑки добави
ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑекÑÑ Ð¸Ð»Ð¸ байÑÑ Ð¸ возвÑаÑÐ°ÐµÑ Ð¾ÑÐ²ÐµÑ Ð² виде пÑоÑÑого ÑекÑÑа.
-{* ../../docs_src/custom_response/tutorial005_py39.py hl[2,7,9] *}
+{* ../../docs_src/custom_response/tutorial005_py310.py hl[2,7,9] *}
### `JSONResponse` { #jsonresponse }
@@ -180,7 +180,7 @@ FastAPI (ÑакÑиÑеÑки Starlette) авÑомаÑиÑеÑки добави
///
-{* ../../docs_src/custom_response/tutorial001_py39.py hl[2,7] *}
+{* ../../docs_src/custom_response/tutorial001_py310.py hl[2,7] *}
/// tip | СовеÑ
@@ -194,13 +194,13 @@ FastAPI (ÑакÑиÑеÑки Starlette) авÑомаÑиÑеÑки добави
ÐÑ Ð¼Ð¾Ð¶ÐµÑе веÑнÑÑÑ `RedirectResponse` напÑÑмÑÑ:
-{* ../../docs_src/custom_response/tutorial006_py39.py hl[2,9] *}
+{* ../../docs_src/custom_response/tutorial006_py310.py hl[2,9] *}
---
Ðли можно иÑполÑзоваÑÑ ÐµÐ³Ð¾ в паÑамеÑÑе `response_class`:
-{* ../../docs_src/custom_response/tutorial006b_py39.py hl[2,7,9] *}
+{* ../../docs_src/custom_response/tutorial006b_py310.py hl[2,7,9] *}
ÐÑли Ð²Ñ ÑделаеÑе Ñак, Ñо ÑможеÑе возвÑаÑаÑÑ URL напÑÑмÑÑ Ð¸Ð· Ñвоей ÑÑнкÑии-обÑабоÑÑика пÑÑи.
@@ -210,13 +210,13 @@ FastAPI (ÑакÑиÑеÑки Starlette) авÑомаÑиÑеÑки добави
Также Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¿Ð°ÑамеÑÑ `status_code` в ÑоÑеÑании Ñ Ð¿Ð°ÑамеÑÑом `response_class`:
-{* ../../docs_src/custom_response/tutorial006c_py39.py hl[2,7,9] *}
+{* ../../docs_src/custom_response/tutorial006c_py310.py hl[2,7,9] *}
### `StreamingResponse` { #streamingresponse }
ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð°ÑинÑ
ÑоннÑй генеÑаÑÐ¾Ñ Ð¸Ð»Ð¸ обÑÑнÑй генеÑаÑоÑ/иÑеÑаÑÐ¾Ñ Ð¸ оÑпÑавлÑÐµÑ Ñело оÑвеÑа поÑоково.
-{* ../../docs_src/custom_response/tutorial007_py39.py hl[2,14] *}
+{* ../../docs_src/custom_response/tutorial007_py310.py hl[2,14] *}
#### ÐÑполÑзование `StreamingResponse` Ñ ÑайлоподобнÑми обÑекÑами { #using-streamingresponse-with-file-like-objects }
@@ -226,7 +226,7 @@ FastAPI (ÑакÑиÑеÑки Starlette) авÑомаÑиÑеÑки добави
ÐÑо вклÑÑÐ°ÐµÑ Ð¼Ð½Ð¾Ð³Ð¸Ðµ библиоÑеки Ð´Ð»Ñ ÑабоÑÑ Ñ Ð¾Ð±Ð»Ð°ÑнÑм Ñ
ÑанилиÑем, обÑабоÑки видео и Ñ.д.
-{* ../../docs_src/custom_response/tutorial008_py39.py hl[2,10:12,14] *}
+{* ../../docs_src/custom_response/tutorial008_py310.py hl[2,10:12,14] *}
1. ÐÑо ÑÑнкÑиÑ-генеÑаÑоÑ. Ðна ÑвлÑеÑÑÑ Â«ÑÑнкÑией-генеÑаÑоÑом», поÑÐ¾Ð¼Ñ ÑÑо ÑодеÑÐ¶Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑ(Ñ) `yield` внÑÑÑи.
2. ÐÑполÑзÑÑ Ð±Ð»Ð¾Ðº `with`, Ð¼Ñ Ð³Ð°ÑанÑиÑÑем, ÑÑо ÑайлоподобнÑй обÑÐµÐºÑ Ð±ÑÐ´ÐµÑ Ð·Ð°ÐºÑÑÑ Ð¿Ð¾Ñле завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ ÑÑнкÑии-генеÑаÑоÑа. То еÑÑÑ Ð¿Ð¾Ñле Ñого, как она законÑÐ¸Ñ Ð¾ÑпÑÐ°Ð²ÐºÑ Ð¾ÑвеÑа.
@@ -255,11 +255,11 @@ FastAPI (ÑакÑиÑеÑки Starlette) авÑомаÑиÑеÑки добави
ФайловÑе оÑвеÑÑ Ð±ÑдÑÑ ÑодеÑжаÑÑ ÑооÑвеÑÑÑвÑÑÑие заголовки `Content-Length`, `Last-Modified` и `ETag`.
-{* ../../docs_src/custom_response/tutorial009_py39.py hl[2,10] *}
+{* ../../docs_src/custom_response/tutorial009_py310.py hl[2,10] *}
ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ Ð¿Ð°ÑамеÑÑ `response_class`:
-{* ../../docs_src/custom_response/tutorial009b_py39.py hl[2,8,10] *}
+{* ../../docs_src/custom_response/tutorial009b_py310.py hl[2,8,10] *}
Ð ÑÑом ÑлÑÑае Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе возвÑаÑаÑÑ Ð¿ÑÑÑ Ðº ÑÐ°Ð¹Ð»Ñ Ð½Ð°Ð¿ÑÑмÑÑ Ð¸Ð· Ñвоей ÑÑнкÑии-обÑабоÑÑика пÑÑи.
@@ -273,7 +273,7 @@ FastAPI (ÑакÑиÑеÑки Starlette) авÑомаÑиÑеÑки добави
ÐÑ Ð¼Ð¾Ð³Ð»Ð¸ Ð±Ñ ÑоздаÑÑ `CustomORJSONResponse`. Ðлавное, ÑÑо вам нÑжно ÑделаÑÑ â ÑеализоваÑÑ Ð¼ÐµÑод `Response.render(content)`, коÑоÑÑй возвÑаÑÐ°ÐµÑ ÑодеÑжимое как `bytes`:
-{* ../../docs_src/custom_response/tutorial009c_py39.py hl[9:14,17] *}
+{* ../../docs_src/custom_response/tutorial009c_py310.py hl[9:14,17] *}
ТепеÑÑ Ð²Ð¼ÐµÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ:
@@ -299,7 +299,7 @@ FastAPI (ÑакÑиÑеÑки Starlette) авÑомаÑиÑеÑки добави
РпÑимеÑе ниже **FastAPI** бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ `ORJSONResponse` по ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ð¾ вÑеÑ
опеÑаÑиÑÑ
пÑÑи вмеÑÑо `JSONResponse`.
-{* ../../docs_src/custom_response/tutorial010_py39.py hl[2,4] *}
+{* ../../docs_src/custom_response/tutorial010_py310.py hl[2,4] *}
/// tip | СовеÑ
diff --git a/docs/ru/docs/advanced/dataclasses.md b/docs/ru/docs/advanced/dataclasses.md
index b3ced37c1e..87a5763c10 100644
--- a/docs/ru/docs/advanced/dataclasses.md
+++ b/docs/ru/docs/advanced/dataclasses.md
@@ -64,7 +64,7 @@ FastAPI поÑÑÑоен повеÑÑ
**Pydantic**, и Ñ Ð¿Ð¾ÐºÐ°Ð·Ñвал в
6. ÐдеÑÑ Ð¼Ñ Ð²Ð¾Ð·Ð²ÑаÑаем ÑловаÑÑ, ÑодеÑжаÑий `items`, коÑоÑÑй ÑвлÑеÑÑÑ ÑпиÑком dataclass.
- FastAPI по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ ÑпоÑобен ÑеÑиализоваÑÑ Ð´Ð°Ð½Ð½Ñе в JSON.
+ FastAPI по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ ÑпоÑобен ÑеÑиализоваÑÑ Ð´Ð°Ð½Ð½Ñе в JSON.
7. ÐдеÑÑ `response_model` иÑполÑзÑÐµÑ Ð°Ð½Ð½Ð¾ÑаÑÐ¸Ñ Ñипа â ÑпиÑок dataclass `Author`.
diff --git a/docs/ru/docs/advanced/events.md b/docs/ru/docs/advanced/events.md
index db73d9094e..bcb5b000a4 100644
--- a/docs/ru/docs/advanced/events.md
+++ b/docs/ru/docs/advanced/events.md
@@ -30,7 +30,7 @@
ÐÑ ÑоздаÑм аÑинÑ
ÑоннÑÑ ÑÑнкÑÐ¸Ñ `lifespan()` Ñ `yield` пÑимеÑно Ñак:
-{* ../../docs_src/events/tutorial003_py39.py hl[16,19] *}
+{* ../../docs_src/events/tutorial003_py310.py hl[16,19] *}
ÐдеÑÑ Ð¼Ñ ÑимÑлиÑÑем доÑогÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ startup по загÑÑзке модели, помеÑÐ°Ñ (ÑикÑивнÑÑ) ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð´ÐµÐ»Ð¸ в ÑловаÑÑ Ñ Ð¼Ð¾Ð´ÐµÐ»Ñми ÐаÑинного обÑÑÐµÐ½Ð¸Ñ Ð´Ð¾ `yield`. ÐÑÐ¾Ñ ÐºÐ¾Ð´ бÑÐ´ÐµÑ Ð²Ñполнен до Ñого, как пÑиложение наÑÐ½ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð°Ð¿ÑоÑÑ, во вÑÐµÐ¼Ñ startup.
@@ -48,7 +48,7 @@
ÐеÑвое, на ÑÑо ÑÑÐ¾Ð¸Ñ Ð¾Ð±ÑаÑиÑÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ, â Ð¼Ñ Ð¾Ð¿ÑеделÑем аÑинÑ
ÑоннÑÑ ÑÑнкÑÐ¸Ñ Ñ `yield`. ÐÑо оÑÐµÐ½Ñ Ð¿Ð¾Ñ
оже на ÐавиÑимоÑÑи Ñ `yield`.
-{* ../../docs_src/events/tutorial003_py39.py hl[14:19] *}
+{* ../../docs_src/events/tutorial003_py310.py hl[14:19] *}
ÐеÑÐ²Ð°Ñ ÑаÑÑÑ ÑÑнкÑии, до `yield`, бÑÐ´ÐµÑ Ð²Ñполнена до запÑÑка пÑиложениÑ.
@@ -60,7 +60,7 @@
ÐÑо пÑевÑаÑÐ°ÐµÑ ÑÑнкÑÐ¸Ñ Ð² «аÑинÑ
ÑоннÑй Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа».
-{* ../../docs_src/events/tutorial003_py39.py hl[1,13] *}
+{* ../../docs_src/events/tutorial003_py310.py hl[1,13] *}
ÐÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа в Python â ÑÑо Ñо, ÑÑо можно иÑполÑзоваÑÑ Ð² опеÑаÑоÑе `with`. ÐапÑимеÑ, `open()` можно иÑполÑзоваÑÑ ÐºÐ°Ðº Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа:
@@ -82,7 +82,7 @@ async with lifespan(app):
ÐаÑамеÑÑ `lifespan` пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ `FastAPI` пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð°ÑинÑ
ÑоннÑй Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа, поÑÑÐ¾Ð¼Ñ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ пеÑедаÑÑ ÐµÐ¼Ñ Ð½Ð°Ñ Ð½Ð¾Ð²Ñй аÑинÑ
ÑоннÑй Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ ÐºÐ¾Ð½ÑекÑÑа `lifespan`.
-{* ../../docs_src/events/tutorial003_py39.py hl[22] *}
+{* ../../docs_src/events/tutorial003_py310.py hl[22] *}
## ÐлÑÑеÑнаÑивнÑе ÑобÑÑÐ¸Ñ (ÑÑÑаÑевÑие) { #alternative-events-deprecated }
@@ -104,7 +104,7 @@ async with lifespan(app):
ЧÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑÑнкÑиÑ, коÑоÑÑÑ Ð½Ñжно запÑÑÑиÑÑ Ð´Ð¾ ÑÑаÑÑа пÑиложениÑ, обÑÑвиÑе ÐµÑ ÐºÐ°Ðº обÑабоÑÑик ÑобÑÑÐ¸Ñ `"startup"`:
-{* ../../docs_src/events/tutorial001_py39.py hl[8] *}
+{* ../../docs_src/events/tutorial001_py310.py hl[8] *}
Ð ÑÑом ÑлÑÑае ÑÑнкÑиÑ-обÑабоÑÑик ÑобÑÑÐ¸Ñ `startup` иниÑиализиÑÑÐµÑ Â«Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
» items (ÑÑо пÑоÑÑо `dict`) некоÑоÑÑми знаÑениÑми.
@@ -116,7 +116,7 @@ async with lifespan(app):
ЧÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑÑнкÑиÑ, коÑоÑÑÑ Ð½Ñжно запÑÑÑиÑÑ Ð¿Ñи завеÑÑении ÑабоÑÑ Ð¿ÑиложениÑ, обÑÑвиÑе ÐµÑ ÐºÐ°Ðº обÑабоÑÑик ÑобÑÑÐ¸Ñ `"shutdown"`:
-{* ../../docs_src/events/tutorial002_py39.py hl[6] *}
+{* ../../docs_src/events/tutorial002_py310.py hl[6] *}
ÐдеÑÑ ÑÑнкÑиÑ-обÑабоÑÑик ÑобÑÑÐ¸Ñ `shutdown` запиÑÐµÑ ÑÑÑÐ¾ÐºÑ ÑекÑÑа `"Application shutdown"` в Ñайл `log.txt`.
diff --git a/docs/ru/docs/advanced/generate-clients.md b/docs/ru/docs/advanced/generate-clients.md
index 00bdd31fe8..4eb098a88f 100644
--- a/docs/ru/docs/advanced/generate-clients.md
+++ b/docs/ru/docs/advanced/generate-clients.md
@@ -2,7 +2,7 @@
ÐоÑколÑÐºÑ **FastAPI** оÑнован на ÑпеÑиÑикаÑии **OpenAPI**, его API можно опиÑаÑÑ Ð² ÑÑандаÑÑном ÑоÑмаÑе, понÑÑном множеÑÑÐ²Ñ Ð¸Ð½ÑÑÑÑменÑов.
-ÐÑо ÑпÑоÑÐ°ÐµÑ Ð³ÐµÐ½ÐµÑаÑÐ¸Ñ Ð°ÐºÑÑалÑной **докÑменÑаÑии**, клиенÑÑкиÑ
библиоÑек (**SDKs**) на ÑазнÑÑ
ÑзÑкаÑ
, а Ñакже **ÑеÑÑиÑованиÑ** или **воÑкÑÐ»Ð¾Ñ Ð°Ð²ÑомаÑизаÑии**, коÑоÑÑе оÑÑаÑÑÑÑ ÑинÑ
ÑонизиÑованнÑми Ñ Ð²Ð°Ñим кодом.
+ÐÑо ÑпÑоÑÐ°ÐµÑ Ð³ÐµÐ½ÐµÑаÑÐ¸Ñ Ð°ÐºÑÑалÑной **докÑменÑаÑии**, клиенÑÑкиÑ
библиоÑек (**SDKs**) на ÑазнÑÑ
ÑзÑкаÑ
, а Ñакже **ÑеÑÑиÑованиÑ** или **воÑкÑÐ»Ð¾Ñ Ð°Ð²ÑомаÑизаÑии**, коÑоÑÑе оÑÑаÑÑÑÑ ÑинÑ
ÑонизиÑованнÑми Ñ Ð²Ð°Ñим кодом.
Ð ÑÑом ÑÑководÑÑве Ð²Ñ ÑзнаеÑе, как ÑгенеÑиÑоваÑÑ **TypeScript SDK** Ð´Ð»Ñ Ð²Ð°Ñего бÑкенда на FastAPI.
@@ -40,7 +40,7 @@ FastAPI авÑомаÑиÑеÑки генеÑиÑÑÐµÑ ÑпеÑиÑикаÑии
ÐаÑнÑм Ñ Ð¿ÑоÑÑого пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI:
-{* ../../docs_src/generate_clients/tutorial001_py39.py hl[7:9,12:13,16:17,21] *}
+{* ../../docs_src/generate_clients/tutorial001_py310.py hl[7:9,12:13,16:17,21] *}
ÐбÑаÑиÑе внимание, ÑÑо *опеÑаÑии пÑÑи (обÑабоÑÑики пÑÑи)* опÑеделÑÑÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸, коÑоÑÑе они иÑполÑзÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾Ð¹ нагÑÑзки запÑоÑа и полезной нагÑÑзки оÑвеÑа, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼Ð¾Ð´ÐµÐ»ÐµÐ¹ `Item` и `ResponseMessage`.
@@ -98,7 +98,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client
ÐапÑимеÑ, Ñ Ð²Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñаздел Ð´Ð»Ñ **items** и дÑÑгой Ñаздел Ð´Ð»Ñ **users**, и они могÑÑ Ð±ÑÑÑ ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ñ Ñегами:
-{* ../../docs_src/generate_clients/tutorial002_py39.py hl[21,26,34] *}
+{* ../../docs_src/generate_clients/tutorial002_py310.py hl[21,26,34] *}
### ÐенеÑаÑÐ¸Ñ TypeScriptâклиенÑа Ñ Ñегами { #generate-a-typescript-client-with-tags }
@@ -145,7 +145,7 @@ FastAPI иÑполÑзÑÐµÑ **ÑникалÑнÑй ID** Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ *о
ÐаÑем Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пеÑедаÑÑ ÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкÑÑ ÑÑнкÑÐ¸Ñ Ð² **FastAPI** ÑеÑез паÑамеÑÑ `generate_unique_id_function`:
-{* ../../docs_src/generate_clients/tutorial003_py39.py hl[6:7,10] *}
+{* ../../docs_src/generate_clients/tutorial003_py310.py hl[6:7,10] *}
### ÐенеÑаÑÐ¸Ñ TypeScriptâклиенÑа Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкими ID опеÑаÑий { #generate-a-typescript-client-with-custom-operation-ids }
@@ -157,7 +157,7 @@ FastAPI иÑполÑзÑÐµÑ **ÑникалÑнÑй ID** Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ *о
### ÐÑедобÑабоÑка ÑпеÑиÑикаÑии OpenAPI Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑоÑа клиенÑа { #preprocess-the-openapi-specification-for-the-client-generator }
-СгенеÑиÑованном коде вÑÑ ÐµÑÑ ÐµÑÑÑ **дÑблиÑÑÑÑаÑÑÑ Ð¸Ð½ÑоÑмаÑиÑ**.
+Ð ÑгенеÑиÑованном коде вÑÑ ÐµÑÑ ÐµÑÑÑ **дÑблиÑÑÑÑаÑÑÑ Ð¸Ð½ÑоÑмаÑиÑ**.
ÐÑ Ñже знаем, ÑÑо ÑÑÐ¾Ñ Ð¼ÐµÑод оÑноÑиÑÑÑ Ðº **items**, поÑÐ¾Ð¼Ñ ÑÑо ÑÑо Ñлово еÑÑÑ Ð² `ItemsService` (взÑÑо из Ñега), но пÑи ÑÑом Ð¸Ð¼Ñ Ñега вÑÑ ÐµÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¾ пÑеÑикÑом к имени меÑода. ð
@@ -167,7 +167,7 @@ FastAPI иÑполÑзÑÐµÑ **ÑникалÑнÑй ID** Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ *о
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ ÑкаÑаÑÑ OpenAPI JSON в Ñайл `openapi.json`, а заÑем **ÑбÑаÑÑ ÑÑÐ¾Ñ Ð¿ÑеÑикÑâÑег** Ñаким ÑкÑипÑом:
-{* ../../docs_src/generate_clients/tutorial004_py39.py *}
+{* ../../docs_src/generate_clients/tutorial004_py310.py *}
//// tab | Node.js
diff --git a/docs/ru/docs/advanced/middleware.md b/docs/ru/docs/advanced/middleware.md
index 5ebe010782..034feae7eb 100644
--- a/docs/ru/docs/advanced/middleware.md
+++ b/docs/ru/docs/advanced/middleware.md
@@ -57,13 +57,13 @@ app.add_middleware(UnicornMiddleware, some_config="rainbow")
ÐÑбой вÑ
одÑÑий запÑÐ¾Ñ Ð¿Ð¾ `http` или `ws` бÑÐ´ÐµÑ Ð¿ÐµÑенапÑавлен на безопаÑнÑÑ ÑÑ
емÑ.
-{* ../../docs_src/advanced_middleware/tutorial001_py39.py hl[2,6] *}
+{* ../../docs_src/advanced_middleware/tutorial001_py310.py hl[2,6] *}
## `TrustedHostMiddleware` { #trustedhostmiddleware }
ÐаÑанÑиÑÑеÑ, ÑÑо во вÑеÑ
вÑ
одÑÑиÑ
запÑоÑаÑ
коÑÑекÑно ÑÑÑановлен `Host`âзаголовок, ÑÑÐ¾Ð±Ñ Ð·Ð°ÑиÑиÑÑÑÑ Ð¾Ñ Ð°Ñак на HTTPâзаголовок Host.
-{* ../../docs_src/advanced_middleware/tutorial002_py39.py hl[2,6:8] *}
+{* ../../docs_src/advanced_middleware/tutorial002_py310.py hl[2,6:8] *}
ÐоддеÑживаÑÑÑÑ ÑледÑÑÑие аÑгÑменÑÑ:
@@ -78,7 +78,7 @@ app.add_middleware(UnicornMiddleware, some_config="rainbow")
ÐÑо middleware обÑабаÑÑÐ²Ð°ÐµÑ ÐºÐ°Ðº обÑÑнÑе, Ñак и поÑоковÑе оÑвеÑÑ.
-{* ../../docs_src/advanced_middleware/tutorial003_py39.py hl[2,6] *}
+{* ../../docs_src/advanced_middleware/tutorial003_py310.py hl[2,6] *}
ÐоддеÑживаÑÑÑÑ ÑледÑÑÑие аÑгÑменÑÑ:
diff --git a/docs/ru/docs/advanced/openapi-webhooks.md b/docs/ru/docs/advanced/openapi-webhooks.md
index 3a2b9fff74..b477075c11 100644
--- a/docs/ru/docs/advanced/openapi-webhooks.md
+++ b/docs/ru/docs/advanced/openapi-webhooks.md
@@ -16,9 +16,9 @@
ÐÑÑ Ð»Ð¾Ð³Ð¸ÐºÐ° ÑегиÑÑÑаÑии URL-адÑеÑов Ð´Ð»Ñ Ð²ÐµÐ±Ñ
Ñков и код, коÑоÑÑй ÑеалÑно оÑпÑавлÑÐµÑ ÑÑи запÑоÑÑ, Ñеликом на ваÑей ÑÑоÑоне. ÐÑ Ð¿Ð¸ÑеÑе ÑÑо Ñак, как вам нÑжно, в Ñвоем ÑобÑÑвенном коде.
-## ÐокÑменÑиÑование вебÑ
Ñков Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ FastAPI и OpenAPI { #documenting-webhooks-with-fastapi-and-openapi }
+## ÐокÑменÑиÑование вебÑ
Ñков Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ **FastAPI** и OpenAPI { #documenting-webhooks-with-fastapi-and-openapi }
-С FastAPI, иÑполÑзÑÑ OpenAPI, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ Ð¸Ð¼ÐµÐ½Ð° ÑÑиÑ
вебÑ
Ñков, ÑÐ¸Ð¿Ñ HTTP-опеÑаÑий, коÑоÑÑе ваÑе пÑиложение Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑпÑавлÑÑÑ (напÑимеÑ, `POST`, `PUT` и Ñ.д.), а Ñакже Ñела запÑоÑов, коÑоÑÑе ваÑе пÑиложение бÑÐ´ÐµÑ Ð¾ÑпÑавлÑÑÑ.
+С **FastAPI**, иÑполÑзÑÑ OpenAPI, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ Ð¸Ð¼ÐµÐ½Ð° ÑÑиÑ
вебÑ
Ñков, ÑÐ¸Ð¿Ñ HTTP-опеÑаÑий, коÑоÑÑе ваÑе пÑиложение Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑпÑавлÑÑÑ (напÑимеÑ, `POST`, `PUT` и Ñ.д.), а Ñакже Ñела запÑоÑов, коÑоÑÑе ваÑе пÑиложение бÑÐ´ÐµÑ Ð¾ÑпÑавлÑÑÑ.
ÐÑо знаÑиÑелÑно ÑпÑоÑÑÐ¸Ñ Ð²Ð°Ñим полÑзоваÑелÑм ÑеализаÑÐ¸Ñ Ð¸Ñ
API Ð´Ð»Ñ Ð¿Ñиема ваÑиÑ
вебÑ
Ñк-запÑоÑов; возможно, они даже ÑмогÑÑ Ð°Ð²ÑомаÑиÑеÑки ÑгенеÑиÑоваÑÑ ÑаÑÑÑ ÐºÐ¾Ð´Ð° Ñвоего API.
@@ -32,7 +32,7 @@
ÐÑи Ñоздании пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° **FastAPI** еÑÑÑ Ð°ÑÑибÑÑ `webhooks`, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾ÑоÑого можно обÑÑвлÑÑÑ Ð²ÐµÐ±Ñ
Ñки Ñак же, как Ð²Ñ Ð¾Ð±ÑÑвлÑеÑе опеÑаÑии пÑÑи (обÑабоÑÑики пÑÑи), напÑÐ¸Ð¼ÐµÑ Ñ `@app.webhooks.post()`.
-{* ../../docs_src/openapi_webhooks/tutorial001_py39.py hl[9:13,36:53] *}
+{* ../../docs_src/openapi_webhooks/tutorial001_py310.py hl[9:12,15:20] *}
ÐпÑеделеннÑе вами вебÑ
Ñки попадÑÑ Ð² ÑÑ
ÐµÐ¼Ñ **OpenAPI** и в авÑомаÑиÑеÑкий **инÑеÑÑÐµÐ¹Ñ Ð´Ð¾ÐºÑменÑаÑии**.
diff --git a/docs/ru/docs/advanced/path-operation-advanced-configuration.md b/docs/ru/docs/advanced/path-operation-advanced-configuration.md
index 86d3a5b630..b8c879bf6f 100644
--- a/docs/ru/docs/advanced/path-operation-advanced-configuration.md
+++ b/docs/ru/docs/advanced/path-operation-advanced-configuration.md
@@ -12,7 +12,7 @@
ÐÑжно ÑбедиÑÑÑÑ, ÑÑо он Ñникален Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ опеÑаÑии.
-{* ../../docs_src/path_operation_advanced_configuration/tutorial001_py39.py hl[6] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial001_py310.py hl[6] *}
### ÐÑполÑзование имени *ÑÑнкÑии-обÑабоÑÑика пÑÑи* как operationId { #using-the-path-operation-function-name-as-the-operationid }
@@ -20,7 +20,7 @@
ÐелаÑÑ ÑÑо ÑледÑÐµÑ Ð¿Ð¾Ñле Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÑеÑ
*опеÑаÑий пÑÑи*.
-{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py39.py hl[2, 12:21, 24] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2, 12:21, 24] *}
/// tip | СовеÑ
@@ -40,7 +40,7 @@
ЧÑÐ¾Ð±Ñ Ð¸ÑклÑÑиÑÑ *опеÑаÑÐ¸Ñ Ð¿ÑÑи* из генеÑиÑÑемой ÑÑ
ÐµÐ¼Ñ OpenAPI (а знаÑиÑ, и из авÑомаÑиÑеÑкиÑ
ÑиÑÑем докÑменÑаÑии), иÑполÑзÑйÑе паÑамеÑÑ `include_in_schema` и ÑÑÑановиÑе его в `False`:
-{* ../../docs_src/path_operation_advanced_configuration/tutorial003_py39.py hl[6] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial003_py310.py hl[6] *}
## РаÑÑиÑенное опиÑание из docstring { #advanced-description-from-docstring }
@@ -92,7 +92,7 @@
`openapi_extra` Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑигодиÑÑÑÑ, напÑимеÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÑвиÑÑ [РаÑÑиÑÐµÐ½Ð¸Ñ OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#specificationExtensions):
-{* ../../docs_src/path_operation_advanced_configuration/tutorial005_py39.py hl[6] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial005_py310.py hl[6] *}
ÐÑли Ð²Ñ Ð¾ÑкÑоеÑе авÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API, ваÑе ÑаÑÑиÑение поÑвиÑÑÑ Ð²Ð½Ð¸Ð·Ñ ÑÑÑаниÑÑ ÐºÐ¾Ð½ÐºÑеÑной *опеÑаÑии пÑÑи*.
@@ -139,9 +139,9 @@
ÐÑо можно ÑделаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `openapi_extra`:
-{* ../../docs_src/path_operation_advanced_configuration/tutorial006_py39.py hl[19:36, 39:40] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial006_py310.py hl[19:36, 39:40] *}
-Ð ÑÑом пÑимеÑе Ð¼Ñ Ð½Ðµ обÑÑвлÑли никакÑÑ Pydantic-моделÑ. ФакÑиÑеÑки Ñело запÑоÑа даже не ÑаÑпаÑÑено как JSON, оно ÑиÑаеÑÑÑ Ð½Ð°Ð¿ÑÑмÑÑ ÐºÐ°Ðº `bytes`, а ÑÑнкÑÐ¸Ñ `magic_data_reader()` бÑÐ´ÐµÑ Ð¾ÑвеÑаÑÑ Ð·Ð° его паÑÑинг каким-Ñо ÑпоÑобом.
+Ð ÑÑом пÑимеÑе Ð¼Ñ Ð½Ðµ обÑÑвлÑли никакÑÑ Pydantic-моделÑ. ФакÑиÑеÑки Ñело запÑоÑа даже не ÑаÑпаÑÑено как JSON, оно ÑиÑаеÑÑÑ Ð½Ð°Ð¿ÑÑмÑÑ ÐºÐ°Ðº `bytes`, а ÑÑнкÑÐ¸Ñ `magic_data_reader()` бÑÐ´ÐµÑ Ð¾ÑвеÑаÑÑ Ð·Ð° его паÑÑинг каким-Ñо ÑпоÑобом.
Тем не менее, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ обÑÑвиÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼ÑÑ ÑÑ
ÐµÐ¼Ñ Ð´Ð»Ñ Ñела запÑоÑа.
@@ -153,7 +153,7 @@
ÐапÑимеÑ, в ÑÑом пÑиложении Ð¼Ñ Ð½Ðµ иÑполÑзÑем вÑÑÑоеннÑÑ ÑÑнкÑионалÑноÑÑÑ FastAPI Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ JSON Schema из моделей Pydantic, Ñавно как и авÑомаÑиÑеÑкÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ JSON. ÐÑ Ð¾Ð±ÑÑвлÑем Ñип ÑодеÑжимого HTTP-запÑоÑа как YAML, а не JSON:
-{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py39.py hl[15:20, 22] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py310.py hl[15:20, 22] *}
Тем не менее, Ñ
оÑÑ Ð¼Ñ Ð½Ðµ иÑполÑзÑем вÑÑÑоеннÑÑ ÑÑнкÑионалÑноÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ, Ð¼Ñ Ð²ÑÑ Ñавно иÑполÑзÑем Pydantic-моделÑ, ÑÑÐ¾Ð±Ñ Ð²ÑÑÑнÑÑ ÑгенеÑиÑоваÑÑ JSON Schema Ð´Ð»Ñ Ð´Ð°Ð½Ð½ÑÑ
, коÑоÑÑе Ð¼Ñ Ñ
оÑим полÑÑиÑÑ Ð² YAML.
@@ -161,7 +161,7 @@
РзаÑем в наÑем коде Ð¼Ñ Ð½Ð°Ð¿ÑÑмÑÑ Ð¿Ð°ÑÑим ÑÑо ÑодеÑжимое YAML и Ñнова иÑполÑзÑем ÑÑ Ð¶Ðµ Pydantic-моделÑ, ÑÑÐ¾Ð±Ñ Ð²Ð°Ð»Ð¸Ð´Ð¸ÑоваÑÑ YAML-ÑодеÑжимое:
-{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py39.py hl[24:31] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py310.py hl[24:31] *}
/// tip | СовеÑ
diff --git a/docs/ru/docs/advanced/response-change-status-code.md b/docs/ru/docs/advanced/response-change-status-code.md
index 85d9050ffc..273862bae9 100644
--- a/docs/ru/docs/advanced/response-change-status-code.md
+++ b/docs/ru/docs/advanced/response-change-status-code.md
@@ -20,7 +20,7 @@
РзаÑем Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑÑановиÑÑ `status_code` в ÑÑом *вÑеменном* обÑекÑе оÑвеÑа.
-{* ../../docs_src/response_change_status_code/tutorial001_py39.py hl[1,9,12] *}
+{* ../../docs_src/response_change_status_code/tutorial001_py310.py hl[1,9,12] *}
ÐоÑле ÑÑого Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе веÑнÑÑÑ Ð»Ñбой обÑекÑ, коÑоÑÑй вам нÑжен, как обÑÑно (`dict`, Ð¼Ð¾Ð´ÐµÐ»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
и Ñ.д.).
diff --git a/docs/ru/docs/advanced/response-cookies.md b/docs/ru/docs/advanced/response-cookies.md
index 2872d6c0ad..d3662ef8ed 100644
--- a/docs/ru/docs/advanced/response-cookies.md
+++ b/docs/ru/docs/advanced/response-cookies.md
@@ -6,7 +6,7 @@
ÐаÑем ÑÑÑановиÑÑ cookies в ÑÑом вÑеменном обÑекÑе оÑвеÑа.
-{* ../../docs_src/response_cookies/tutorial002_py39.py hl[1, 8:9] *}
+{* ../../docs_src/response_cookies/tutorial002_py310.py hl[1, 8:9] *}
ÐоÑле ÑÑого можно веÑнÑÑÑ Ð»Ñбой обÑекÑ, как и ÑанÑÑе (напÑимеÑ, `dict`, обÑÐµÐºÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
и Ñак далее).
@@ -24,7 +24,7 @@
ÐаÑем ÑÑÑановиÑе cookies и веÑниÑе ÑÑÐ¾Ñ Ð¾Ð±ÑекÑ:
-{* ../../docs_src/response_cookies/tutorial001_py39.py hl[10:12] *}
+{* ../../docs_src/response_cookies/tutorial001_py310.py hl[10:12] *}
/// tip | СовеÑ
diff --git a/docs/ru/docs/advanced/response-directly.md b/docs/ru/docs/advanced/response-directly.md
index b452810714..60facdd857 100644
--- a/docs/ru/docs/advanced/response-directly.md
+++ b/docs/ru/docs/advanced/response-directly.md
@@ -54,7 +54,7 @@
ÐÑ Ð¼Ð¾Ð¶ÐµÑе помеÑÑиÑÑ Ð²Ð°Ñ XML-конÑÐµÐ½Ñ Ð² ÑÑÑокÑ, помеÑÑиÑÑ ÐµÑ Ð² `Response` и веÑнÑÑÑ:
-{* ../../docs_src/response_directly/tutorial002_py39.py hl[1,18] *}
+{* ../../docs_src/response_directly/tutorial002_py310.py hl[1,18] *}
## ÐÑимеÑÐ°Ð½Ð¸Ñ { #notes }
diff --git a/docs/ru/docs/advanced/response-headers.md b/docs/ru/docs/advanced/response-headers.md
index 8f24f05b07..dc821983bc 100644
--- a/docs/ru/docs/advanced/response-headers.md
+++ b/docs/ru/docs/advanced/response-headers.md
@@ -6,7 +6,7 @@
РзаÑем Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑÑанавливаÑÑ HTTP-заголовки в ÑÑом *вÑеменном* обÑекÑе оÑвеÑа.
-{* ../../docs_src/response_headers/tutorial002_py39.py hl[1, 7:8] *}
+{* ../../docs_src/response_headers/tutorial002_py310.py hl[1, 7:8] *}
ÐоÑле ÑÑого Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе веÑнÑÑÑ Ð»Ñбой нÑжнÑй обÑекÑ, как обÑÑно (напÑимеÑ, `dict`, Ð¼Ð¾Ð´ÐµÐ»Ñ Ð¸Ð· Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
и Ñ.д.).
@@ -22,7 +22,7 @@
СоздайÑе оÑвеÑ, как опиÑано в [ÐеÑнÑÑÑ Response напÑÑмÑÑ](response-directly.md){.internal-link target=_blank}, и пеÑедайÑе заголовки как дополниÑелÑнÑй паÑамеÑÑ:
-{* ../../docs_src/response_headers/tutorial001_py39.py hl[10:12] *}
+{* ../../docs_src/response_headers/tutorial001_py310.py hl[10:12] *}
/// note | ТеÑ
ниÑеÑкие деÑали
diff --git a/docs/ru/docs/advanced/security/http-basic-auth.md b/docs/ru/docs/advanced/security/http-basic-auth.md
index 41e62d4bf3..a6bfb7c546 100644
--- a/docs/ru/docs/advanced/security/http-basic-auth.md
+++ b/docs/ru/docs/advanced/security/http-basic-auth.md
@@ -20,7 +20,7 @@
* Ðна возвÑаÑÐ°ÐµÑ Ð¾Ð±ÑÐµÐºÑ Ñипа `HTTPBasicCredentials`:
* Ðн ÑодеÑÐ¶Ð¸Ñ Ð¾ÑпÑавленнÑе `username` и `password`.
-{* ../../docs_src/security/tutorial006_an_py39.py hl[4,8,12] *}
+{* ../../docs_src/security/tutorial006_an_py310.py hl[4,8,12] *}
Ðогда Ð²Ñ Ð²Ð¿ÐµÑвÑе оÑкÑоеÑе URL (или нажмÑÑе ÐºÐ½Ð¾Ð¿ÐºÑ Â«Execute» в докÑменÑаÑии), бÑаÑÐ·ÐµÑ Ð¿Ð¾Ð¿ÑоÑÐ¸Ñ Ð²Ð²ÐµÑÑи Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸ паÑолÑ:
@@ -40,7 +40,7 @@
ÐаÑем можно иÑполÑзоваÑÑ `secrets.compare_digest()`, ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо `credentials.username` Ñавен `"stanleyjobson"`, а `credentials.password` â `"swordfish"`.
-{* ../../docs_src/security/tutorial007_an_py39.py hl[1,12:24] *}
+{* ../../docs_src/security/tutorial007_an_py310.py hl[1,12:24] *}
ÐÑо бÑло Ð±Ñ Ð¿Ð¾Ñ
оже на:
@@ -104,4 +104,4 @@ PythonÑ Ð¿ÑидÑÑÑÑ ÑÑавниÑÑ Ð²ÐµÑÑ Ð¾Ð±Ñий пÑеÑÐ¸ÐºÑ `s
ÐоÑле Ñого как обнаÑÑжено, ÑÑо ÑÑÑÑнÑе даннÑе некоÑÑекÑнÑ, веÑниÑе `HTTPException` Ñо ÑÑаÑÑÑ-кодом оÑвеÑа 401 (Ñем же, ÑÑо и пÑи оÑÑÑÑÑÑвии ÑÑÑÑнÑÑ
даннÑÑ
) и добавÑÑе HTTP-заголовок `WWW-Authenticate`, ÑÑÐ¾Ð±Ñ Ð±ÑаÑÐ·ÐµÑ Ñнова показал окно вÑ
ода:
-{* ../../docs_src/security/tutorial007_an_py39.py hl[26:30] *}
+{* ../../docs_src/security/tutorial007_an_py310.py hl[26:30] *}
diff --git a/docs/ru/docs/advanced/settings.md b/docs/ru/docs/advanced/settings.md
index 8408faebff..15537e2b40 100644
--- a/docs/ru/docs/advanced/settings.md
+++ b/docs/ru/docs/advanced/settings.md
@@ -54,7 +54,7 @@ $ pip install "fastapi[all]"
ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð²Ñе Ñе же возможноÑÑи валидаÑии и инÑÑÑÑменÑÑ, ÑÑо и Ð´Ð»Ñ Pydanticâмоделей, напÑÐ¸Ð¼ÐµÑ ÑазнÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
и дополниÑелÑнÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ ÑеÑез `Field()`.
-{* ../../docs_src/settings/tutorial001_py39.py hl[2,5:8,11] *}
+{* ../../docs_src/settings/tutorial001_py310.py hl[2,5:8,11] *}
/// tip | СовеÑ
@@ -70,7 +70,7 @@ $ pip install "fastapi[all]"
ÐаÑем Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð½Ð¾Ð²Ñй обÑÐµÐºÑ `settings` в ваÑем пÑиложении:
-{* ../../docs_src/settings/tutorial001_py39.py hl[18:20] *}
+{* ../../docs_src/settings/tutorial001_py310.py hl[18:20] *}
### ÐапÑÑк ÑеÑвеÑа { #run-the-server }
@@ -104,11 +104,11 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
ÐапÑимеÑ, Ñ Ð²Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñайл `config.py` Ñо ÑледÑÑÑим ÑодеÑжимÑм:
-{* ../../docs_src/settings/app01_py39/config.py *}
+{* ../../docs_src/settings/app01_py310/config.py *}
РзаÑем иÑполÑзоваÑÑ ÐµÐ³Ð¾ в Ñайле `main.py`:
-{* ../../docs_src/settings/app01_py39/main.py hl[3,11:13] *}
+{* ../../docs_src/settings/app01_py310/main.py hl[3,11:13] *}
/// tip | СовеÑ
@@ -126,7 +126,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
ÐÑÐ¾Ð´Ð¾Ð»Ð¶Ð°Ñ Ð¿ÑедÑдÑÑий пÑимеÑ, Ð²Ð°Ñ Ñайл `config.py` Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ñак:
-{* ../../docs_src/settings/app02_an_py39/config.py hl[10] *}
+{* ../../docs_src/settings/app02_an_py310/config.py hl[10] *}
ÐбÑаÑиÑе внимание, ÑÑо ÑепеÑÑ Ð¼Ñ Ð½Ðµ Ñоздаем ÑкземплÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ `settings = Settings()`.
@@ -134,7 +134,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
ТепеÑÑ Ð¼Ñ Ñоздаем завиÑимоÑÑÑ, коÑоÑÐ°Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð½Ð¾Ð²Ñй `config.Settings()`.
-{* ../../docs_src/settings/app02_an_py39/main.py hl[6,12:13] *}
+{* ../../docs_src/settings/app02_an_py310/main.py hl[6,12:13] *}
/// tip | СовеÑ
@@ -146,13 +146,13 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
ÐаÑем Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ запÑоÑиÑÑ ÐµÐµ в *ÑÑнкÑии-обÑабоÑÑике пÑÑи* как завиÑимоÑÑÑ Ð¸ иÑполÑзоваÑÑ Ñам, где нÑжно.
-{* ../../docs_src/settings/app02_an_py39/main.py hl[17,19:21] *}
+{* ../../docs_src/settings/app02_an_py310/main.py hl[17,19:21] *}
### ÐаÑÑÑойки и ÑеÑÑиÑование { #settings-and-testing }
Ðалее бÑÐ´ÐµÑ Ð¾ÑÐµÐ½Ñ Ð¿ÑоÑÑо пÑедоÑÑавиÑÑ Ð´ÑÑгой обÑÐµÐºÑ Ð½Ð°ÑÑÑоек во вÑÐµÐ¼Ñ ÑеÑÑиÑованиÑ, Ñоздав пеÑеопÑеделение завиÑимоÑÑи Ð´Ð»Ñ `get_settings`:
-{* ../../docs_src/settings/app02_an_py39/test_main.py hl[9:10,13,21] *}
+{* ../../docs_src/settings/app02_an_py310/test_main.py hl[9:10,13,21] *}
РпеÑеопÑеделении завиÑимоÑÑи Ð¼Ñ Ð·Ð°Ð´Ð°ÐµÐ¼ новое знаÑение `admin_email` пÑи Ñоздании нового обÑекÑа `Settings`, а заÑем возвÑаÑаем ÑÑÐ¾Ñ Ð½Ð¾Ð²Ñй обÑекÑ.
@@ -193,7 +193,7 @@ APP_NAME="ChimichangApp"
ÐаÑем обновиÑе Ð²Ð°Ñ `config.py` Ñак:
-{* ../../docs_src/settings/app03_an_py39/config.py hl[9] *}
+{* ../../docs_src/settings/app03_an_py310/config.py hl[9] *}
/// tip | СовеÑ
@@ -226,7 +226,7 @@ def get_settings():
Ðо Ñак как Ð¼Ñ Ð¸ÑполÑзÑем декоÑаÑÐ¾Ñ `@lru_cache` ÑвеÑÑ
Ñ, обÑÐµÐºÑ `Settings` бÑÐ´ÐµÑ Ñоздан ÑолÑко один Ñаз â пÑи пеÑвом вÑзове. âï¸
-{* ../../docs_src/settings/app03_an_py39/main.py hl[1,11] *}
+{* ../../docs_src/settings/app03_an_py310/main.py hl[1,11] *}
ÐаÑем пÑи лÑбÑÑ
поÑледÑÑÑиÑ
вÑзоваÑ
`get_settings()` в завиÑимоÑÑÑÑ
Ð´Ð»Ñ ÑледÑÑÑиÑ
запÑоÑов, вмеÑÑо вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ð½ÑÑÑеннего кода `get_settings()` и ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ обÑекÑа `Settings`, бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑÑÑ ÑÐ¾Ñ Ð¶Ðµ обÑекÑ, ÑÑо бÑл возвÑаÑен пÑи пеÑвом вÑзове, Ñнова и Ñнова.
diff --git a/docs/ru/docs/advanced/sub-applications.md b/docs/ru/docs/advanced/sub-applications.md
index fa5a683f45..4fd5649ce3 100644
--- a/docs/ru/docs/advanced/sub-applications.md
+++ b/docs/ru/docs/advanced/sub-applications.md
@@ -10,7 +10,7 @@
СнаÑала ÑоздайÑе оÑновное, веÑÑ
него ÑÑовнÑ, пÑиложение **FastAPI** и его *опеÑаÑии пÑÑи*:
-{* ../../docs_src/sub_applications/tutorial001_py39.py hl[3, 6:8] *}
+{* ../../docs_src/sub_applications/tutorial001_py310.py hl[3, 6:8] *}
### ÐодпÑиложение { #sub-application }
@@ -18,7 +18,7 @@
ÐÑо подпÑиложение â обÑÑное ÑÑандаÑÑное пÑиложение FastAPI, но именно оно бÑÐ´ÐµÑ Â«ÑмонÑиÑовано»:
-{* ../../docs_src/sub_applications/tutorial001_py39.py hl[11, 14:16] *}
+{* ../../docs_src/sub_applications/tutorial001_py310.py hl[11, 14:16] *}
### СмонÑиÑÑйÑе подпÑиложение { #mount-the-sub-application }
@@ -26,7 +26,7 @@
Ð ÑÑом ÑлÑÑае оно бÑÐ´ÐµÑ ÑмонÑиÑовано по пÑÑи `/subapi`:
-{* ../../docs_src/sub_applications/tutorial001_py39.py hl[11, 19] *}
+{* ../../docs_src/sub_applications/tutorial001_py310.py hl[11, 19] *}
### ÐÑовеÑÑÑе авÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API { #check-the-automatic-api-docs }
diff --git a/docs/ru/docs/advanced/templates.md b/docs/ru/docs/advanced/templates.md
index 460e2e4660..68adcb5151 100644
--- a/docs/ru/docs/advanced/templates.md
+++ b/docs/ru/docs/advanced/templates.md
@@ -27,7 +27,7 @@ $ pip install jinja2
- ÐбÑÑвиÑе паÑамеÑÑ `Request` в *опеÑаÑии пÑÑи*, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ñаблон.
- ÐÑполÑзÑйÑе ÑозданнÑй `templates`, ÑÑÐ¾Ð±Ñ Ð¾ÑÑендеÑиÑÑ Ð¸ веÑнÑÑÑ `TemplateResponse`; пеÑедайÑе Ð¸Ð¼Ñ Ñаблона, обÑÐµÐºÑ `request` и ÑловаÑÑ Â«context» Ñ Ð¿Ð°Ñами клÑÑ-знаÑение Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð½ÑÑÑи Ñаблона Jinja2.
-{* ../../docs_src/templates/tutorial001_py39.py hl[4,11,15:18] *}
+{* ../../docs_src/templates/tutorial001_py310.py hl[4,11,15:18] *}
/// note | ÐÑимеÑание
diff --git a/docs/ru/docs/advanced/testing-events.md b/docs/ru/docs/advanced/testing-events.md
index 82caea845b..452342cdd2 100644
--- a/docs/ru/docs/advanced/testing-events.md
+++ b/docs/ru/docs/advanced/testing-events.md
@@ -2,11 +2,11 @@
ÐÑли вам нÑжно, ÑÑÐ¾Ð±Ñ `lifespan` вÑполнÑлÑÑ Ð² ваÑиÑ
ÑеÑÑаÑ
, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `TestClient` вмеÑÑе Ñ Ð¾Ð¿ÐµÑаÑоÑом `with`:
-{* ../../docs_src/app_testing/tutorial004_py39.py hl[9:15,18,27:28,30:32,41:43] *}
+{* ../../docs_src/app_testing/tutorial004_py310.py hl[9:15,18,27:28,30:32,41:43] *}
ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑзнаÑÑ Ð±Ð¾Ð»ÑÑе подÑобноÑÑей в ÑÑаÑÑе [ÐапÑÑк lifespan в ÑеÑÑаÑ
на оÑиÑиалÑном ÑайÑе докÑменÑаÑии Starlette.](https://www.starlette.dev/lifespan/#running-lifespan-in-tests)
ÐÐ»Ñ ÑÑÑаÑевÑиÑ
ÑобÑÑий `startup` и `shutdown` Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `TestClient` ÑледÑÑÑим обÑазом:
-{* ../../docs_src/app_testing/tutorial003_py39.py hl[9:12,20:24] *}
+{* ../../docs_src/app_testing/tutorial003_py310.py hl[9:12,20:24] *}
diff --git a/docs/ru/docs/advanced/testing-websockets.md b/docs/ru/docs/advanced/testing-websockets.md
index b6626679e4..f6fa6a04be 100644
--- a/docs/ru/docs/advanced/testing-websockets.md
+++ b/docs/ru/docs/advanced/testing-websockets.md
@@ -4,7 +4,7 @@
ÐÐ»Ñ ÑÑого иÑполÑзÑйÑе `TestClient` Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑом конÑекÑÑа `with`, подклÑÑаÑÑÑ Ðº WebSocket:
-{* ../../docs_src/app_testing/tutorial002_py39.py hl[27:31] *}
+{* ../../docs_src/app_testing/tutorial002_py310.py hl[27:31] *}
/// note | ÐÑимеÑание
diff --git a/docs/ru/docs/advanced/using-request-directly.md b/docs/ru/docs/advanced/using-request-directly.md
index cdf500c0e2..0c091cdeda 100644
--- a/docs/ru/docs/advanced/using-request-directly.md
+++ b/docs/ru/docs/advanced/using-request-directly.md
@@ -29,7 +29,7 @@
ÐÐ»Ñ ÑÑого нÑжно обÑаÑиÑÑÑÑ Ðº запÑоÑÑ Ð½Ð°Ð¿ÑÑмÑÑ.
-{* ../../docs_src/using_request_directly/tutorial001_py39.py hl[1,7:8] *}
+{* ../../docs_src/using_request_directly/tutorial001_py310.py hl[1,7:8] *}
ÐÑли обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ *ÑÑнкÑии-обÑабоÑÑика пÑÑи* Ñ Ñипом `Request`, **FastAPI** поймÑÑ, ÑÑо нÑжно пеÑедаÑÑ Ð¾Ð±ÑÐµÐºÑ `Request` в ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ.
diff --git a/docs/ru/docs/advanced/websockets.md b/docs/ru/docs/advanced/websockets.md
index fa5e4738eb..446cc2505e 100644
--- a/docs/ru/docs/advanced/websockets.md
+++ b/docs/ru/docs/advanced/websockets.md
@@ -38,13 +38,13 @@ $ pip install websockets
ÐÐ»Ñ Ð¿ÑимеÑа нам нÑжен наиболее пÑоÑÑой ÑпоÑоб, коÑоÑÑй Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ ÑоÑÑедоÑоÑиÑÑÑÑ Ð½Ð° ÑеÑвеÑной ÑаÑÑи вебâÑокеÑов и полÑÑиÑÑ ÑабоÑий код:
-{* ../../docs_src/websockets/tutorial001_py39.py hl[2,6:38,41:43] *}
+{* ../../docs_src/websockets/tutorial001_py310.py hl[2,6:38,41:43] *}
## Создание `websocket` { #create-a-websocket }
СоздайÑе `websocket` в Ñвоем **FastAPI** пÑиложении:
-{* ../../docs_src/websockets/tutorial001_py39.py hl[1,46:47] *}
+{* ../../docs_src/websockets/tutorial001_py310.py hl[1,46:47] *}
/// note | ТеÑ
ниÑеÑкие деÑали
@@ -58,7 +58,7 @@ $ pip install websockets
ЧеÑез ÑÐ½Ð´Ð¿Ð¾Ð¸Ð½Ñ Ð²ÐµÐ±-ÑокеÑа Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе полÑÑаÑÑ Ð¸ оÑпÑавлÑÑÑ ÑообÑениÑ.
-{* ../../docs_src/websockets/tutorial001_py39.py hl[48:52] *}
+{* ../../docs_src/websockets/tutorial001_py310.py hl[48:52] *}
ÐÑ Ð¼Ð¾Ð¶ÐµÑе полÑÑаÑÑ Ð¸ оÑпÑавлÑÑÑ Ð´Ð²Ð¾Ð¸ÑнÑе, ÑекÑÑовÑе и JSON даннÑе.
@@ -154,7 +154,7 @@ $ fastapi dev main.py
ÐÑли веб-ÑÐ¾ÐºÐµÑ Ñоединение закÑÑÑо, Ñо `await websocket.receive_text()` вÑÐ·Ð¾Ð²ÐµÑ Ð¸ÑклÑÑение `WebSocketDisconnect`, коÑоÑое можно поймаÑÑ Ð¸ обÑабоÑаÑÑ ÐºÐ°Ðº в ÑÑом пÑимеÑе:
-{* ../../docs_src/websockets/tutorial003_py39.py hl[79:81] *}
+{* ../../docs_src/websockets/tutorial003_py310.py hl[79:81] *}
ЧÑÐ¾Ð±Ñ Ð²Ð¾ÑпÑоизвеÑÑи пÑимеÑ:
diff --git a/docs/ru/docs/advanced/wsgi.md b/docs/ru/docs/advanced/wsgi.md
index 41d3a169c7..aa630c228e 100644
--- a/docs/ru/docs/advanced/wsgi.md
+++ b/docs/ru/docs/advanced/wsgi.md
@@ -18,7 +18,7 @@
ÐоÑле ÑÑого ÑмонÑиÑÑйÑе его на пÑÑÑ.
-{* ../../docs_src/wsgi/tutorial001_py39.py hl[1,3,23] *}
+{* ../../docs_src/wsgi/tutorial001_py310.py hl[1,3,23] *}
/// note | ÐÑимеÑание
diff --git a/docs/ru/docs/alternatives.md b/docs/ru/docs/alternatives.md
index 17b54aad2f..1f713c3f39 100644
--- a/docs/ru/docs/alternatives.md
+++ b/docs/ru/docs/alternatives.md
@@ -137,7 +137,7 @@ def read_url():
### Marshmallow { #marshmallow }
-Ðдна из оÑновнÑÑ
возможноÑÑей, нÑжнÑÑ
ÑиÑÑемам API, â «ÑеÑиализаÑиÑ» даннÑÑ
, Ñо еÑÑÑ Ð¿ÑеобÑазование даннÑÑ
из кода (Python) во ÑÑо-Ñо, ÑÑо можно оÑпÑавиÑÑ Ð¿Ð¾ ÑеÑи. ÐапÑимеÑ, пÑеобÑазование обÑекÑа Ñ Ð´Ð°Ð½Ð½Ñми из Ð±Ð°Ð·Ñ Ð² JSON-обÑекÑ. ÐÑеобÑазование обÑекÑов `datetime` в ÑÑÑоки и Ñ. п.
+Ðдна из оÑновнÑÑ
возможноÑÑей, нÑжнÑÑ
ÑиÑÑемам API, â «ÑеÑиализаÑиÑ» даннÑÑ
, Ñо еÑÑÑ Ð¿ÑеобÑазование даннÑÑ
из кода (Python) во ÑÑо-Ñо, ÑÑо можно оÑпÑавиÑÑ Ð¿Ð¾ ÑеÑи. ÐапÑимеÑ, пÑеобÑазование обÑекÑа Ñ Ð´Ð°Ð½Ð½Ñми из Ð±Ð°Ð·Ñ Ð² JSON-обÑекÑ. ÐÑеобÑазование обÑекÑов `datetime` в ÑÑÑоки и Ñ. п.
ÐÑÑ Ð¾Ð´Ð½Ð° Ð²Ð°Ð¶Ð½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ, воÑÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð½Ð°Ñ API, â валидаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
: ÑбеждаÑÑÑÑ, ÑÑо даннÑе Ð²Ð°Ð»Ð¸Ð´Ð½Ñ Ñ ÑÑÑÑом заданнÑÑ
паÑамеÑÑов. ÐапÑимеÑ, ÑÑо какое-Ñо поле â `int`, а не пÑоизволÑÐ½Ð°Ñ ÑÑÑока. ÐÑо оÑобенно полезно Ð´Ð»Ñ Ð²Ñ
одÑÑиÑ
даннÑÑ
.
@@ -145,7 +145,7 @@ def read_url():
Ðменно Ð´Ð»Ñ ÑÑиÑ
возможноÑÑей и бÑл Ñоздан Marshmallow. ÐÑо оÑлиÑÐ½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñека, Ñ Ð¼Ð½Ð¾Ð³Ð¾ ей полÑзовалÑÑ ÑанÑÑе.
-Ðо она поÑвилаÑÑ Ð´Ð¾ Ñого, как в Python поÑвилиÑÑ Ð°Ð½Ð½Ð¾ÑаÑии Ñипов. ÐоÑÑÐ¾Ð¼Ñ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑ
ÐµÐ¼Ñ Ð½Ñжно иÑполÑзоваÑÑ ÑпеÑиалÑнÑе ÑÑилиÑÑ Ð¸ клаÑÑÑ, пÑедоÑÑавлÑемÑе Marshmallow.
+Ðо она поÑвилаÑÑ Ð´Ð¾ Ñого, как в Python поÑвилиÑÑ Ð°Ð½Ð½Ð¾ÑаÑии Ñипов. ÐоÑÑÐ¾Ð¼Ñ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑ
ÐµÐ¼Ñ Ð½Ñжно иÑполÑзоваÑÑ ÑпеÑиалÑнÑе ÑÑилиÑÑ Ð¸ клаÑÑÑ, пÑедоÑÑавлÑемÑе Marshmallow.
/// check | ÐдоÑ
новило **FastAPI** на
@@ -155,7 +155,7 @@ def read_url():
### Webargs { #webargs }
-ÐÑÑ Ð¾Ð´Ð½Ð° Ð²Ð°Ð¶Ð½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð´Ð»Ñ API â паÑÑинг даннÑÑ
из вÑ
одÑÑиÑ
HTTP-запÑоÑов.
+ÐÑÑ Ð¾Ð´Ð½Ð° Ð²Ð°Ð¶Ð½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð´Ð»Ñ API â паÑÑинг даннÑÑ
из вÑ
одÑÑиÑ
HTTP-запÑоÑов.
Webargs â ÑÑо инÑÑÑÑменÑ, ÑозданнÑй Ð´Ð»Ñ ÑÑого повеÑÑ
неÑколÑкиÑ
ÑÑеймвоÑков, вклÑÑÐ°Ñ Flask.
@@ -245,7 +245,7 @@ Flask-apispec бÑл Ñоздан Ñеми же ÑазÑабоÑÑиками, Ñ
РнÑм вÑÑÑоена ÑиÑÑема внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей, вдоÑ
новлÑÐ½Ð½Ð°Ñ Angular 2. ТÑебÑеÑÑÑ Ð¿ÑедваÑиÑелÑÐ½Ð°Ñ ÑегиÑÑÑаÑÐ¸Ñ Â«Ð¸Ð½Ð¶ÐµÐºÑиÑÑемÑÑ
» компоненÑов (как и во вÑеÑ
извеÑÑнÑÑ
мне ÑиÑÑемаÑ
внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей), ÑÑо добавлÑÐµÑ Ð¼Ð½Ð¾Ð³Ð¾ÑловноÑÑи и повÑоÑÑемоÑÑи кода.
-ÐоÑколÑÐºÑ Ð¿Ð°ÑамеÑÑÑ Ð¾Ð¿Ð¸ÑÑваÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ñипов TypeScript (аналог анноÑаÑий Ñипов в Python), поддеÑжка ÑедакÑоÑа веÑÑма Ñ
оÑоÑа.
+ÐоÑколÑÐºÑ Ð¿Ð°ÑамеÑÑÑ Ð¾Ð¿Ð¸ÑÑваÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ñипов TypeScript (аналог анноÑаÑий Ñипов в Python), поддеÑжка ÑедакÑоÑа кода веÑÑма Ñ
оÑоÑа.
Ðо Ñак как даннÑе о ÑипаÑ
TypeScript не ÑоÑ
ÑанÑÑÑÑÑ Ð¿Ð¾Ñле компилÑÑии в JavaScript, он не Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»Ð°Ð³Ð°ÑÑÑÑ Ð½Ð° ÑÐ¸Ð¿Ñ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð²Ñеменного опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии, ÑеÑиализаÑии и докÑменÑаÑии. Ðзâза ÑÑого и некоÑоÑÑÑ
пÑоекÑнÑÑ
ÑеÑений Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии, ÑеÑиализаÑии и авÑомаÑиÑеÑкой генеÑаÑии ÑÑ
ем пÑиÑ
одиÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð´ÐµÐºÐ¾ÑаÑоÑÑ Ð²Ð¾ многиÑ
меÑÑаÑ
. РиÑоге ÑÑо ÑÑановиÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно многоÑловнÑм.
@@ -359,7 +359,7 @@ Hug вдоÑ
новил **FastAPI** обÑÑвлÑÑÑ Ð¿Ð°ÑамеÑÑ `response
РнÑм бÑли авÑомаÑиÑеÑкие валидаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
и генеÑаÑÐ¸Ñ ÑÑ
ÐµÐ¼Ñ OpenAPI на оÑнове ÑеÑ
же анноÑаÑий Ñипов в неÑколÑкиÑ
меÑÑаÑ
.
-ÐпÑеделение ÑÑ
ÐµÐ¼Ñ Ñела запÑоÑа не иÑполÑзовало Ñе же анноÑаÑии Ñипов Python, как в Pydantic, â ÑÑо бÑло ближе к Marshmallow, поÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑжка ÑедакÑоÑа бÑла Ð±Ñ Ñ
Ñже, но вÑÑ Ñавно APIStar оÑÑавалÑÑ Ð»ÑÑÑим доÑÑÑпнÑм ваÑианÑом.
+ÐпÑеделение ÑÑ
ÐµÐ¼Ñ Ñела запÑоÑа не иÑполÑзовало Ñе же анноÑаÑии Ñипов Python, как в Pydantic, â ÑÑо бÑло ближе к Marshmallow, поÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑжка ÑедакÑоÑа кода бÑла Ð±Ñ Ñ
Ñже, но вÑÑ Ñавно APIStar оÑÑавалÑÑ Ð»ÑÑÑим доÑÑÑпнÑм ваÑианÑом.
Ðа ÑÐ¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ Ñ Ð½ÐµÐ³Ð¾ бÑли лÑÑÑие показаÑели в бенÑмаÑкаÑ
(его пÑевоÑÑ
одил ÑолÑко Starlette).
@@ -419,7 +419,7 @@ Pydantic â ÑÑо библиоÑека Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²Ð°Ð»Ð¸
### Starlette { #starlette }
-Starlette â ÑÑо лÑгкий ASGI ÑÑеймвоÑк/Ð½Ð°Ð±Ð¾Ñ Ð¸Ð½ÑÑÑÑменÑов, идеалÑно подÑ
одÑÑий Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²ÑÑокопÑоизводиÑелÑнÑÑ
asyncioâÑеÑвиÑов.
+Starlette â ÑÑо лÑгкий ASGI ÑÑеймвоÑк/Ð½Ð°Ð±Ð¾Ñ Ð¸Ð½ÑÑÑÑменÑов, идеалÑно подÑ
одÑÑий Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²ÑÑокопÑоизводиÑелÑнÑÑ
asyncioâÑеÑвиÑов.
Ðн оÑÐµÐ½Ñ Ð¿ÑоÑÑой и инÑÑиÑивнÑй. СпÑоекÑиÑован Ñак, ÑÑÐ¾Ð±Ñ ÐµÐ³Ð¾ бÑло легко ÑаÑÑиÑÑÑÑ, и ÑÑÐ¾Ð±Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½ÑÑ Ð±Ñли модÑлÑнÑми.
diff --git a/docs/ru/docs/async.md b/docs/ru/docs/async.md
index 15d4e108ab..bff32aaf49 100644
--- a/docs/ru/docs/async.md
+++ b/docs/ru/docs/async.md
@@ -4,7 +4,7 @@
## ÐÐµÑ Ð²Ñемени? { #in-a-hurry }
-TL;DR:
+TL;DR:
ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе ÑÑоÑонние библиоÑеки, коÑоÑÑе нÑжно вÑзÑваÑÑ Ñ `await`, напÑимеÑ:
@@ -68,13 +68,13 @@ def results():
ÐÑинÑ
ÑоннÑй код знаÑиÑ, ÑÑо в ÑзÑке ð¬ еÑÑÑ ÑпоÑоб ÑказаÑÑ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑÑ/пÑогÑамме ð¤, ÑÑо в некоÑоÑÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ ÐºÐ¾Ð´Ð° ÐµÐ¼Ñ ð¤ пÑидÑÑÑÑ Ð¿Ð¾Ð´Ð¾Ð¶Ð´Ð°ÑÑ, пока *ÑÑо-Ñо еÑÑ* где-Ñо в дÑÑгом меÑÑе завеÑÑиÑÑÑ. ÐазовÑм ÑÑо *ÑÑо-Ñо еÑÑ* «медленнÑй Ñайл» ð.
-Рпока Ð¼Ñ Ð¶Ð´Ñм завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ Ñ Â«Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ñи Ñайлом» ð, компÑÑÑÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½ÑÑÑÑÑ Ð´ÑÑгой ÑабоÑой.
+Рпока Ð¼Ñ Ð¶Ð´Ñм завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ Ñ Â«Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ñм Ñайлом» ð, компÑÑÑÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½ÑÑÑÑÑ Ð´ÑÑгой ÑабоÑой.
ÐаÑем компÑÑÑеÑ/пÑогÑамма ð¤ бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑÑÑ ÐºÐ°Ð¶Ð´Ñй Ñаз, когда поÑвиÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ (пока Ñнова где-Ñо идÑÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ðµ), или когда ð¤ завеÑÑÐ¸Ñ Ð²ÑÑ ÑекÑÑÑÑ ÑабоÑÑ. Рон ð¤ пÑовеÑиÑ, не завеÑÑилаÑÑ Ð»Ð¸ какаÑ-либо из задаÑ, коÑоÑÑÑ
он ждал, и ÑÐ´ÐµÐ»Ð°ÐµÑ Ñо, ÑÑо нÑжно.
Ðалее он ð¤ возÑмÑÑ Ð¿ÐµÑвÑÑ Ð·Ð°Ð²ÐµÑÑивÑÑÑÑÑ Ð·Ð°Ð´Ð°ÑÑ (Ñкажем, Ð½Ð°Ñ Â«Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ñй Ñайл» ð) и пÑÐ¾Ð´Ð¾Ð»Ð¶Ð¸Ñ Ð´ÐµÐ»Ð°ÑÑ Ñ Ð½ÐµÐ¹ Ñо, ÑÑо ÑÑебÑеÑÑÑ.
-ÐÑо «ожидание Ñего-Ñо еÑÑ» обÑÑно оÑноÑиÑÑÑ Ðº опеÑаÑиÑм I/O, коÑоÑÑе оÑноÑиÑелÑно «медленнÑе» (по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñо ÑкоÑоÑÑÑÑ Ð¿ÑоÑеÑÑоÑа и опеÑаÑивной памÑÑи), напÑÐ¸Ð¼ÐµÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ðµ:
+ÐÑо «ожидание Ñего-Ñо еÑÑ» обÑÑно оÑноÑиÑÑÑ Ðº опеÑаÑиÑм I/O, коÑоÑÑе оÑноÑиÑелÑно «медленнÑе» (по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñо ÑкоÑоÑÑÑÑ Ð¿ÑоÑеÑÑоÑа и опеÑаÑивной памÑÑи), напÑÐ¸Ð¼ÐµÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ðµ:
* оÑпÑавки даннÑÑ
клиенÑом по ÑеÑи
* полÑÑÐµÐ½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñом даннÑÑ
, оÑпÑавленнÑÑ
ваÑей пÑогÑаммой по ÑеÑи
@@ -85,7 +85,7 @@ def results():
* возвÑаÑа ÑезÑлÑÑаÑов запÑоÑа к базе даннÑÑ
* и Ñ.д.
-ÐоÑколÑÐºÑ Ð¾Ñновное вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° ожидание опеÑаÑий I/O, иÑ
назÑваÑÑ Ð¾Ð¿ÐµÑаÑиÑми, «огÑаниÑеннÑми вводом-вÑводом» (I/O bound).
+ÐоÑколÑÐºÑ Ð¾Ñновное вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° ожидание опеÑаÑий I/O, иÑ
назÑваÑÑ Ð¾Ð¿ÐµÑаÑиÑми, «огÑаниÑеннÑми вводом-вÑводом» (I/O bound).
ÐÑо назÑваеÑÑÑ Â«Ð°ÑинÑ
ÑоннÑм», поÑÐ¾Ð¼Ñ ÑÑо компÑÑÑеÑÑ/пÑогÑамме не нÑжно «ÑинÑ
ÑонизиÑоваÑÑÑÑ» Ñ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾Ð¹ задаÑей, пÑоÑÑÐ°Ð¸Ð²Ð°Ñ Ð¸ вÑÐ¶Ð¸Ð´Ð°Ñ ÑоÑнÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ ÐµÑ Ð·Ð°Ð²ÐµÑÑениÑ, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð±ÑаÑÑ ÑезÑлÑÑÐ°Ñ Ð¸ пÑодолжиÑÑ ÑабоÑÑ.
@@ -277,7 +277,7 @@ def results():
Ð ÑÑом ÑÑенаÑии каждÑй ÑбоÑÑик (вклÑÑÐ°Ñ Ð²Ð°Ñ) бÑл Ð±Ñ Ð¿ÑоÑеÑÑоÑом, вÑполнÑÑÑим ÑÐ²Ð¾Ñ ÑаÑÑÑ ÑабоÑÑ.
-Ð Ñак как оÑновное вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° ÑеалÑнÑÑ ÑабоÑÑ (а не ожидание), а ÑабоÑÑ Ð² компÑÑÑеÑе вÑполнÑÐµÑ CPU, Ñакие задаÑи назÑваÑÑ Â«Ð¾Ð³ÑаниÑеннÑми пÑоÑеÑÑоÑом» (CPU bound).
+Ð Ñак как оÑновное вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° ÑеалÑнÑÑ ÑабоÑÑ (а не ожидание), а ÑабоÑÑ Ð² компÑÑÑеÑе вÑполнÑÐµÑ CPU, Ñакие задаÑи назÑваÑÑ Â«Ð¾Ð³ÑаниÑеннÑми пÑоÑеÑÑоÑом» (CPU bound).
---
@@ -417,7 +417,7 @@ Starlette (и **FastAPI**) оÑÐ½Ð¾Ð²Ð°Ð½Ñ Ð½Ð° I/O.
+ÐÑли Ð²Ñ Ð¿ÑиÑли из дÑÑгого async-ÑÑеймвоÑка, коÑоÑÑй ÑабоÑÐ°ÐµÑ Ð¸Ð½Ð°Ñе, и пÑивÑкли обÑÑвлÑÑÑ ÑÑивиалÑнÑе *ÑÑнкÑии-обÑабоÑÑики пÑÑи*, вÑполнÑÑÑие ÑолÑко вÑÑиÑлениÑ, ÑеÑез пÑоÑÑой `def` Ñади кÑоÑеÑной вÑÐ³Ð¾Ð´Ñ Ð² пÑоизводиÑелÑноÑÑи (около 100 наноÑекÑнд), обÑаÑиÑе внимание: в **FastAPI** ÑÑÑÐµÐºÑ Ð±ÑÐ´ÐµÑ Ð¿ÑоÑивоположнÑм. Ð ÑакиÑ
ÑлÑÑаÑÑ
лÑÑÑе иÑполÑзоваÑÑ `async def`, еÑли ÑолÑко ваÑи *ÑÑнкÑии-обÑабоÑÑики пÑÑи* не иÑполÑзÑÑÑ ÐºÐ¾Ð´, вÑполнÑÑÑий блокиÑÑÑÑий I/O.
Тем не менее, в обоиÑ
ÑлÑÑаÑÑ
велика веÑоÑÑноÑÑÑ, ÑÑо **FastAPI** [вÑÑ Ñавно бÑÐ´ÐµÑ Ð±ÑÑÑÑее](index.md#performance){.internal-link target=_blank} (или как минимÑм ÑопоÑÑавим) Ñ Ð²Ð°Ñим пÑедÑдÑÑим ÑÑеймвоÑком.
diff --git a/docs/ru/docs/benchmarks.md b/docs/ru/docs/benchmarks.md
index 612b39f708..c8cacae5f3 100644
--- a/docs/ru/docs/benchmarks.md
+++ b/docs/ru/docs/benchmarks.md
@@ -16,19 +16,19 @@
* **Uvicorn**: ASGI-ÑеÑвеÑ
* **Starlette**: (иÑполÑзÑÐµÑ Uvicorn) веб-микÑоÑÑеймвоÑк
- * **FastAPI**: (иÑполÑзÑÐµÑ Starlette) API-микÑоÑÑеймвоÑк Ñ ÑÑдом дополниÑелÑнÑÑ
возможноÑÑей Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ API, вклÑÑÐ°Ñ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
и Ñ. п.
+ * **FastAPI**: (иÑполÑзÑÐµÑ Starlette) API-микÑоÑÑеймвоÑк Ñ ÑÑдом дополниÑелÑнÑÑ
возможноÑÑей Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ API, вклÑÑÐ°Ñ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
и Ñ.п.
* **Uvicorn**:
* ÐÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð½Ð°Ð¸Ð»ÑÑÑÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ, Ñак как помимо Ñамого ÑеÑвеÑа Ñ Ð½ÐµÐ³Ð¾ немного дополниÑелÑного кода.
* ÐÑ Ð½Ðµ бÑдеÑе пиÑаÑÑ Ð¿Ñиложение непоÑÑедÑÑвенно на Uvicorn. ÐÑо ознаÑало бÑ, ÑÑо ÐÐ°Ñ ÐºÐ¾Ð´ должен вклÑÑаÑÑ ÐºÐ°Ðº минимÑм веÑÑ ÐºÐ¾Ð´, пÑедоÑÑавлÑемÑй Starlette (или **FastAPI**). РеÑли ÐÑ Ñак ÑделаеÑе, Ñо в конеÑном иÑоге ÐаÑе пÑиложение бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ñе же накладнÑе ÑаÑÑ
одÑ, ÑÑо и пÑи иÑполÑзовании ÑÑеймвоÑка, минимизиÑÑÑÑего код ÐаÑего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ ÐаÑи оÑибки.
- * ÐÑли ÐÑ ÑÑавниваеÑе Uvicorn, ÑÑавнивайÑе его Ñ Daphne, Hypercorn, uWSGI и Ñ. д. â ÑеÑвеÑами пÑиложений.
+ * ÐÑли ÐÑ ÑÑавниваеÑе Uvicorn, ÑÑавнивайÑе его Ñ Daphne, Hypercorn, uWSGI и Ñ.д. â ÑеÑвеÑами пÑиложений.
* **Starlette**:
* ÐÑÐ´ÐµÑ Ð½Ð° ÑледÑÑÑем меÑÑе по пÑоизводиÑелÑноÑÑи поÑле Uvicorn. ФакÑиÑеÑки Starlette запÑÑкаеÑÑÑ Ð¿Ð¾Ð´ ÑпÑавлением Uvicorn, поÑÑÐ¾Ð¼Ñ Ð¾Ð½ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑолÑко «медленнее» Uvicorn изâза вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑÑего обÑÑма кода.
- * ÐаÑо он пÑедоÑÑавлÑÐµÑ Ðам инÑÑÑÑменÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿ÑоÑÑÑÑ
вебâпÑиложений Ñ Ð¼Ð°ÑÑÑÑÑизаÑией по пÑÑÑм и Ñ. п.
- * ÐÑли ÐÑ ÑÑавниваеÑе Starlette, ÑÑавнивайÑе его Ñ Sanic, Flask, Django и Ñ. д. â вебâÑÑеймвоÑками (или микÑоÑÑеймвоÑками).
+ * ÐаÑо он пÑедоÑÑавлÑÐµÑ Ðам инÑÑÑÑменÑÑ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿ÑоÑÑÑÑ
вебâпÑиложений Ñ Ð¼Ð°ÑÑÑÑÑизаÑией по пÑÑÑм и Ñ.п.
+ * ÐÑли ÐÑ ÑÑавниваеÑе Starlette, ÑÑавнивайÑе его Ñ Sanic, Flask, Django и Ñ.д. â вебâÑÑеймвоÑками (или микÑоÑÑеймвоÑками).
* **FastAPI**:
* ТоÑно Ñак же, как Starlette иÑполÑзÑÐµÑ Uvicorn и не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±ÑÑÑÑее него, **FastAPI** иÑполÑзÑÐµÑ Starlette, поÑÑÐ¾Ð¼Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð±ÑÑÑÑее его.
* FastAPI пÑедоÑÑавлÑÐµÑ Ð±Ð¾Ð»ÑÑе возможноÑÑей повеÑÑ
Starlette â Ñе, коÑоÑÑе поÑÑи вÑегда нÑÐ¶Ð½Ñ Ð¿Ñи Ñоздании API, Ñакие как валидаÑÐ¸Ñ Ð¸ ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
. РдовеÑок ÐÑ ÐµÑÑ Ð¸ полÑÑаеÑе авÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ (авÑомаÑиÑеÑÐºÐ°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð´Ð°Ð¶Ðµ не ÑвелиÑÐ¸Ð²Ð°ÐµÑ Ð½Ð°ÐºÐ»Ð°Ð´Ð½Ñе ÑаÑÑ
Ð¾Ð´Ñ Ð¿Ñи ÑабоÑе пÑиложениÑ, Ñак как она ÑоздаÑÑÑÑ Ð¿Ñи запÑÑке).
- * ÐÑли Ð±Ñ ÐÑ Ð½Ðµ иÑполÑзовали FastAPI, а иÑполÑзовали Starlette напÑÑмÑÑ (или дÑÑгой инÑÑÑÑÐ¼ÐµÐ½Ñ Ð²Ñоде Sanic, Flask, Responder и Ñ. д.), Ðам пÑиÑлоÑÑ Ð±Ñ ÑамоÑÑоÑÑелÑно ÑеализоваÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð¸ ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
. То еÑÑÑ, в иÑоге, ÐаÑе пÑиложение имело Ð±Ñ Ñакие же накладнÑе ÑаÑÑ
одÑ, как еÑли Ð±Ñ Ð¾Ð½Ð¾ бÑло Ñоздано Ñ Ð¸ÑполÑзованием FastAPI. Рво многиÑ
ÑлÑÑаÑÑ
валидаÑÐ¸Ñ Ð¸ ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
пÑедÑÑавлÑÑÑ Ñобой ÑамÑй болÑÑой обÑÑм кода, напиÑанного в пÑиложениÑÑ
.
+ * ÐÑли Ð±Ñ ÐÑ Ð½Ðµ иÑполÑзовали FastAPI, а иÑполÑзовали Starlette напÑÑмÑÑ (или дÑÑгой инÑÑÑÑÐ¼ÐµÐ½Ñ Ð²Ñоде Sanic, Flask, Responder и Ñ.д.), Ðам пÑиÑлоÑÑ Ð±Ñ ÑамоÑÑоÑÑелÑно ÑеализоваÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð¸ ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
. То еÑÑÑ, в иÑоге, ÐаÑе пÑиложение имело Ð±Ñ Ñакие же накладнÑе ÑаÑÑ
одÑ, как еÑли Ð±Ñ Ð¾Ð½Ð¾ бÑло Ñоздано Ñ Ð¸ÑполÑзованием FastAPI. Рво многиÑ
ÑлÑÑаÑÑ
валидаÑÐ¸Ñ Ð¸ ÑеÑиализаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
пÑедÑÑавлÑÑÑ Ñобой ÑамÑй болÑÑой обÑÑм кода, напиÑанного в пÑиложениÑÑ
.
* Таким обÑазом, иÑполÑзÑÑ FastAPI, ÐÑ ÑкономиÑе вÑÐµÐ¼Ñ ÑазÑабоÑки, ÑменÑÑаеÑе колиÑеÑÑво оÑибок, ÑÑÑок кода и, веÑоÑÑно, полÑÑиÑе ÑÑ Ð¶Ðµ пÑоизводиÑелÑноÑÑÑ (или лÑÑÑе), как и еÑли Ð±Ñ Ð½Ðµ иÑполÑзовали его (поÑколÑÐºÑ Ðам пÑиÑлоÑÑ Ð±Ñ ÑеализоваÑÑ Ð²Ñе его возможноÑÑи в ÑвоÑм коде).
* ÐÑли ÐÑ ÑÑавниваеÑе FastAPI, ÑÑавнивайÑе его Ñ ÑÑеймвоÑком вебâпÑиложений (или набоÑом инÑÑÑÑменÑов), коÑоÑÑй обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
, ÑеÑиализаÑÐ¸Ñ Ð¸ докÑменÑаÑиÑ, Ñакими как Flask-apispec, NestJS, Molten и им подобнÑе. ФÑеймвоÑки Ñ Ð¸Ð½ÑегÑиÑованной авÑомаÑиÑеÑкой валидаÑией даннÑÑ
, ÑеÑиализаÑией и докÑменÑаÑией.
diff --git a/docs/ru/docs/deployment/concepts.md b/docs/ru/docs/deployment/concepts.md
index 207d1604d7..173dbb962d 100644
--- a/docs/ru/docs/deployment/concepts.md
+++ b/docs/ru/docs/deployment/concepts.md
@@ -27,13 +27,13 @@
Ð [пÑедÑдÑÑей главе пÑо HTTPS](https.md){.internal-link target=_blank} Ð¼Ñ ÑазобÑалиÑÑ, как HTTPS обеÑпеÑÐ¸Ð²Ð°ÐµÑ ÑиÑÑование Ð´Ð»Ñ Ð²Ð°Ñего API.
-Также Ð¼Ñ Ñвидели, ÑÑо HTTPS обÑÑно обеÑпеÑÐ¸Ð²Ð°ÐµÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ, **внеÑний** по оÑноÑÐµÐ½Ð¸Ñ Ðº ÑеÑвеÑÑ Ð²Ð°Ñего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ â **TLS Termination Proxy**.
+Также Ð¼Ñ Ñвидели, ÑÑо HTTPS обÑÑно обеÑпеÑÐ¸Ð²Ð°ÐµÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ, **внеÑний** по оÑноÑÐµÐ½Ð¸Ñ Ðº ÑеÑвеÑÑ Ð²Ð°Ñего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ â **пÑокÑи-ÑеÑÐ²ÐµÑ TSL-ÑеÑминаÑии**.
Рдолжен бÑÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ, оÑвеÑаÑÑий за **обновление HTTPSâÑеÑÑиÑикаÑов** â ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÐ¾Ñ Ð¶Ðµ ÑамÑй ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð¸Ð»Ð¸ оÑделÑнÑй.
### ÐÑимеÑÑ Ð¸Ð½ÑÑÑÑменÑов Ð´Ð»Ñ HTTPS { #example-tools-for-https }
-ÐекоÑоÑÑе инÑÑÑÑменÑÑ, коÑоÑÑе можно иÑполÑзоваÑÑ ÐºÐ°Ðº TLS Termination Proxy:
+ÐекоÑоÑÑе инÑÑÑÑменÑÑ, коÑоÑÑе можно иÑполÑзоваÑÑ ÐºÐ°Ðº пÑокÑи-ÑеÑÐ²ÐµÑ TSL-ÑеÑминаÑии:
* Traefik
* ÐвÑомаÑиÑеÑки обновлÑÐµÑ ÑеÑÑиÑикаÑÑ â¨
@@ -47,7 +47,7 @@
* С внеÑним компоненÑом (напÑимеÑ, cert-manager) Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑеÑÑиÑикаÑов
* ÐбÑабаÑÑваеÑÑÑ Ð²Ð½ÑÑÑи облаÑного пÑовайдеÑа как ÑаÑÑÑ ÐµÐ³Ð¾ ÑÑлÑг (Ñм. ниже ð)
-ÐÑÑгой ваÑÐ¸Ð°Ð½Ñ â иÑполÑзоваÑÑ **облаÑнÑй ÑеÑвиÑ**, коÑоÑÑй возÑмÑÑ Ð½Ð° ÑÐµÐ±Ñ Ð±Ð¾Ð»ÑÑе задаÑ, вклÑÑÐ°Ñ Ð½Ð°ÑÑÑÐ¾Ð¹ÐºÑ HTTPS. Там могÑÑ Ð±ÑÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ дополниÑелÑÐ½Ð°Ñ ÑÑоимоÑÑÑ Ð¸ Ñ.п., но в Ñаком ÑлÑÑае вам не пÑидÑÑÑÑ Ñамим наÑÑÑаиваÑÑ TLS Termination Proxy.
+ÐÑÑгой ваÑÐ¸Ð°Ð½Ñ â иÑполÑзоваÑÑ **облаÑнÑй ÑеÑвиÑ**, коÑоÑÑй возÑмÑÑ Ð½Ð° ÑÐµÐ±Ñ Ð±Ð¾Ð»ÑÑе задаÑ, вклÑÑÐ°Ñ Ð½Ð°ÑÑÑÐ¾Ð¹ÐºÑ HTTPS. Там могÑÑ Ð±ÑÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ дополниÑелÑÐ½Ð°Ñ ÑÑоимоÑÑÑ Ð¸ Ñ.п., но в Ñаком ÑлÑÑае вам не пÑидÑÑÑÑ Ñамим наÑÑÑаиваÑÑ Ð¿ÑокÑи-ÑеÑÐ²ÐµÑ TSL-ÑеÑминаÑии.
Ð ÑледÑÑÑиÑ
главаÑ
Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ ÐºÐ¾Ð½ÐºÑеÑнÑе пÑимеÑÑ.
@@ -214,7 +214,7 @@
ÐÑоÑеÑÑâменеджеÑ, веÑоÑÑно, бÑÐ´ÐµÑ Ñем, кÑо ÑлÑÑÐ°ÐµÑ **поÑÑ** на IP. Рон бÑÐ´ÐµÑ Ð¿ÐµÑедаваÑÑ Ð²ÑÑ ÐºÐ¾Ð¼Ð¼ÑникаÑÐ¸Ñ Ð²Ð¾ÑкеÑâпÑоÑеÑÑам.
-ÐÑи воÑкеÑÑ Ð±ÑдÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ Ð²Ð°Ñе пÑиложение, вÑполнÑÑÑ Ð¾ÑновнÑе вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ **запÑоÑа** и возвÑаÑа **оÑвеÑа**, и загÑÑжаÑÑ Ð²ÑÑ, ÑÑо Ð²Ñ ÐºÐ»Ð°Ð´ÑÑе в пеÑеменнÑе, в RAM.
+ÐÑи воÑкеÑÑ Ð±ÑдÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ Ð²Ð°Ñе пÑиложение, вÑполнÑÑÑ Ð¾ÑновнÑе вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ **HTTPâзапÑоÑа** и возвÑаÑа **HTTPâоÑвеÑа**, и загÑÑжаÑÑ Ð²ÑÑ, ÑÑо Ð²Ñ ÐºÐ»Ð°Ð´ÑÑе в пеÑеменнÑе, в RAM.
@@ -289,7 +289,7 @@
ÐÐ°Ñ ÑеÑвеÑ(а) â ÑÑо **ÑеÑÑÑÑ**, коÑоÑÑй ваÑи пÑогÑÐ°Ð¼Ð¼Ñ Ð¼Ð¾Ð³ÑÑ Ð¿Ð¾ÑÑеблÑÑÑ Ð¸Ð»Ð¸ **иÑполÑзоваÑÑ**: вÑÐµÐ¼Ñ Ð²ÑÑиÑлений на CPU и доÑÑÑпнÑÑ Ð¾Ð¿ÐµÑаÑивнÑÑ Ð¿Ð°Ð¼ÑÑÑ (RAM).
-ÐакÑÑ Ð´Ð¾Ð»Ñ ÑиÑÑемнÑÑ
ÑеÑÑÑÑов Ð²Ñ Ñ
оÑиÑе поÑÑеблÑÑÑ/иÑполÑзоваÑÑ? Ðожно подÑмаÑÑ Â«Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾Â», но на пÑакÑике вÑ, ÑкоÑее вÑего, заÑ
оÑиÑе поÑÑеблÑÑÑ **макÑимÑм без падений**.
+ÐакÑÑ Ð´Ð¾Ð»Ñ ÑиÑÑемнÑÑ
ÑеÑÑÑÑов Ð²Ñ Ñ
оÑиÑе поÑÑеблÑÑÑ/иÑполÑзоваÑÑ? Ðожно подÑмаÑÑ Â«Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾Â», но на пÑакÑике вÑ, веÑоÑÑно, заÑ
оÑиÑе поÑÑеблÑÑÑ **макÑимÑм без падений**.
ÐÑли Ð²Ñ Ð¿Ð»Ð°ÑиÑе за 3 ÑеÑвеÑа, но иÑполÑзÑеÑе лиÑÑ Ð¼Ð°Ð»ÑÑ ÑаÑÑÑ Ð¸Ñ
RAM и CPU, вÑ, веÑоÑÑно, **ÑÑаÑиÑе денÑги впÑÑÑÑÑ** ð¸ и **ÑлекÑÑоÑнеÑÐ³Ð¸Ñ ÑеÑвеÑов** ð и Ñ.п.
diff --git a/docs/ru/docs/deployment/docker.md b/docs/ru/docs/deployment/docker.md
index 9e8562be70..791057fe56 100644
--- a/docs/ru/docs/deployment/docker.md
+++ b/docs/ru/docs/deployment/docker.md
@@ -14,7 +14,7 @@
-ÐÑли Ð²Ñ ÑоздаÑÑе пÑиложение CLI Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ÑеÑминале вмеÑÑо веб-API, поÑмоÑÑиÑе **Typer**.
+ÐÑли Ð²Ñ ÑоздаÑÑе пÑиложение CLI Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² ÑеÑминале вмеÑÑо веб-API, поÑмоÑÑиÑе **Typer**.
**Typer** â младÑий бÑÐ°Ñ FastAPI. Рон задÑман как **FastAPI Ð´Ð»Ñ CLI**. â¨ï¸ ð
@@ -368,7 +368,7 @@ item: Item
* ÐалидаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
:
* ÐвÑомаÑиÑеÑкие и понÑÑнÑе оÑибки, когда даннÑе некоÑÑекÑнÑ.
* ÐалидаÑÐ¸Ñ Ð´Ð°Ð¶Ðµ Ð´Ð»Ñ Ð³Ð»Ñбоко вложеннÑÑ
обÑекÑов JSON.
-* ÐÑеобÑазование вÑ
однÑÑ
даннÑÑ
: из ÑеÑи в даннÑе и ÑÐ¸Ð¿Ñ Python. ЧÑение из:
+* ÐÑеобÑазование вÑ
однÑÑ
даннÑÑ
: из ÑеÑи в даннÑе и ÑÐ¸Ð¿Ñ Python. ЧÑение из:
* JSON.
* ÐаÑамеÑÑов пÑÑи.
* ÐаÑамеÑÑов запÑоÑа.
@@ -376,7 +376,7 @@ item: Item
* HTTP-заголовков.
* ФоÑм.
* Файлов.
-* ÐÑеобÑазование вÑÑ
однÑÑ
даннÑÑ
: из даннÑÑ
и Ñипов Python в даннÑе ÑеÑи (напÑимеÑ, JSON):
+* ÐÑеобÑазование вÑÑ
однÑÑ
даннÑÑ
: из даннÑÑ
и Ñипов Python в даннÑе ÑеÑи (напÑимеÑ, JSON):
* ÐÑеобÑазование Ñипов Python (`str`, `int`, `float`, `bool`, `list` и Ñ.д.).
* ÐбÑекÑÑ `datetime`.
* ÐбÑекÑÑ `UUID`.
@@ -439,7 +439,7 @@ item: Item
* ÐбÑÑвление **паÑамеÑÑов** из дÑÑгиÑ
иÑÑоÑников: **HTTP-заголовки**, **cookies**, **Ð¿Ð¾Ð»Ñ ÑоÑмÑ** и **ÑайлÑ**.
* Ðак задаÑÑ **огÑаниÑÐµÐ½Ð¸Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии** вÑоде `maximum_length` или `regex`.
-* ÐÑÐµÐ½Ñ Ð¼Ð¾ÑнÑÑ Ð¸ пÑоÑÑÑÑ Ð² иÑполÑзовании ÑиÑÑÐµÐ¼Ñ **внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей**.
+* ÐÑÐµÐ½Ñ Ð¼Ð¾ÑнÑÑ Ð¸ пÑоÑÑÑÑ Ð² иÑполÑзовании ÑиÑÑÐµÐ¼Ñ **внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей**.
* ÐезопаÑноÑÑÑ Ð¸ аÑÑенÑиÑикаÑиÑ, вклÑÑÐ°Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ **OAuth2** Ñ **JWT Ñокенами** и **HTTP Basic** аÑÑенÑиÑикаÑиÑ.
* Ðолее пÑодвинÑÑÑе (но ÑÑÐ¾Ð»Ñ Ð¶Ðµ пÑоÑÑÑе) пÑиÑÐ¼Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ **глÑбоко вложеннÑÑ
JSON-моделей** (ÑпаÑибо Pydantic).
* ÐнÑегÑаÑÐ¸Ñ **GraphQL** Ñ Strawberry и дÑÑгими библиоÑеками.
@@ -524,7 +524,7 @@ FastAPI завиÑÐ¸Ñ Ð¾Ñ Pydantic и Starlette.
*
httpx â обÑзаÑелен, еÑли Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ `TestClient`.
* jinja2 â обÑзаÑелен, еÑли Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ñаблонов по ÑмолÑаниÑ.
-* python-multipart - обÑзаÑелен, еÑли Ð²Ñ Ñ
оÑиÑе поддеÑживаÑÑ Â«Ð¿Ð°ÑÑинг» ÑоÑм ÑеÑез `request.form()`.
+* python-multipart - обÑзаÑелен, еÑли Ð²Ñ Ñ
оÑиÑе поддеÑживаÑÑ Â«Ð¿Ð°ÑÑинг» ÑоÑм ÑеÑез `request.form()`.
ÐÑполÑзÑеÑÑÑ FastAPI:
diff --git a/docs/ru/docs/project-generation.md b/docs/ru/docs/project-generation.md
index dbedf76fe3..8155457e38 100644
--- a/docs/ru/docs/project-generation.md
+++ b/docs/ru/docs/project-generation.md
@@ -18,7 +18,7 @@
- ð¤ ÐвÑомаÑиÑеÑки ÑгенеÑиÑованнÑй ÑÑонÑендâклиенÑ.
- 𧪠[Playwright](https://playwright.dev) Ð´Ð»Ñ EndâtoâEnd ÑеÑÑиÑованиÑ.
- ð¦ ÐоддеÑжка ÑÑмной ÑемÑ.
-- ð [Docker Compose](https://www.docker.com) Ð´Ð»Ñ ÑазÑабоÑки и пÑодакÑна.
+- ð [Docker Compose](https://www.docker.com) Ð´Ð»Ñ ÑазÑабоÑки и пÑодакÑн.
- ð ÐезопаÑное Ñ
ÑÑиÑование паÑолей по ÑмолÑаниÑ.
- ð ÐÑÑенÑиÑикаÑÐ¸Ñ Ð¿Ð¾ JWTâÑокенам.
- ð« ÐоÑÑÑановление паÑÐ¾Ð»Ñ Ð¿Ð¾ ÑлекÑÑонной поÑÑе.
diff --git a/docs/ru/docs/python-types.md b/docs/ru/docs/python-types.md
index ae4a1e2b79..95153c3882 100644
--- a/docs/ru/docs/python-types.md
+++ b/docs/ru/docs/python-types.md
@@ -2,7 +2,7 @@
Python поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑе «подÑказки Ñипов» (иÑ
Ñакже назÑваÑÑ Â«Ð°Ð½Ð½Ð¾ÑаÑиÑми Ñипов»).
-ÐÑи **«подÑказки Ñипов»** или анноÑаÑии â ÑÑо ÑпеÑиалÑнÑй ÑинÑакÑиÑ, позволÑÑÑий обÑÑвлÑÑÑ Ñип пеÑеменной.
+ÐÑи **«подÑказки Ñипов»** или анноÑаÑии â ÑÑо ÑпеÑиалÑнÑй ÑинÑакÑиÑ, позволÑÑÑий обÑÑвлÑÑÑ Ñип пеÑеменной.
ÐбÑÑвлÑÑ ÑÐ¸Ð¿Ñ Ð´Ð»Ñ Ð²Ð°ÑиÑ
пеÑеменнÑÑ
, ÑедакÑоÑÑ ÐºÐ¾Ð´Ð° и инÑÑÑÑменÑÑ ÑмогÑÑ Ð»ÑÑÑе Ð²Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ.
@@ -22,7 +22,7 @@ Python поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑе «подÑказк
ÐавайÑе наÑнем Ñ Ð¿ÑоÑÑого пÑимеÑа:
-{* ../../docs_src/python_types/tutorial001_py39.py *}
+{* ../../docs_src/python_types/tutorial001_py310.py *}
ÐÑзов ÑÑой пÑогÑÐ°Ð¼Ð¼Ñ Ð²ÑводиÑ:
@@ -34,9 +34,9 @@ John Doe
* ÐÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ `first_name` и `last_name`.
* ÐÑеобÑазÑÐµÑ Ð¿ÐµÑвÑÑ Ð±ÑÐºÐ²Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ знаÑÐµÐ½Ð¸Ñ Ð² веÑÑ
ний ÑегиÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `title()`.
-* СоединÑÐµÑ Ð¸Ñ
пÑобелом поÑеÑедине.
+* СоединÑÐµÑ Ð¸Ñ
пÑобелом поÑеÑедине.
-{* ../../docs_src/python_types/tutorial001_py39.py hl[2] *}
+{* ../../docs_src/python_types/tutorial001_py310.py hl[2] *}
### ÐÑÑедакÑиÑÑем пÑÐ¸Ð¼ÐµÑ { #edit-it }
@@ -78,7 +78,7 @@ John Doe
ÐÑо и еÑÑÑ Â«Ð¿Ð¾Ð´Ñказки Ñипов»:
-{* ../../docs_src/python_types/tutorial002_py39.py hl[1] *}
+{* ../../docs_src/python_types/tutorial002_py310.py hl[1] *}
ÐÑо не Ñо же Ñамое, ÑÑо обÑÑвление знаÑений по ÑмолÑаниÑ, как, напÑимеÑ:
@@ -106,7 +106,7 @@ John Doe
ÐоÑмоÑÑиÑе на ÑÑÑ ÑÑнкÑÐ¸Ñ â Ñ Ð½ÐµÑ Ñже еÑÑÑ Ð¿Ð¾Ð´Ñказки Ñипов:
-{* ../../docs_src/python_types/tutorial003_py39.py hl[1] *}
+{* ../../docs_src/python_types/tutorial003_py310.py hl[1] *}
Так как ÑедакÑÐ¾Ñ ÐºÐ¾Ð´Ð° Ð·Ð½Ð°ÐµÑ ÑÐ¸Ð¿Ñ Ð¿ÐµÑеменнÑÑ
, Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе не ÑолÑко авÑозавеÑÑение, но и пÑовеÑки оÑибок:
@@ -114,7 +114,7 @@ John Doe
ТепеÑÑ Ð²Ñ Ð·Ð½Ð°ÐµÑе, ÑÑо нÑжно иÑпÑавиÑÑ â пÑеобÑазоваÑÑ `age` в ÑÑÑÐ¾ÐºÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `str(age)`:
-{* ../../docs_src/python_types/tutorial004_py39.py hl[2] *}
+{* ../../docs_src/python_types/tutorial004_py310.py hl[2] *}
## ÐбÑÑвление Ñипов { #declaring-types }
@@ -133,29 +133,32 @@ John Doe
* `bool`
* `bytes`
-{* ../../docs_src/python_types/tutorial005_py39.py hl[1] *}
+{* ../../docs_src/python_types/tutorial005_py310.py hl[1] *}
-### Generic-ÑÐ¸Ð¿Ñ Ñ Ð¿Ð°ÑамеÑÑами Ñипов { #generic-types-with-type-parameters }
+### ÐодÑÐ»Ñ `typing` { #typing-module }
-ÐÑÑÑ ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ
, коÑоÑÑе могÑÑ ÑодеÑжаÑÑ Ð´ÑÑгие знаÑениÑ, напÑимеÑ, `dict`, `list`, `set` и `tuple`. РвнÑÑÑенние знаÑÐµÐ½Ð¸Ñ Ñоже могÑÑ Ð¸Ð¼ÐµÑÑ Ñвой Ñип.
+ÐÐ»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
дополниÑелÑнÑÑ
ÑÑенаÑиев Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð¸Ð¼Ð¿Ð¾ÑÑиÑоваÑÑ ÑÑо-Ñо из ÑÑандаÑÑного модÑÐ»Ñ `typing`. ÐапÑимеÑ, когда Ð²Ñ Ñ
оÑиÑе обÑÑвиÑÑ, ÑÑо ÑÑо-Ñо Ð¸Ð¼ÐµÐµÑ Â«Ð»Ñбой Ñип», можно иÑполÑзоваÑÑ `Any` из `typing`:
-Такие ÑипÑ, коÑоÑÑе ÑодеÑÐ¶Ð°Ñ Ð²Ð½ÑÑÑенние ÑипÑ, назÑваÑÑ Â«**generic**»-Ñипами. РиÑ
можно обÑÑвлÑÑÑ, в Ñом ÑиÑле Ñ Ñказанием внÑÑÑенниÑ
Ñипов.
+```python
+from typing import Any
-ЧÑÐ¾Ð±Ñ Ð¾Ð±ÑÑвлÑÑÑ ÑÑи ÑÐ¸Ð¿Ñ Ð¸ иÑ
внÑÑÑенние ÑипÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑÑандаÑÑнÑй модÑÐ»Ñ Python `typing`. Ðн ÑÑÑеÑÑвÑÐµÑ ÑпеÑиалÑно Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки подÑказок Ñипов.
-#### ÐовÑе веÑÑии Python { #newer-versions-of-python }
-
-СинÑакÑÐ¸Ñ Ñ Ð¸ÑполÑзованием `typing` **ÑовмеÑÑим** Ñо вÑеми веÑÑиÑми, Ð¾Ñ Python 3.6 до ÑамÑÑ
новÑÑ
, вклÑÑÐ°Ñ Python 3.9, Python 3.10 и Ñ.д.
+def some_function(data: Any):
+ print(data)
+```
-Ðо меÑе ÑазвиÑÐ¸Ñ Python **новÑе веÑÑии** полÑÑаÑÑ ÑлÑÑÑеннÑÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ ÑÑиÑ
анноÑаÑий Ñипов, и во многиÑ
ÑлÑÑаÑÑ
вам даже не нÑжно импоÑÑиÑоваÑÑ Ð¸ иÑполÑзоваÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ `typing`, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÑÑвлÑÑÑ Ð°Ð½Ð½Ð¾ÑаÑии Ñипов.
+### Generic-ÑÐ¸Ð¿Ñ { #generic-types }
-ÐÑли Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑбÑаÑÑ Ð±Ð¾Ð»ÐµÐµ ÑвежÑÑ Ð²ÐµÑÑÐ¸Ñ Python Ð´Ð»Ñ Ð¿ÑоекÑа, Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе дополниÑелÑнÑÑ Ð¿ÑоÑÑоÑÑ.
+ÐекоÑоÑÑе ÑÐ¸Ð¿Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑинимаÑÑ Â«Ð¿Ð°ÑамеÑÑÑ Ñипов» в квадÑаÑнÑÑ
ÑкобкаÑ
, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ Ð¸Ñ
внÑÑÑенние ÑипÑ. ÐапÑимеÑ, «ÑпиÑок ÑÑÑок» обÑÑвлÑеÑÑÑ ÐºÐ°Ðº `list[str]`.
-Ðо вÑей докÑменÑаÑии еÑÑÑ Ð¿ÑимеÑÑ, ÑовмеÑÑимÑе Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ веÑÑией Python (когда еÑÑÑ ÑазлиÑиÑ).
+Такие ÑипÑ, коÑоÑÑе пÑинимаÑÑ Ð¿Ð°ÑамеÑÑÑ Ñипов, назÑваÑÑÑÑ **Generic-Ñипами** или **Generics**.
-ÐапÑимеÑ, «**Python 3.6+**» ознаÑÐ°ÐµÑ ÑовмеÑÑимоÑÑÑ Ñ Python 3.6 и вÑÑе (вклÑÑÐ°Ñ 3.7, 3.8, 3.9, 3.10 и Ñ.д.). Р«**Python 3.9+**» â ÑовмеÑÑимоÑÑÑ Ñ Python 3.9 и вÑÑе (вклÑÑÐ°Ñ 3.10 и Ñ.п.).
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ñе же вÑÑÑоеннÑе ÑÐ¸Ð¿Ñ ÐºÐ°Ðº generics (Ñ ÐºÐ²Ð°Ð´ÑаÑнÑми Ñкобками и Ñипами внÑÑÑи):
-ÐÑли Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ **поÑледние веÑÑии Python**, иÑполÑзÑйÑе пÑимеÑÑ Ð´Ð»Ñ Ñамой новой веÑÑии â Ñ Ð½Ð¸Ñ
бÑÐ´ÐµÑ **ÑамÑй лÑÑÑий и пÑоÑÑой ÑинÑакÑиÑ**, напÑимеÑ, «**Python 3.10+**».
+* `list`
+* `tuple`
+* `set`
+* `dict`
#### List { #list }
@@ -167,7 +170,7 @@ John Doe
Так как ÑпиÑок â ÑÑо Ñип, ÑодеÑжаÑий внÑÑÑенние ÑипÑ, ÑкажиÑе иÑ
в квадÑаÑнÑÑ
ÑкобкаÑ
:
-{* ../../docs_src/python_types/tutorial006_py39.py hl[1] *}
+{* ../../docs_src/python_types/tutorial006_py310.py hl[1] *}
/// info | ÐнÑоÑмаÑиÑ
@@ -193,7 +196,7 @@ John Doe
ÐналогиÑно Ð²Ñ Ð±Ñ Ð¾Ð±ÑÑвили `tuple` и `set`:
-{* ../../docs_src/python_types/tutorial007_py39.py hl[1] *}
+{* ../../docs_src/python_types/tutorial007_py310.py hl[1] *}
ÐÑо ознаÑаеÑ:
@@ -208,7 +211,7 @@ John Doe
ÐÑоÑой паÑамеÑÑ Ñипа â Ð´Ð»Ñ Ð·Ð½Ð°Ñений `dict`:
-{* ../../docs_src/python_types/tutorial008_py39.py hl[1] *}
+{* ../../docs_src/python_types/tutorial008_py310.py hl[1] *}
ÐÑо ознаÑаеÑ:
@@ -220,44 +223,20 @@ John Doe
ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ, ÑÑо пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ **одним из неÑколÑкиÑ
Ñипов**, напÑимеÑ, `int` или `str`.
-Ð Python 3.6 и вÑÑе (вклÑÑÐ°Ñ Python 3.10) Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ñип `Union` из `typing` и пеÑеÑиÑлиÑÑ Ð² квадÑаÑнÑÑ
ÑкобкаÑ
вÑе допÑÑÑимÑе ÑипÑ.
-
-Ð Python 3.10 Ñакже поÑвилÑÑ **новÑй ÑинÑакÑиÑ**, где допÑÑÑимÑе ÑÐ¸Ð¿Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑказаÑÑ ÑеÑез веÑÑикалÑнÑÑ ÑеÑÑÑ (`|`).
+ЧÑÐ¾Ð±Ñ ÑÑо опÑеделиÑÑ, иÑполÑзÑйÑе веÑÑикалÑнÑÑ ÑеÑÑÑ (`|`) Ð´Ð»Ñ ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾Ð±Ð¾Ð¸Ñ
Ñипов.
-//// tab | Python 3.10+
+ÐÑо назÑваеÑÑÑ Â«Ð¾Ð±Ñединение» (union), поÑÐ¾Ð¼Ñ ÑÑо пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñем Ñгодно из обÑÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑÑиÑ
двÑÑ
множеÑÑв Ñипов.
```Python hl_lines="1"
{!> ../../docs_src/python_types/tutorial008b_py310.py!}
```
-////
-
-//// tab | Python 3.9+
-
-```Python hl_lines="1 4"
-{!> ../../docs_src/python_types/tutorial008b_py39.py!}
-```
-
-////
-
-РобоиÑ
ÑлÑÑаÑÑ
ÑÑо ознаÑаеÑ, ÑÑо `item` Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ `int` или `str`.
+ÐÑо ознаÑаеÑ, ÑÑо `item` Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ `int` или `str`.
#### Ðозможно `None` { #possibly-none }
ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ, ÑÑо знаÑение Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð¾Ð¿ÑеделÑннÑй Ñип, напÑÐ¸Ð¼ÐµÑ `str`, но Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ `None`.
-Ð Python 3.6 и вÑÑе (вклÑÑÐ°Ñ Python 3.10) ÑÑо можно обÑÑвиÑÑ, импоÑÑиÑовав и иÑполÑзÑÑ `Optional` из модÑÐ»Ñ `typing`.
-
-```Python hl_lines="1 4"
-{!../../docs_src/python_types/tutorial009_py39.py!}
-```
-
-ÐÑполÑзование `Optional[str]` вмеÑÑо пÑоÑÑо `str` Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ ÑедакÑоÑÑ ÐºÐ¾Ð´Ð° помоÑÑ Ð²Ð°Ð¼ обнаÑÑжиÑÑ Ð¾Ñибки, когда Ð²Ñ Ð¿ÑедполагаеÑе, ÑÑо знаÑение вÑегда `str`, Ñ
оÑÑ Ð½Ð° Ñамом деле оно Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ `None`.
-
-`Optional[Something]` â ÑÑо на Ñамом деле ÑокÑаÑение Ð´Ð»Ñ `Union[Something, None]`, они ÑквиваленÑнÑ.
-
-ÐÑо Ñакже ознаÑаеÑ, ÑÑо в Python 3.10 Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `Something | None`:
-
//// tab | Python 3.10+
```Python hl_lines="1"
@@ -266,96 +245,7 @@ John Doe
////
-//// tab | Python 3.9+
-
-```Python hl_lines="1 4"
-{!> ../../docs_src/python_types/tutorial009_py39.py!}
-```
-
-////
-
-//// tab | Python 3.9+ алÑÑеÑнаÑивнÑй ваÑианÑ
-
-```Python hl_lines="1 4"
-{!> ../../docs_src/python_types/tutorial009b_py39.py!}
-```
-
-////
-
-#### ÐÑполÑзоваÑÑ `Union` или `Optional` { #using-union-or-optional }
-
-ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе веÑÑÐ¸Ñ Python ниже 3.10, Ð²Ð¾Ñ ÑÐ¾Ð²ÐµÑ Ñ Ð¼Ð¾ÐµÐ¹ веÑÑма **ÑÑбÑекÑивной** ÑоÑки зÑениÑ:
-
-* ð¨ ÐзбегайÑе иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ `Optional[SomeType]`
-* ÐмеÑÑо ÑÑого ⨠**иÑполÑзÑйÑе `Union[SomeType, None]`** â¨.
-
-Ðба ваÑианÑа ÑквиваленÑÐ½Ñ Ð¸ внÑÑÑи одинаковÑ, но Ñ Ð±Ñ Ñекомендовал `Union` вмеÑÑо `Optional`, поÑÐ¾Ð¼Ñ ÑÑо Ñлово «**optional**» («необÑзаÑелÑнÑй») Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°Ð²ÐµÑÑи на мÑÑлÑ, ÑÑо знаÑение необÑзаÑелÑное, Ñ
оÑÑ Ð½Ð° Ñамом деле оно ознаÑÐ°ÐµÑ Â«Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ `None`», даже еÑли паÑамеÑÑ Ð½Ðµ ÑвлÑеÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑм и вÑÑ ÐµÑÑ Ð¾Ð±ÑзаÑелен.
-
-Ðне кажеÑÑÑ, `Union[SomeType, None]` более Ñвно вÑÑÐ°Ð¶Ð°ÐµÑ ÑмÑÑл.
-
-РеÑÑ ÑолÑко о ÑловаÑ
и названиÑÑ
. Ðо ÑÑи Ñлова могÑÑ Ð²Ð»Ð¸ÑÑÑ Ð½Ð° Ñо, как Ð²Ñ Ð¸ ваÑи коллеги дÑмаеÑе о коде.
-
-РкаÑеÑÑве пÑимеÑа возÑмÑм ÑÑÑ ÑÑнкÑиÑ:
-
-{* ../../docs_src/python_types/tutorial009c_py39.py hl[1,4] *}
-
-ÐаÑамеÑÑ `name` опÑеделÑн как `Optional[str]`, но он **не необÑзаÑелÑнÑй** â Ð²Ñ Ð½Ðµ можеÑе вÑзваÑÑ ÑÑнкÑÐ¸Ñ Ð±ÐµÐ· ÑÑого паÑамеÑÑа:
-
-```Python
-say_hi() # РнеÑ, ÑÑо вÑзÑÐ²Ð°ÐµÑ Ð¾ÑибкÑ! ð±
-```
-
-ÐаÑамеÑÑ `name` вÑÑ ÐµÑÑ **обÑзаÑелен** (не *optional*), поÑÐ¾Ð¼Ñ ÑÑо Ñ Ð½ÐµÐ³Ð¾ Ð½ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ. ÐÑи ÑÑом `name` пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ `None` как знаÑение:
-
-```Python
-say_hi(name=None) # ÐÑо ÑабоÑаеÑ, None допÑÑÑим ð
-```
-
-ХоÑоÑÐ°Ñ Ð½Ð¾Ð²Ð¾ÑÑÑ: как ÑолÑко Ð²Ñ Ð¿ÐµÑейдÑÑе на Python 3.10, об ÑÑом можно не пеÑеживаÑÑ â Ð²Ñ ÑможеÑе пÑоÑÑо иÑполÑзоваÑÑ `|` Ð´Ð»Ñ Ð¾Ð±ÑÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñипов:
-
-{* ../../docs_src/python_types/tutorial009c_py310.py hl[1,4] *}
-
-Ð Ñогда вам не пÑидÑÑÑÑ Ð·Ð°Ð´ÑмÑваÑÑÑÑ Ð¾ названиÑÑ
вÑоде `Optional` и `Union`. ð
-
-#### Generic-ÑÐ¸Ð¿Ñ { #generic-types }
-
-ТипÑ, коÑоÑÑе пÑинимаÑÑ Ð¿Ð°ÑамеÑÑÑ Ñипов в квадÑаÑнÑÑ
ÑкобкаÑ
, назÑваÑÑÑÑ **Generic-Ñипами** или **Generics**, напÑимеÑ:
-
-//// tab | Python 3.10+
-
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ñе же вÑÑÑоеннÑе ÑÐ¸Ð¿Ñ ÐºÐ°Ðº generics (Ñ ÐºÐ²Ð°Ð´ÑаÑнÑми Ñкобками и Ñипами внÑÑÑи):
-
-* `list`
-* `tuple`
-* `set`
-* `dict`
-
-Ð, как и в пÑедÑдÑÑиÑ
веÑÑиÑÑ
Python, из модÑÐ»Ñ `typing`:
-
-* `Union`
-* `Optional`
-* ...и дÑÑгие.
-
-Ð Python 3.10, как алÑÑеÑнаÑÐ¸Ð²Ñ generics `Union` и `Optional`, можно иÑполÑзоваÑÑ Ð²ÐµÑÑикалÑнÑÑ ÑеÑÑÑ (`|`) Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ñединений Ñипов â ÑÑо гоÑаздо лÑÑÑе и пÑоÑе.
-
-////
-
-//// tab | Python 3.9+
-
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ñе же вÑÑÑоеннÑе ÑÐ¸Ð¿Ñ ÐºÐ°Ðº generics (Ñ ÐºÐ²Ð°Ð´ÑаÑнÑми Ñкобками и Ñипами внÑÑÑи):
-
-* `list`
-* `tuple`
-* `set`
-* `dict`
-
-Ð generics из модÑÐ»Ñ `typing`:
-
-* `Union`
-* `Optional`
-* ...и дÑÑгие.
-
-////
+ÐÑполÑзование `str | None` вмеÑÑо пÑоÑÑо `str` Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ ÑедакÑоÑÑ ÐºÐ¾Ð´Ð° помоÑÑ Ð²Ð°Ð¼ обнаÑÑжиÑÑ Ð¾Ñибки, когда Ð²Ñ Ð¿ÑедполагаеÑе, ÑÑо знаÑение вÑегда `str`, Ñ
оÑÑ Ð½Ð° Ñамом деле оно Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ `None`.
### ÐлаÑÑÑ ÐºÐ°Ðº ÑÐ¸Ð¿Ñ { #classes-as-types }
@@ -363,11 +253,11 @@ say_hi(name=None) # ÐÑо ÑабоÑаеÑ, None допÑÑÑим ð
ÐопÑÑÑим, Ñ Ð²Ð°Ñ ÐµÑÑÑ ÐºÐ»Ð°ÑÑ `Person` Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼:
-{* ../../docs_src/python_types/tutorial010_py39.py hl[1:3] *}
+{* ../../docs_src/python_types/tutorial010_py310.py hl[1:3] *}
Тогда Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¿ÐµÑеменнÑÑ Ñипа `Person`:
-{* ../../docs_src/python_types/tutorial010_py39.py hl[6] *}
+{* ../../docs_src/python_types/tutorial010_py310.py hl[6] *}
Ð Ñнова Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе полнÑÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ ÑедакÑоÑа кода:
@@ -401,21 +291,15 @@ say_hi(name=None) # ÐÑо ÑабоÑаеÑ, None допÑÑÑим ð
**FastAPI** Ñеликом оÑнован на Pydantic.
-ÐÑ ÑвидиÑе намного болÑÑе вÑего ÑÑого на пÑакÑике в [Ð ÑководÑÑве полÑзоваÑелÑ](tutorial/index.md){.internal-link target=_blank}.
-
-/// tip | СовеÑ
-
-У Pydantic еÑÑÑ Ð¾Ñобое поведение, когда Ð²Ñ Ð¸ÑполÑзÑеÑе `Optional` или `Union[Something, None]` без знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ. ÐодÑобнее ÑиÑайÑе в докÑменÑаÑии Pydantic: Required Optional fields.
-
-///
+ÐÑ ÑвидиÑе намного болÑÑе вÑего ÑÑого на пÑакÑике в [УÑебник - Ð ÑководÑÑво полÑзоваÑелÑ](tutorial/index.md){.internal-link target=_blank}.
## ÐодÑказки Ñипов Ñ Ð°Ð½Ð½Ð¾ÑаÑиÑми меÑаданнÑÑ
{ #type-hints-with-metadata-annotations }
-Ð Python Ñакже еÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ **дополниÑелÑнÑе меÑаданнÑе** к подÑказкам Ñипов Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `Annotated`.
+Ð Python Ñакже еÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ **дополниÑелÑнÑе меÑаданнÑе** к подÑказкам Ñипов Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `Annotated`.
-ÐаÑÐ¸Ð½Ð°Ñ Ñ Python 3.9, `Annotated` вÑ
Ð¾Ð´Ð¸Ñ Ð² ÑÑандаÑÑнÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑекÑ, поÑÑÐ¾Ð¼Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе импоÑÑиÑоваÑÑ ÐµÐ³Ð¾ из `typing`.
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе импоÑÑиÑоваÑÑ `Annotated` из `typing`.
-{* ../../docs_src/python_types/tutorial013_py39.py hl[1,4] *}
+{* ../../docs_src/python_types/tutorial013_py310.py hl[1,4] *}
Сам Python ниÑего не Ð´ÐµÐ»Ð°ÐµÑ Ñ `Annotated`. Ð Ð´Ð»Ñ ÑедакÑоÑов кода и дÑÑгиÑ
инÑÑÑÑменÑов Ñип по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ `str`.
@@ -453,7 +337,7 @@ say_hi(name=None) # ÐÑо ÑабоÑаеÑ, None допÑÑÑим ð
* **ÐокÑменÑиÑованиÑ** API Ñ Ð¸ÑполÑзованием OpenAPI:
* ÑÑо заÑем иÑполÑзÑеÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкими инÑеÑÑейÑами авÑомаÑиÑеÑкой инÑеÑакÑивной докÑменÑаÑии.
-ÐÑÑ ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð·Ð²ÑÑаÑÑ Ð°Ð±ÑÑÑакÑно. Ðе волнÑйÑеÑÑ. ÐÑ ÑвидиÑе вÑÑ ÑÑо в дейÑÑвии в [Ð ÑководÑÑве полÑзоваÑелÑ](tutorial/index.md){.internal-link target=_blank}.
+ÐÑÑ ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð·Ð²ÑÑаÑÑ Ð°Ð±ÑÑÑакÑно. Ðе волнÑйÑеÑÑ. ÐÑ ÑвидиÑе вÑÑ ÑÑо в дейÑÑвии в [УÑебник - Ð ÑководÑÑво полÑзоваÑелÑ](tutorial/index.md){.internal-link target=_blank}.
Ðажно Ñо, ÑÑо, иÑполÑзÑÑ ÑÑандаÑÑнÑе ÑÐ¸Ð¿Ñ Python в одном меÑÑе (вмеÑÑо Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ
клаÑÑов, декоÑаÑоÑов и Ñ.д.), **FastAPI** ÑÐ´ÐµÐ»Ð°ÐµÑ Ð·Ð° Ð²Ð°Ñ Ð±Ð¾Ð»ÑÑÑÑ ÑаÑÑÑ ÑабоÑÑ.
diff --git a/docs/ru/docs/tutorial/background-tasks.md b/docs/ru/docs/tutorial/background-tasks.md
index 8d7b7442f9..9fa7a85029 100644
--- a/docs/ru/docs/tutorial/background-tasks.md
+++ b/docs/ru/docs/tutorial/background-tasks.md
@@ -15,7 +15,7 @@
СнаÑала импоÑÑиÑÑйÑе `BackgroundTasks` и обÑÑвиÑе паÑамеÑÑ Ð² ваÑей ÑÑнкÑииâобÑабоÑÑике пÑÑи Ñ Ñипом `BackgroundTasks`:
-{* ../../docs_src/background_tasks/tutorial001_py39.py hl[1,13] *}
+{* ../../docs_src/background_tasks/tutorial001_py310.py hl[1,13] *}
**FastAPI** ÑоздаÑÑ Ð¾Ð±ÑÐµÐºÑ Ñипа `BackgroundTasks` Ð´Ð»Ñ Ð²Ð°Ñ Ð¸ пеÑедаÑÑ ÐµÐ³Ð¾ ÑеÑез ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ.
@@ -31,13 +31,13 @@
Так как опеÑаÑÐ¸Ñ Ð·Ð°Ð¿Ð¸Ñи не иÑполÑзÑÐµÑ `async` и `await`, Ð¼Ñ Ð¾Ð¿Ñеделим ÑÑнкÑÐ¸Ñ ÐºÐ°Ðº обÑÑнÑÑ `def`:
-{* ../../docs_src/background_tasks/tutorial001_py39.py hl[6:9] *}
+{* ../../docs_src/background_tasks/tutorial001_py310.py hl[6:9] *}
## Ðобавление Ñоновой задаÑи { #add-the-background-task }
ÐнÑÑÑи ваÑей ÑÑнкÑииâобÑабоÑÑика пÑÑи пеÑедайÑе ÑÑнкÑÐ¸Ñ Ð·Ð°Ð´Ð°Ñи обÑекÑÑ ÑоновÑÑ
Ð·Ð°Ð´Ð°Ñ Ð¼ÐµÑодом `.add_task()`:
-{* ../../docs_src/background_tasks/tutorial001_py39.py hl[14] *}
+{* ../../docs_src/background_tasks/tutorial001_py310.py hl[14] *}
`.add_task()` пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑледÑÑÑие аÑгÑменÑÑ:
@@ -47,7 +47,7 @@
## ÐÑÑÑаивание завиÑимоÑÑей { #dependency-injection }
-ÐÑполÑзование `BackgroundTasks` Ñакже ÑабоÑÐ°ÐµÑ Ñ ÑиÑÑемой вÑÑÑÐ°Ð¸Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа `BackgroundTasks` на неÑколÑкиÑ
ÑÑовнÑÑ
: в ÑÑнкÑииâобÑабоÑÑике пÑÑи, в завиÑимоÑÑи (dependable), в подзавиÑимоÑÑи и Ñ. д.
+ÐÑполÑзование `BackgroundTasks` Ñакже ÑабоÑÐ°ÐµÑ Ñ ÑиÑÑемой вÑÑÑÐ°Ð¸Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа `BackgroundTasks` на неÑколÑкиÑ
ÑÑовнÑÑ
: в ÑÑнкÑииâобÑабоÑÑике пÑÑи, в завиÑимоÑÑи (dependable), в подзавиÑимоÑÑи и Ñ.д.
**FastAPI** знаеÑ, ÑÑо делаÑÑ Ð² каждом ÑлÑÑае и как пеÑеиÑполÑзоваÑÑ Ð¾Ð´Ð¸Ð½ и ÑÐ¾Ñ Ð¶Ðµ обÑекÑ, Ñак ÑÑÐ¾Ð±Ñ Ð²Ñе ÑоновÑе задаÑи бÑли обÑÐµÐ´Ð¸Ð½ÐµÐ½Ñ Ð¸ заÑем вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ Ð² Ñоне:
@@ -73,7 +73,7 @@
## ÐÑедоÑÑеÑежение { #caveat }
-ÐÑли вам нÑжно вÑполнÑÑÑ ÑÑжелÑе вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð² Ñоне, и пÑи ÑÑом они не обÑзаÑелÑно Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ñем же пÑоÑеÑÑом (напÑимеÑ, вам не нÑжно делиÑÑÑÑ Ð¿Ð°Ð¼ÑÑÑÑ, пеÑеменнÑми и Ñ. п.), вам могÑÑ Ð¿Ð¾Ð´Ð¾Ð¹Ñи более моÑнÑе инÑÑÑÑменÑÑ, Ñакие как Celery.
+ÐÑли вам нÑжно вÑполнÑÑÑ ÑÑжелÑе вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð² Ñоне, и пÑи ÑÑом они не обÑзаÑелÑно Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ñем же пÑоÑеÑÑом (напÑимеÑ, вам не нÑжно делиÑÑÑÑ Ð¿Ð°Ð¼ÑÑÑÑ, пеÑеменнÑми и Ñ.п.), вам могÑÑ Ð¿Ð¾Ð´Ð¾Ð¹Ñи более моÑнÑе инÑÑÑÑменÑÑ, Ñакие как Celery.
Ðни обÑÑно ÑÑебÑÑÑ Ð±Ð¾Ð»ÐµÐµ Ñложной конÑигÑÑаÑии, менеджеÑа оÑеÑеди ÑообÑений/заданий (напÑимеÑ, RabbitMQ или Redis), но позволÑÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ ÑоновÑе задаÑи в неÑколÑкиÑ
пÑоÑеÑÑаÑ
и, ÑÑо оÑобенно важно, на неÑколÑкиÑ
ÑеÑвеÑаÑ
.
diff --git a/docs/ru/docs/tutorial/bigger-applications.md b/docs/ru/docs/tutorial/bigger-applications.md
index 76304523c9..3fb36d5a22 100644
--- a/docs/ru/docs/tutorial/bigger-applications.md
+++ b/docs/ru/docs/tutorial/bigger-applications.md
@@ -85,7 +85,7 @@ from app.routers import items
ТоÑно Ñак же, как и в ÑлÑÑае Ñ ÐºÐ»Ð°ÑÑом `FastAPI`, вам нÑжно импоÑÑиÑоваÑÑ Ð¸ ÑоздаÑÑ ÐµÐ³Ð¾ «ÑкземплÑÑ»:
-{* ../../docs_src/bigger_applications/app_an_py39/routers/users.py hl[1,3] title["app/routers/users.py"] *}
+{* ../../docs_src/bigger_applications/app_an_py310/routers/users.py hl[1,3] title["app/routers/users.py"] *}
### *ÐпеÑаÑии пÑÑи* Ñ `APIRouter` { #path-operations-with-apirouter }
@@ -93,7 +93,7 @@ from app.routers import items
ÐÑполÑзÑйÑе его Ñак же, как Ð²Ñ Ð¸ÑполÑзовали Ð±Ñ ÐºÐ»Ð°ÑÑ `FastAPI`:
-{* ../../docs_src/bigger_applications/app_an_py39/routers/users.py hl[6,11,16] title["app/routers/users.py"] *}
+{* ../../docs_src/bigger_applications/app_an_py310/routers/users.py hl[6,11,16] title["app/routers/users.py"] *}
ÐÑ Ð¼Ð¾Ð¶ÐµÑе дÑмаÑÑ Ð¾Ð± `APIRouter` как об «мини-клаÑÑе `FastAPI`».
@@ -117,7 +117,7 @@ from app.routers import items
ТепеÑÑ Ð¼Ñ Ð²Ð¾ÑполÑзÑемÑÑ Ð¿ÑоÑÑой завиÑимоÑÑÑÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑоÑиÑаÑÑ ÐºÐ°ÑÑомнÑй HTTP-заголовок `X-Token`:
-{* ../../docs_src/bigger_applications/app_an_py39/dependencies.py hl[3,6:8] title["app/dependencies.py"] *}
+{* ../../docs_src/bigger_applications/app_an_py310/dependencies.py hl[3,6:8] title["app/dependencies.py"] *}
/// tip | ÐодÑказка
@@ -149,7 +149,7 @@ from app.routers import items
Таким обÑазом, вмеÑÑо Ñого ÑÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð²ÑÑ ÑÑо в каждÑÑ *опеÑаÑÐ¸Ñ Ð¿ÑÑи*, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ добавиÑÑ ÑÑо в `APIRouter`.
-{* ../../docs_src/bigger_applications/app_an_py39/routers/items.py hl[5:10,16,21] title["app/routers/items.py"] *}
+{* ../../docs_src/bigger_applications/app_an_py310/routers/items.py hl[5:10,16,21] title["app/routers/items.py"] *}
Так как пÑÑÑ ÐºÐ°Ð¶Ð´Ð¾Ð¹ *опеÑаÑии пÑÑи* должен наÑинаÑÑÑÑ Ñ `/`, как здеÑÑ:
@@ -208,7 +208,7 @@ async def read_item(item_id: str):
ÐоÑÑÐ¾Ð¼Ñ Ð¼Ñ Ð¸ÑполÑзÑем оÑноÑиÑелÑнÑй импоÑÑ Ñ `..` Ð´Ð»Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей:
-{* ../../docs_src/bigger_applications/app_an_py39/routers/items.py hl[3] title["app/routers/items.py"] *}
+{* ../../docs_src/bigger_applications/app_an_py310/routers/items.py hl[3] title["app/routers/items.py"] *}
#### Ðак ÑабоÑÐ°ÐµÑ Ð¾ÑноÑиÑелÑнÑй импоÑÑ { #how-relative-imports-work }
@@ -279,7 +279,7 @@ from ...dependencies import get_token_header
Ðо Ð¼Ñ Ð²ÑÑ Ñавно можем добавиÑÑ _еÑÑ_ `tags`, коÑоÑÑе бÑдÑÑ Ð¿ÑименÑÑÑÑÑ Ðº конкÑеÑной *опеÑаÑии пÑÑи*, а Ñакже дополниÑелÑнÑе `responses`, ÑпеÑиÑиÑнÑе Ð´Ð»Ñ ÑÑой *опеÑаÑии пÑÑи*:
-{* ../../docs_src/bigger_applications/app_an_py39/routers/items.py hl[30:31] title["app/routers/items.py"] *}
+{* ../../docs_src/bigger_applications/app_an_py310/routers/items.py hl[30:31] title["app/routers/items.py"] *}
/// tip | ÐодÑказка
@@ -305,13 +305,13 @@ from ...dependencies import get_token_header
Ð Ð¼Ñ Ð´Ð°Ð¶Ðµ можем обÑÑвиÑÑ [глобалÑнÑе завиÑимоÑÑи](dependencies/global-dependencies.md){.internal-link target=_blank}, коÑоÑÑе бÑдÑÑ Ð¾Ð±ÑÐµÐ´Ð¸Ð½ÐµÐ½Ñ Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑми Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ `APIRouter`:
-{* ../../docs_src/bigger_applications/app_an_py39/main.py hl[1,3,7] title["app/main.py"] *}
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[1,3,7] title["app/main.py"] *}
### ÐмпоÑÑ `APIRouter` { #import-the-apirouter }
ТепеÑÑ Ð¼Ñ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑем дÑÑгие подмодÑли, ÑодеÑжаÑие `APIRouter`:
-{* ../../docs_src/bigger_applications/app_an_py39/main.py hl[4:5] title["app/main.py"] *}
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[4:5] title["app/main.py"] *}
Так как ÑÐ°Ð¹Ð»Ñ `app/routers/users.py` и `app/routers/items.py` ÑвлÑÑÑÑÑ Ð¿Ð¾Ð´Ð¼Ð¾Ð´ÑлÑми, вÑ
одÑÑими в один и ÑÐ¾Ñ Ð¶Ðµ Python-Ð¿Ð°ÐºÐµÑ `app`, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ Ð¾Ð´Ð½Ñ ÑоÑÐºÑ `.` Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾ÑÑа ÑеÑез «оÑноÑиÑелÑнÑе импоÑÑÑ».
@@ -374,13 +374,13 @@ from .routers.users import router
ÐоÑÑомÑ, ÑÑÐ¾Ð±Ñ Ð¸Ð¼ÐµÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¸ÑполÑзоваÑÑ Ð¾Ð±Ðµ в одном Ñайле, Ð¼Ñ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑем подмодÑли напÑÑмÑÑ:
-{* ../../docs_src/bigger_applications/app_an_py39/main.py hl[5] title["app/main.py"] *}
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[5] title["app/main.py"] *}
### ÐодклÑÑение `APIRouter` Ð´Ð»Ñ `users` и `items` { #include-the-apirouters-for-users-and-items }
ТепеÑÑ Ð´Ð°Ð²Ð°Ð¹Ñе подклÑÑим `router` из подмодÑлей `users` и `items`:
-{* ../../docs_src/bigger_applications/app_an_py39/main.py hl[10:11] title["app/main.py"] *}
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[10:11] title["app/main.py"] *}
/// info | ÐÑимеÑание
@@ -420,13 +420,13 @@ from .routers.users import router
ÐÐ»Ñ ÑÑого пÑимеÑа вÑÑ Ð±ÑÐ´ÐµÑ Ð¾ÑÐµÐ½Ñ Ð¿ÑоÑÑо. Ðо допÑÑÑим, ÑÑо поÑколÑÐºÑ Ð¾Ð½ иÑполÑзÑеÑÑÑ ÑовмеÑÑно Ñ Ð´ÑÑгими пÑоекÑами в оÑганизаÑии, Ð¼Ñ Ð½Ðµ можем модиÑиÑиÑоваÑÑ ÐµÐ³Ð¾ и добавиÑÑ `prefix`, `dependencies`, `tags` и Ñ.д. непоÑÑедÑÑвенно в `APIRouter`:
-{* ../../docs_src/bigger_applications/app_an_py39/internal/admin.py hl[3] title["app/internal/admin.py"] *}
+{* ../../docs_src/bigger_applications/app_an_py310/internal/admin.py hl[3] title["app/internal/admin.py"] *}
Ðо Ð¼Ñ Ð²ÑÑ Ñавно Ñ
оÑим задаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий `prefix` пÑи подклÑÑении `APIRouter`, ÑÑÐ¾Ð±Ñ Ð²Ñе его *опеÑаÑии пÑÑи* наÑиналиÑÑ Ñ `/admin`, Ñ
оÑим заÑиÑиÑÑ ÐµÐ³Ð¾ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `dependencies`, коÑоÑÑе Ñ Ð½Ð°Ñ Ñже еÑÑÑ Ð´Ð»Ñ ÑÑого пÑоекÑа, и Ñ
оÑим вклÑÑиÑÑ `tags` и `responses`.
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ обÑÑвиÑÑ Ð²ÑÑ ÑÑо, не изменÑÑ Ð¸ÑÑ
однÑй `APIRouter`, пеÑедав ÑÑи паÑамеÑÑÑ Ð² `app.include_router()`:
-{* ../../docs_src/bigger_applications/app_an_py39/main.py hl[14:17] title["app/main.py"] *}
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[14:17] title["app/main.py"] *}
Таким обÑазом иÑÑ
однÑй `APIRouter` не бÑÐ´ÐµÑ Ð¼Ð¾Ð´Ð¸ÑиÑиÑован, и Ð¼Ñ Ñможем иÑполÑзоваÑÑ Ñайл `app/internal/admin.py` ÑÑÐ°Ð·Ñ Ð² неÑколÑкиÑ
пÑоекÑаÑ
оÑганизаÑии.
@@ -447,7 +447,7 @@ from .routers.users import router
ÐдеÑÑ Ð¼Ñ Ð´ÐµÐ»Ð°ÐµÐ¼ ÑÑо... пÑоÑÑо ÑÑÐ¾Ð±Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑ, ÑÑо можем ð¤·:
-{* ../../docs_src/bigger_applications/app_an_py39/main.py hl[21:23] title["app/main.py"] *}
+{* ../../docs_src/bigger_applications/app_an_py310/main.py hl[21:23] title["app/main.py"] *}
и ÑÑо бÑÐ´ÐµÑ ÑабоÑаÑÑ ÐºÐ¾ÑÑекÑно вмеÑÑе Ñо вÑеми дÑÑгими *опеÑаÑиÑми пÑÑи*, добавленнÑми ÑеÑез `app.include_router()`.
diff --git a/docs/ru/docs/tutorial/body-multiple-params.md b/docs/ru/docs/tutorial/body-multiple-params.md
index 9d94004947..ddd9c6fdd9 100644
--- a/docs/ru/docs/tutorial/body-multiple-params.md
+++ b/docs/ru/docs/tutorial/body-multiple-params.md
@@ -52,7 +52,7 @@
}
```
-/// note | Ðнимание
+/// note | ÐамеÑка
ÐбÑаÑиÑе внимание, ÑÑо Ñ
оÑÑ Ð¿Ð°ÑамеÑÑ `item` бÑл обÑÑвлен Ñаким же ÑпоÑобом, как и ÑанÑÑе, ÑепеÑÑ Ð¿ÑедполагаеÑÑÑ, ÑÑо он наÑ
одиÑÑÑ Ð²Ð½ÑÑÑи Ñела Ñ ÐºÐ»ÑÑом `item`.
@@ -104,12 +104,6 @@
q: str | None = None
```
-Ðли в Python 3.9:
-
-```Python
-q: Union[str, None] = None
-```
-
ÐапÑимеÑ:
{* ../../docs_src/body_multiple_params/tutorial004_an_py310.py hl[28] *}
diff --git a/docs/ru/docs/tutorial/body-nested-models.md b/docs/ru/docs/tutorial/body-nested-models.md
index 4c914b97f0..6610b209c2 100644
--- a/docs/ru/docs/tutorial/body-nested-models.md
+++ b/docs/ru/docs/tutorial/body-nested-models.md
@@ -163,7 +163,7 @@ images: list[Image]
напÑÐ¸Ð¼ÐµÑ Ñак:
-{* ../../docs_src/body_nested_models/tutorial008_py39.py hl[13] *}
+{* ../../docs_src/body_nested_models/tutorial008_py310.py hl[13] *}
## ÐоддеÑжка ÑедакÑоÑа кода везде { #editor-support-everywhere }
@@ -193,7 +193,7 @@ images: list[Image]
Ð ÑÑом ÑлÑÑае Ð²Ñ Ð¿ÑинимаеÑе лÑбой `dict`, пока Ñ Ð½ÐµÐ³Ð¾ еÑÑÑ ÐºÐ»ÑÑи Ñипа `int` Ñо знаÑениÑми Ñипа `float`:
-{* ../../docs_src/body_nested_models/tutorial009_py39.py hl[7] *}
+{* ../../docs_src/body_nested_models/tutorial009_py310.py hl[7] *}
/// tip | СовеÑ
diff --git a/docs/ru/docs/tutorial/body.md b/docs/ru/docs/tutorial/body.md
index 537d7ebc96..3e55607da5 100644
--- a/docs/ru/docs/tutorial/body.md
+++ b/docs/ru/docs/tutorial/body.md
@@ -72,7 +72,7 @@
* ÐÑоведÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
.
* ÐÑли даннÑе некоÑÑекÑнÑ, веÑнÑÑ Ð¿Ð¾Ð½ÑÑнÑÑ Ð¸ наглÑднÑÑ Ð¾ÑибкÑ, ÑказÑваÑÑÑÑ, где именно и ÑÑо бÑло некоÑÑекÑно.
* ÐеÑедаÑÑ Ð¿Ð¾Ð»ÑÑеннÑе даннÑе в паÑамеÑÑ `item`.
- * ÐоÑколÑÐºÑ Ð²Ð½ÑÑÑи ÑÑнкÑии Ð²Ñ Ð¾Ð±ÑÑвили его Ñ Ñипом `Item`, Ñ Ð²Ð°Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑжка Ñо ÑÑоÑÐ¾Ð½Ñ ÑедакÑоÑа кода (авÑозавеÑÑение и Ñ. п.) Ð´Ð»Ñ Ð²ÑеÑ
аÑÑибÑÑов и иÑ
Ñипов.
+ * ÐоÑколÑÐºÑ Ð²Ð½ÑÑÑи ÑÑнкÑии Ð²Ñ Ð¾Ð±ÑÑвили его Ñ Ñипом `Item`, Ñ Ð²Ð°Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑжка Ñо ÑÑоÑÐ¾Ð½Ñ ÑедакÑоÑа кода (авÑозавеÑÑение и Ñ.п.) Ð´Ð»Ñ Ð²ÑеÑ
аÑÑибÑÑов и иÑ
Ñипов.
* СгенеÑиÑÑÐµÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ JSON Schema Ð´Ð»Ñ Ð²Ð°Ñей модели; Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¸Ñ
и в дÑÑгиÑ
меÑÑаÑ
, еÑли ÑÑо Ð¸Ð¼ÐµÐµÑ ÑмÑÑл Ð´Ð»Ñ Ð²Ð°Ñего пÑоекÑа.
* ÐÑи ÑÑ
ÐµÐ¼Ñ Ð±ÑдÑÑ ÑаÑÑÑÑ ÑгенеÑиÑованной ÑÑ
ÐµÐ¼Ñ OpenAPI и бÑдÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑкой докÑменÑаÑией UIs.
@@ -148,14 +148,14 @@ JSON Schema ваÑиÑ
моделей бÑÐ´ÐµÑ ÑаÑÑÑÑ ÑгенеÑиÑо
ÐаÑамеÑÑÑ ÑÑнкÑии бÑдÑÑ ÑаÑÐ¿Ð¾Ð·Ð½Ð°Ð½Ñ ÑледÑÑÑим обÑазом:
* ÐÑли паÑамеÑÑ Ñакже обÑÑвлен в **пÑÑи**, он бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÐºÐ°Ðº path-паÑамеÑÑ.
-* ÐÑли паÑамеÑÑ Ð¸Ð¼ÐµÐµÑ **ÑкалÑÑнÑй Ñип** (напÑимеÑ, `int`, `float`, `str`, `bool` и Ñ. п.), он бÑÐ´ÐµÑ Ð¸Ð½ÑеÑпÑеÑиÑован как паÑамеÑÑ **запÑоÑа**.
+* ÐÑли паÑамеÑÑ Ð¸Ð¼ÐµÐµÑ **ÑкалÑÑнÑй Ñип** (напÑимеÑ, `int`, `float`, `str`, `bool` и Ñ.п.), он бÑÐ´ÐµÑ Ð¸Ð½ÑеÑпÑеÑиÑован как паÑамеÑÑ **запÑоÑа**.
* ÐÑли паÑамеÑÑ Ð¾Ð±ÑÑвлен как Ñип **модели Pydantic**, он бÑÐ´ÐµÑ Ð¸Ð½ÑеÑпÑеÑиÑован как **Ñело** запÑоÑа.
/// note | ÐамеÑка
FastAPI понимаеÑ, ÑÑо знаÑение `q` не ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм из-за знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ `= None`.
-ÐнноÑаÑии Ñипов `str | None` (Python 3.10+) или `Union` в `Union[str, None]` (Python 3.9+) не иÑполÑзÑÑÑÑÑ FastAPI Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑзаÑелÑноÑÑи; он ÑзнаеÑ, ÑÑо паÑамеÑÑ Ð½Ðµ обÑзаÑелен, поÑÐ¾Ð¼Ñ ÑÑо Ñ Ð½ÐµÐ³Ð¾ еÑÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ `= None`.
+ÐнноÑаÑÐ¸Ñ Ñипов `str | None` не иÑполÑзÑеÑÑÑ FastAPI Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑзаÑелÑноÑÑи; он ÑзнаеÑ, ÑÑо паÑамеÑÑ Ð½Ðµ обÑзаÑелен, поÑÐ¾Ð¼Ñ ÑÑо Ñ Ð½ÐµÐ³Ð¾ еÑÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ `= None`.
Ðо добавление анноÑаÑий Ñипов Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð²Ð°ÑÐµÐ¼Ñ ÑедакÑоÑÑ ÐºÐ¾Ð´Ð° лÑÑÑе Ð²Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ Ð¸ обнаÑÑживаÑÑ Ð¾Ñибки.
diff --git a/docs/ru/docs/tutorial/cookie-param-models.md b/docs/ru/docs/tutorial/cookie-param-models.md
index 182813afdf..9b34cf0300 100644
--- a/docs/ru/docs/tutorial/cookie-param-models.md
+++ b/docs/ru/docs/tutorial/cookie-param-models.md
@@ -46,7 +46,7 @@
РнекоÑоÑÑÑ
ÑлÑÑаÑÑ
(не оÑобо ÑаÑÑо вÑÑÑеÑаÑÑиÑ
ÑÑ) вам Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ **огÑаниÑиÑÑ** cookies, коÑоÑÑе Ð²Ñ Ñ
оÑиÑе полÑÑаÑÑ.
-ТепеÑÑ Ð²Ð°Ñ API Ñам ÑеÑаеÑ, пÑинимаÑÑ Ð»Ð¸ cookies. ð¤ªðª
+ТепеÑÑ Ñ Ð²Ð°Ñего API еÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÐºÐ¾Ð½ÑÑолиÑоваÑÑ ÑÐ²Ð¾Ñ ÑоглаÑие на иÑполÑзование cookie. ð¤ªðª
ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑконÑигÑÑиÑоваÑÑ Pydantic-Ð¼Ð¾Ð´ÐµÐ»Ñ Ñак, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑеÑиÑÑ (`forbid`) лÑбÑе дополниÑелÑнÑе (`extra`) полÑ:
@@ -54,9 +54,9 @@
ÐÑли ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿Ð¾Ð¿ÑобÑÐµÑ Ð¾ÑпÑавиÑÑ **дополниÑелÑнÑе cookies**, Ñо в оÑÐ²ÐµÑ Ð¾Ð½ полÑÑÐ¸Ñ **оÑибкÑ**.
-ÐеднÑе баннеÑÑ cookies, они вÑеми Ñилами пÑÑаÑÑÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð²Ð°Ñе ÑоглаÑие â и вÑÑ Ñади Ñого, ÑÑÐ¾Ð±Ñ API его оÑклонил. ðª
+ÐеднÑе баннеÑÑ cookies, они вÑеми Ñилами пÑÑаÑÑÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð²Ð°Ñе ÑоглаÑие â и вÑÑ Ñади Ñого, ÑÑÐ¾Ð±Ñ API его оÑклонил. ðª
-ÐапÑимеÑ, еÑли ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿Ð¾Ð¿ÑÑаеÑÑÑ Ð¾ÑпÑавиÑÑ cookie `santa_tracker` Ñо знаÑением `good-list-please`, Ñо в оÑÐ²ÐµÑ Ð¾Ð½ полÑÑÐ¸Ñ **оÑибкÑ**, ÑообÑаÑÑÑÑ ÐµÐ¼Ñ, ÑÑо cookie `santa_tracker` не ÑазÑеÑÑн:
+ÐапÑимеÑ, еÑли ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿Ð¾Ð¿ÑÑаеÑÑÑ Ð¾ÑпÑавиÑÑ cookie `santa_tracker` Ñо знаÑением `good-list-please`, Ñо в оÑÐ²ÐµÑ Ð¾Ð½ полÑÑÐ¸Ñ **оÑибкÑ**, ÑообÑаÑÑÑÑ ÐµÐ¼Ñ, ÑÑо `santa_tracker` cookie не ÑазÑеÑÑн:
```json
{
@@ -73,4 +73,4 @@
## ÐаклÑÑение { #summary }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ **Pydantic-модели** Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ **cookies** в **FastAPI**. ð
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ **Pydantic-модели** Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ **cookies** в **FastAPI**. ð
diff --git a/docs/ru/docs/tutorial/cookie-params.md b/docs/ru/docs/tutorial/cookie-params.md
index 2d2eff8d7c..8dad3873e4 100644
--- a/docs/ru/docs/tutorial/cookie-params.md
+++ b/docs/ru/docs/tutorial/cookie-params.md
@@ -32,11 +32,11 @@
/// info | ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ
-ÐмейÑе в видÑ, ÑÑо, поÑколÑÐºÑ Ð±ÑаÑзеÑÑ Ð¾Ð±ÑабаÑÑваÑÑ cookies оÑобÑм обÑазом и «за кÑлиÑами», они не позволÑÑÑ JavaScript пÑоÑÑо Ñак полÑÑаÑÑ Ðº ним доÑÑÑп.
+ÐмейÑе в видÑ, ÑÑо, поÑколÑÐºÑ **бÑаÑзеÑÑ Ð¾Ð±ÑабаÑÑваÑÑ cookies** оÑобÑм обÑазом и «за кÑлиÑами», они **не** позволÑÑÑ **JavaScript** пÑоÑÑо Ñак полÑÑаÑÑ Ðº ним доÑÑÑп.
-ÐÑли Ð²Ñ Ð¾ÑкÑоеÑе инÑеÑÑÐµÐ¹Ñ Ð´Ð¾ÐºÑменÑаÑии API на `/docs`, Ð²Ñ ÑможеÑе ÑвидеÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð¿Ð¾ cookies Ð´Ð»Ñ Ð²Ð°ÑиÑ
опеÑаÑий пÑÑи.
+ÐÑли Ð²Ñ Ð¾ÑкÑоеÑе **инÑеÑÑÐµÐ¹Ñ Ð´Ð¾ÐºÑменÑаÑии API** на `/docs`, Ð²Ñ ÑможеÑе ÑвидеÑÑ **докÑменÑаÑиÑ** по cookies Ð´Ð»Ñ Ð²Ð°ÑиÑ
*опеÑаÑии пÑÑи*.
-Ðо даже еÑли Ð²Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½Ð¸Ñе даннÑе и нажмÑÑе «Execute», поÑколÑÐºÑ UI докÑменÑаÑии ÑабоÑÐ°ÐµÑ Ñ JavaScript, cookies оÑпÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½Ðµ бÑдÑÑ, и Ð²Ñ ÑвидиÑе ÑообÑение об оÑибке, как бÑдÑо Ð²Ñ Ð½Ðµ Ñказали никакиÑ
знаÑений.
+Ðо даже еÑли Ð²Ñ **заполниÑе даннÑе** и нажмÑÑе «Execute», поÑколÑÐºÑ UI докÑменÑаÑии ÑабоÑÐ°ÐµÑ Ñ **JavaScript**, cookies оÑпÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½Ðµ бÑдÑÑ, и Ð²Ñ ÑвидиÑе ÑообÑение об **оÑибке**, как бÑдÑо Ð²Ñ Ð½Ðµ Ñказали никакиÑ
знаÑений.
///
diff --git a/docs/ru/docs/tutorial/cors.md b/docs/ru/docs/tutorial/cors.md
index d09a31e2c3..feaa159683 100644
--- a/docs/ru/docs/tutorial/cors.md
+++ b/docs/ru/docs/tutorial/cors.md
@@ -46,7 +46,7 @@
* ÐÑделÑнÑÑ
HTTP-меÑодов (`POST`, `PUT`) или вÑеÑ
вмеÑÑе, иÑполÑзÑÑ `"*"`.
* ÐÑделÑнÑÑ
HTTP-заголовков или вÑеÑ
вмеÑÑе, иÑполÑзÑÑ `"*"`.
-{* ../../docs_src/cors/tutorial001_py39.py hl[2,6:11,13:19] *}
+{* ../../docs_src/cors/tutorial001_py310.py hl[2,6:11,13:19] *}
`CORSMiddleware` иÑполÑзÑÐµÑ "запÑеÑаÑÑие" знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ, поÑÑÐ¾Ð¼Ñ Ð²Ð°Ð¼ нÑжно ÑвнÑм обÑазом ÑазÑеÑиÑÑ Ð¸ÑполÑзование оÑделÑнÑÑ
иÑÑоÑников, меÑодов или заголовков, ÑÑÐ¾Ð±Ñ Ð±ÑаÑзеÑÑ Ð¼Ð¾Ð³Ð»Ð¸ иÑполÑзоваÑÑ Ð¸Ñ
в кÑоÑÑ-доменном конÑекÑÑе.
@@ -77,7 +77,7 @@
## ÐолÑÑе инÑоÑмаÑии { #more-info }
-ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ подÑобной инÑоÑмаÑии о CORS обÑаÑиÑеÑÑ Ðº докÑменÑаÑии CORS Ð¾Ñ Mozilla.
+ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ подÑобной инÑоÑмаÑии о CORS обÑаÑиÑеÑÑ Ðº докÑменÑаÑии CORS Ð¾Ñ Mozilla.
/// note | ТеÑ
ниÑеÑкие деÑали
diff --git a/docs/ru/docs/tutorial/debugging.md b/docs/ru/docs/tutorial/debugging.md
index 51955835e6..483fe80869 100644
--- a/docs/ru/docs/tutorial/debugging.md
+++ b/docs/ru/docs/tutorial/debugging.md
@@ -6,7 +6,7 @@
РваÑем FastAPI пÑиложении, импоÑÑиÑÑйÑе и вÑзовиÑе `uvicorn` напÑÑмÑÑ:
-{* ../../docs_src/debugging/tutorial001_py39.py hl[1,15] *}
+{* ../../docs_src/debugging/tutorial001_py310.py hl[1,15] *}
### ÐпиÑание `__name__ == "__main__"` { #about-name-main }
@@ -42,7 +42,7 @@ $ python myapp.py
Ñо вÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ `__name__`, авÑомаÑиÑеÑки ÑÐ¾Ð·Ð´Ð°Ð²Ð°ÐµÐ¼Ð°Ñ Python в ваÑем Ñайле, бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð·Ð½Ð°Ñение ÑÑÑокового Ñипа `"__main__"`.
-Тогда вÑполниÑÑÑ ÑÑловие и ÑÑа ÑаÑÑÑ ÐºÐ¾Ð´Ð°:
+Тогда ÑÑа ÑаÑÑÑ ÐºÐ¾Ð´Ð°:
```Python
uvicorn.run(app, host="0.0.0.0", port=8000)
@@ -59,7 +59,7 @@ $ python myapp.py
```Python
from myapp import app
-# Some more code
+# ÐÑе немного кода
```
Ñо авÑомаÑиÑеÑÐºÐ°Ñ ÑÐ¾Ð·Ð´Ð°Ð²Ð°ÐµÐ¼Ð°Ñ Ð²Ð½ÑÑÑи Ñайла `myapp.py` пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ `__name__` бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð·Ð½Ð°Ñение оÑлиÑаÑÑееÑÑ Ð¾Ñ `"__main__"`.
@@ -99,7 +99,7 @@ from myapp import app
---
-ÐÑли иÑполÑзÑеÑе Pycharm, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑполниÑÑ ÑледÑÑÑие Ñаги:
+ÐÑли иÑполÑзÑеÑе PyCharm, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑполниÑÑ ÑледÑÑÑие Ñаги:
* ÐÑкÑÑÑÑ "Run" менÑ.
* ÐÑбÑаÑÑ Ð¾Ð¿ÑÐ¸Ñ "Debug...".
diff --git a/docs/ru/docs/tutorial/dependencies/classes-as-dependencies.md b/docs/ru/docs/tutorial/dependencies/classes-as-dependencies.md
index a38e885d43..9a3171e9f1 100644
--- a/docs/ru/docs/tutorial/dependencies/classes-as-dependencies.md
+++ b/docs/ru/docs/tutorial/dependencies/classes-as-dependencies.md
@@ -4,7 +4,7 @@
## `dict` из пÑедÑдÑÑего пÑимеÑа { #a-dict-from-the-previous-example }
-РпÑедÑдÑÑем пÑимеÑе Ð¼Ñ Ð²Ð¾Ð·Ð²ÑаÑали `dict` из наÑей завиÑимоÑÑи:
+РпÑедÑдÑÑем пÑимеÑе Ð¼Ñ Ð²Ð¾Ð·Ð²ÑаÑали `dict` из наÑей завиÑимоÑÑи («dependable»):
{* ../../docs_src/dependencies/tutorial001_an_py310.py hl[9] *}
@@ -67,7 +67,7 @@ fluffy = Cat(name="Mr Fluffy")
ÐÑо оÑноÑиÑÑÑ Ð¸ к вÑзÑваемÑм обÑекÑам без паÑамеÑÑов. РабоÑа Ñ Ð½Ð¸Ð¼Ð¸ пÑоиÑÑ
Ð¾Ð´Ð¸Ñ ÑоÑно Ñак же, как и Ð´Ð»Ñ *ÑÑнкÑий-обÑабоÑÑиков пÑÑи* без паÑамеÑÑов.
-ТепеÑÑ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ измениÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ `common_parameters`, ÑказаннÑÑ Ð²ÑÑе, на клаÑÑ `CommonQueryParams`:
+ТепеÑÑ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ измениÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ («dependable») `common_parameters`, ÑказаннÑÑ Ð²ÑÑе, на клаÑÑ `CommonQueryParams`:
{* ../../docs_src/dependencies/tutorial002_an_py310.py hl[11:15] *}
@@ -101,7 +101,7 @@ fluffy = Cat(name="Mr Fluffy")
ÐбÑаÑиÑе внимание, ÑÑо в пÑиведенном вÑÑе коде Ð¼Ñ Ð´Ð²Ð° Ñаза пиÑем `CommonQueryParams`:
-//// tab | Python 3.9+
+//// tab | Python 3.10+
```Python
commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
@@ -109,7 +109,7 @@ commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
////
-//// tab | Python 3.9+ non-Annotated
+//// tab | Python 3.10+ без Annotated
/// tip | ÐодÑказка
@@ -137,7 +137,7 @@ commons: CommonQueryParams = Depends(CommonQueryParams)
Ð ÑÑом ÑлÑÑае пеÑвÑй `CommonQueryParams`, в:
-//// tab | Python 3.9+
+//// tab | Python 3.10+
```Python
commons: Annotated[CommonQueryParams, ...
@@ -145,7 +145,7 @@ commons: Annotated[CommonQueryParams, ...
////
-//// tab | Python 3.9+ non-Annotated
+//// tab | Python 3.10+ без Annotated
/// tip | ÐодÑказка
@@ -163,7 +163,7 @@ commons: CommonQueryParams ...
Ðа Ñамом деле можно напиÑаÑÑ Ð¿ÑоÑÑо:
-//// tab | Python 3.9+
+//// tab | Python 3.10+
```Python
commons: Annotated[Any, Depends(CommonQueryParams)]
@@ -171,7 +171,7 @@ commons: Annotated[Any, Depends(CommonQueryParams)]
////
-//// tab | Python 3.9+ non-Annotated
+//// tab | Python 3.10+ без Annotated
/// tip | ÐодÑказка
@@ -197,7 +197,7 @@ commons = Depends(CommonQueryParams)
Ðо Ð²Ñ Ð²Ð¸Ð´Ð¸Ñе, ÑÑо здеÑÑ Ð¼Ñ Ð¸Ð¼ÐµÐµÐ¼ некоÑоÑое повÑоÑение кода, Ð´Ð²Ð°Ð¶Ð´Ñ Ð½Ð°Ð¿Ð¸Ñав `CommonQueryParams`:
-//// tab | Python 3.9+
+//// tab | Python 3.10+
```Python
commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
@@ -205,7 +205,7 @@ commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
////
-//// tab | Python 3.9+ non-Annotated
+//// tab | Python 3.10+ без Annotated
/// tip | ÐодÑказка
@@ -225,7 +225,7 @@ commons: CommonQueryParams = Depends(CommonQueryParams)
ÐмеÑÑо Ñого ÑÑÐ¾Ð±Ñ Ð¿Ð¸ÑаÑÑ:
-//// tab | Python 3.9+
+//// tab | Python 3.10+
```Python
commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
@@ -233,7 +233,7 @@ commons: Annotated[CommonQueryParams, Depends(CommonQueryParams)]
////
-//// tab | Python 3.9+ non-Annotated
+//// tab | Python 3.10+ без Annotated
/// tip | ÐодÑказка
@@ -249,7 +249,7 @@ commons: CommonQueryParams = Depends(CommonQueryParams)
...ÑледÑÐµÑ Ð½Ð°Ð¿Ð¸ÑаÑÑ:
-//// tab | Python 3.9+
+//// tab | Python 3.10+
```Python
commons: Annotated[CommonQueryParams, Depends()]
@@ -257,7 +257,7 @@ commons: Annotated[CommonQueryParams, Depends()]
////
-//// tab | Python 3.9+ non-Annotated
+//// tab | Python 3.10+ без Annotated
/// tip | ÐодÑказка
diff --git a/docs/ru/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md b/docs/ru/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
index ef56644485..4cfc4e699f 100644
--- a/docs/ru/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
+++ b/docs/ru/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
@@ -14,7 +14,7 @@
ÐÑо должен бÑÑÑ `list` ÑоÑÑоÑÑий из `Depends()`:
-{* ../../docs_src/dependencies/tutorial006_an_py39.py hl[19] *}
+{* ../../docs_src/dependencies/tutorial006_an_py310.py hl[19] *}
ÐавиÑимоÑÑи из dependencies вÑполнÑÑÑÑ Ñак же, как и обÑÑнÑе завиÑимоÑÑи. Ðо иÑ
знаÑÐµÐ½Ð¸Ñ (еÑли они бÑли) не бÑдÑÑ Ð¿ÐµÑÐµÐ´Ð°Ð½Ñ Ð² *ÑÑнкÑÐ¸Ñ Ð¾Ð¿ÐµÑаÑии пÑÑи*.
@@ -30,7 +30,7 @@
/// info | ÐÑимеÑание
-Ð ÑÑом пÑимеÑе Ð¼Ñ Ð¸ÑполÑзÑем вÑдÑманнÑе полÑзоваÑелÑÑкие заголовки `X-Key` и `X-Token`.
+Ð ÑÑом пÑимеÑе Ð¼Ñ Ð¸ÑполÑзÑем вÑдÑманнÑе полÑзоваÑелÑÑкие HTTP-заголовки `X-Key` и `X-Token`.
Ðо в ÑеалÑнÑÑ
пÑоекÑаÑ
, пÑи внедÑении ÑиÑÑÐµÐ¼Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе болÑÑе полÑÐ·Ñ Ð¸ÑполÑзÑÑ Ð¸Ð½ÑегÑиÑованнÑе [ÑÑедÑÑва заÑиÑÑ (ÑледÑÑÑÐ°Ñ Ð³Ð»Ð°Ð²Ð°)](../security/index.md){.internal-link target=_blank}.
@@ -42,15 +42,15 @@
### ТÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ðº завиÑимоÑÑÑм { #dependency-requirements }
-Ðни могÑÑ Ð¾Ð±ÑÑвлÑÑÑ ÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ðº запÑоÑÑ (напÑÐ¸Ð¼ÐµÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¸) или дÑÑгие подзавиÑимоÑÑи:
+Ðни могÑÑ Ð¾Ð±ÑÑвлÑÑÑ ÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ðº запÑоÑÑ (напÑÐ¸Ð¼ÐµÑ HTTP-заголовки) или дÑÑгие подзавиÑимоÑÑи:
-{* ../../docs_src/dependencies/tutorial006_an_py39.py hl[8,13] *}
+{* ../../docs_src/dependencies/tutorial006_an_py310.py hl[8,13] *}
### ÐÑзов иÑклÑÑений { #raise-exceptions }
ÐавиÑимоÑÑи из dependencies могÑÑ Ð²ÑзÑваÑÑ Ð¸ÑклÑÑÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `raise`, как и обÑÑнÑе завиÑимоÑÑи:
-{* ../../docs_src/dependencies/tutorial006_an_py39.py hl[10,15] *}
+{* ../../docs_src/dependencies/tutorial006_an_py310.py hl[10,15] *}
### ÐозвÑаÑаемÑе знаÑÐµÐ½Ð¸Ñ { #return-values }
@@ -58,7 +58,7 @@
Таким обÑазом, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пеÑеиÑполÑзоваÑÑ Ð¾Ð±ÑÑнÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ (возвÑаÑаÑÑÑÑ Ð·Ð½Ð°Ñение), коÑоÑÑÑ Ð²Ñ Ñже иÑполÑзÑеÑе где-Ñо в дÑÑгом меÑÑе, и Ñ
оÑÑ Ð·Ð½Ð°Ñение не бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ, завиÑимоÑÑÑ Ð±ÑÐ´ÐµÑ Ð²Ñполнена:
-{* ../../docs_src/dependencies/tutorial006_an_py39.py hl[11,16] *}
+{* ../../docs_src/dependencies/tutorial006_an_py310.py hl[11,16] *}
## ÐавиÑимоÑÑи Ð´Ð»Ñ Ð³ÑÑÐ¿Ð¿Ñ *опеÑаÑий пÑÑей* { #dependencies-for-a-group-of-path-operations }
diff --git a/docs/ru/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/ru/docs/tutorial/dependencies/dependencies-with-yield.md
index dc202db616..03a7c083c4 100644
--- a/docs/ru/docs/tutorial/dependencies/dependencies-with-yield.md
+++ b/docs/ru/docs/tutorial/dependencies/dependencies-with-yield.md
@@ -1,6 +1,6 @@
# ÐавиÑимоÑÑи Ñ yield { #dependencies-with-yield }
-FastAPI поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи, коÑоÑÑе вÑполнÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе дополниÑелÑнÑе Ñаги поÑле завеÑÑениÑ.
+FastAPI поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи, коÑоÑÑе вÑполнÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе дополниÑелÑнÑе Ñаги поÑле завеÑÑениÑ.
ÐÐ»Ñ ÑÑого иÑполÑзÑйÑе `yield` вмеÑÑо `return`, а дополниÑелÑнÑе Ñаги (код) напиÑиÑе поÑле него.
@@ -29,15 +29,15 @@ FastAPI поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи, коÑоÑÑе вÑпо
ÐеÑед Ñозданием оÑвеÑа бÑÐ´ÐµÑ Ð²Ñполнен ÑолÑко код до и вклÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ `yield`:
-{* ../../docs_src/dependencies/tutorial007_py39.py hl[2:4] *}
+{* ../../docs_src/dependencies/tutorial007_py310.py hl[2:4] *}
ÐнаÑение, полÑÑенное из `yield`, внедÑÑеÑÑÑ Ð² *опеÑаÑии пÑÑи* и дÑÑгие завиÑимоÑÑи:
-{* ../../docs_src/dependencies/tutorial007_py39.py hl[4] *}
+{* ../../docs_src/dependencies/tutorial007_py310.py hl[4] *}
Ðод, ÑледÑÑÑий за опеÑаÑоÑом `yield`, вÑполнÑеÑÑÑ Ð¿Ð¾Ñле оÑвеÑа:
-{* ../../docs_src/dependencies/tutorial007_py39.py hl[5:6] *}
+{* ../../docs_src/dependencies/tutorial007_py310.py hl[5:6] *}
/// tip | ÐодÑказка
@@ -57,7 +57,7 @@ FastAPI поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи, коÑоÑÑе вÑпо
ТоÑно Ñак же можно иÑполÑзоваÑÑ `finally`, ÑÑÐ¾Ð±Ñ ÑбедиÑÑÑÑ, ÑÑо обÑзаÑелÑнÑе Ñаги пÑи вÑÑ
оде вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо Ð¾Ñ Ñого, бÑло ли иÑклÑÑение или неÑ.
-{* ../../docs_src/dependencies/tutorial007_py39.py hl[3,5] *}
+{* ../../docs_src/dependencies/tutorial007_py310.py hl[3,5] *}
## ÐодзавиÑимоÑÑи Ñ `yield` { #sub-dependencies-with-yield }
@@ -67,7 +67,7 @@ FastAPI поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи, коÑоÑÑе вÑпо
ÐапÑимеÑ, `dependency_c` Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¾Ñ `dependency_b`, а `dependency_b` â Ð¾Ñ `dependency_a`:
-{* ../../docs_src/dependencies/tutorial008_an_py39.py hl[6,14,22] *}
+{* ../../docs_src/dependencies/tutorial008_an_py310.py hl[6,14,22] *}
РвÑе они могÑÑ Ð¸ÑполÑзоваÑÑ `yield`.
@@ -75,7 +75,7 @@ FastAPI поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи, коÑоÑÑе вÑпо
Ð, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, `dependency_b` нÑждаеÑÑÑ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ð·Ð½Ð°Ñение из `dependency_a` (здеÑÑ `dep_a`) бÑло доÑÑÑпно Ð´Ð»Ñ ÐµÑ ÐºÐ¾Ð´Ð° вÑÑ
ода.
-{* ../../docs_src/dependencies/tutorial008_an_py39.py hl[18:19,26:27] *}
+{* ../../docs_src/dependencies/tutorial008_an_py310.py hl[18:19,26:27] *}
ТоÑно Ñак же можно имеÑÑ ÑаÑÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑей Ñ `yield`, ÑаÑÑÑ â Ñ `return`, и какие-Ñо из ниÑ
могÑÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð´ÑÑг Ð¾Ñ Ð´ÑÑга.
@@ -109,7 +109,7 @@ FastAPI поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи, коÑоÑÑе вÑпо
///
-{* ../../docs_src/dependencies/tutorial008b_an_py39.py hl[18:22,31] *}
+{* ../../docs_src/dependencies/tutorial008b_an_py310.py hl[18:22,31] *}
ÐÑли Ð²Ñ Ñ
оÑиÑе пеÑеÑ
ваÑÑваÑÑ Ð¸ÑклÑÑÐµÐ½Ð¸Ñ Ð¸ ÑоÑмиÑоваÑÑ Ð½Ð° иÑ
оÑнове полÑзоваÑелÑÑкий оÑвеÑ, ÑоздайÑе [ÐолÑзоваÑелÑÑкий обÑабоÑÑик иÑклÑÑений](../handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank}.
@@ -117,7 +117,7 @@ FastAPI поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи, коÑоÑÑе вÑпо
ÐÑли Ð²Ñ Ð»Ð¾Ð²Ð¸Ñе иÑклÑÑение Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `except` в завиÑимоÑÑи Ñ `yield` и не вÑзÑваеÑе его Ñнова (или не вÑзÑваеÑе новое иÑклÑÑение), FastAPI не ÑÐ¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¼ÐµÑиÑÑ, ÑÑо бÑло иÑклÑÑение â Ñак же, как ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð² обÑÑном Python:
-{* ../../docs_src/dependencies/tutorial008c_an_py39.py hl[15:16] *}
+{* ../../docs_src/dependencies/tutorial008c_an_py310.py hl[15:16] *}
Ð ÑÑом ÑлÑÑае ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ *HTTP 500 Internal Server Error*, как и должно бÑÑÑ, поÑколÑÐºÑ Ð¼Ñ Ð½Ðµ вÑзÑваем `HTTPException` или ÑÑо-Ñо подобное, но на ÑеÑвеÑе **не бÑÐ´ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
логов** или дÑÑгиÑ
Ñказаний на Ñо, ÐºÐ°ÐºÐ°Ñ Ð±Ñла оÑибка. ð±
@@ -127,7 +127,7 @@ FastAPI поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи, коÑоÑÑе вÑпо
ÐÑ Ð¼Ð¾Ð¶ÐµÑе повÑоÑно вÑзваÑÑ Ñо же Ñамое иÑклÑÑение Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `raise`:
-{* ../../docs_src/dependencies/tutorial008d_an_py39.py hl[17] *}
+{* ../../docs_src/dependencies/tutorial008d_an_py310.py hl[17] *}
ТепеÑÑ ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ ÑÐ¾Ñ Ð¶Ðµ *HTTP 500 Internal Server Error*, но на ÑеÑвеÑе в логаÑ
бÑÐ´ÐµÑ Ð½Ð°Ñе полÑзоваÑелÑÑкое `InternalError`. ð
@@ -190,7 +190,7 @@ participant tasks as Background tasks
Ðо еÑли Ð²Ñ Ð·Ð½Ð°ÐµÑе, ÑÑо не бÑдеÑе иÑполÑзоваÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ Ð¿Ð¾Ñле возвÑаÑа из *ÑÑнкÑии-обÑабоÑÑика пÑÑи*, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `Depends(scope="function")`, ÑÑÐ¾Ð±Ñ ÑообÑиÑÑ FastAPI, ÑÑо он должен закÑÑÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ Ð¿Ð¾Ñле возвÑаÑа из *ÑÑнкÑии-обÑабоÑÑика пÑÑи*, но **до Ñого**, как **оÑÐ²ÐµÑ Ð±ÑÐ´ÐµÑ Ð¾ÑпÑавлен**.
-{* ../../docs_src/dependencies/tutorial008e_an_py39.py hl[12,16] *}
+{* ../../docs_src/dependencies/tutorial008e_an_py310.py hl[12,16] *}
`Depends()` пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð°ÑамеÑÑ `scope`, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ:
@@ -269,7 +269,7 @@ with open("./somefile.txt") as f:
ÐÑ
Ñакже можно иÑполÑзоваÑÑ Ð²Ð½ÑÑÑи завиÑимоÑÑей **FastAPI** Ñ `yield`, пÑименÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ
`with` или `async with` внÑÑÑи ÑÑнкÑии завиÑимоÑÑи:
-{* ../../docs_src/dependencies/tutorial010_py39.py hl[1:9,13] *}
+{* ../../docs_src/dependencies/tutorial010_py310.py hl[1:9,13] *}
/// tip | ÐодÑказка
diff --git a/docs/ru/docs/tutorial/dependencies/global-dependencies.md b/docs/ru/docs/tutorial/dependencies/global-dependencies.md
index 2347c6dd83..f488322a9e 100644
--- a/docs/ru/docs/tutorial/dependencies/global-dependencies.md
+++ b/docs/ru/docs/tutorial/dependencies/global-dependencies.md
@@ -6,10 +6,10 @@
Ð ÑÑом ÑлÑÑае они бÑдÑÑ Ð¿ÑименÑÑÑÑÑ ÐºÐ¾ вÑем *опеÑаÑиÑм пÑÑи* в пÑиложении:
-{* ../../docs_src/dependencies/tutorial012_an_py39.py hl[17] *}
+{* ../../docs_src/dependencies/tutorial012_an_py310.py hl[17] *}
ÐÑе ÑпоÑÐ¾Ð±Ñ [Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ `dependencies` (завиÑимоÑÑей) в *декоÑаÑоÑаÑ
опеÑаÑий пÑÑи*](dependencies-in-path-operation-decorators.md){.internal-link target=_blank} по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¿ÑименимÑ, но в данном ÑлÑÑае завиÑимоÑÑи пÑименÑÑÑÑÑ ÐºÐ¾ вÑем *опеÑаÑиÑм пÑÑи* пÑиложениÑ.
## ÐавиÑимоÑÑи Ð´Ð»Ñ Ð³ÑÑпп *опеÑаÑий пÑÑи* { #dependencies-for-groups-of-path-operations }
-Ðозднее, ÑиÑÐ°Ñ Ð¾ Ñом, как ÑÑÑÑкÑÑÑиÑоваÑÑ Ð±Ð¾Ð»ÐµÐµ кÑÑпнÑе [пÑиложениÑ, ÑодеÑжаÑие много Ñайлов](../../tutorial/bigger-applications.md){.internal-link target=_blank}, Ð²Ñ ÑзнаеÑе, как обÑÑвиÑÑ Ð¾Ð´Ð¸Ð½ паÑамеÑÑ `dependencies` Ð´Ð»Ñ Ñелой гÑÑÐ¿Ð¿Ñ *опеÑаÑий пÑÑи*.
+Ðозднее, ÑиÑÐ°Ñ Ð¾ Ñом, как ÑÑÑÑкÑÑÑиÑоваÑÑ Ð±Ð¾Ð»ÐµÐµ кÑÑпнÑе пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ([пÑиложениÑ, ÑодеÑжаÑие много Ñайлов](../../tutorial/bigger-applications.md){.internal-link target=_blank}), возможно, ÑоÑÑоÑÑие из неÑколÑкиÑ
Ñайлов, Ð²Ñ ÑзнаеÑе, как обÑÑвиÑÑ Ð¾Ð´Ð¸Ð½ паÑамеÑÑ `dependencies` Ð´Ð»Ñ Ñелой гÑÑÐ¿Ð¿Ñ *опеÑаÑий пÑÑи*.
diff --git a/docs/ru/docs/tutorial/dependencies/index.md b/docs/ru/docs/tutorial/dependencies/index.md
index 98b0d59c6a..29f735ab61 100644
--- a/docs/ru/docs/tutorial/dependencies/index.md
+++ b/docs/ru/docs/tutorial/dependencies/index.md
@@ -1,6 +1,6 @@
# ÐавиÑимоÑÑи { #dependencies }
-**FastAPI** Ð¸Ð¼ÐµÐµÑ Ð¾ÑÐµÐ½Ñ Ð¼Ð¾ÑнÑÑ, но инÑÑиÑивнÑÑ ÑиÑÑÐµÐ¼Ñ **ÐнÑекÑÐ¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей**.
+**FastAPI** Ð¸Ð¼ÐµÐµÑ Ð¾ÑÐµÐ½Ñ Ð¼Ð¾ÑнÑÑ, но инÑÑиÑивнÑÑ ÑиÑÑÐµÐ¼Ñ **ÐнÑекÑÐ¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей**.
Ðна ÑпÑоекÑиÑована Ñак, ÑÑÐ¾Ð±Ñ Ð±ÑÑÑ Ð¾ÑÐµÐ½Ñ Ð¿ÑоÑÑой в иÑполÑзовании и облегÑаÑÑ Ð»ÑÐ±Ð¾Ð¼Ñ ÑазÑабоÑÑÐ¸ÐºÑ Ð¸Ð½ÑегÑаÑÐ¸Ñ Ð´ÑÑгиÑ
компоненÑов Ñ **FastAPI**.
diff --git a/docs/ru/docs/tutorial/dependencies/sub-dependencies.md b/docs/ru/docs/tutorial/dependencies/sub-dependencies.md
index da31a6682f..3c71defd89 100644
--- a/docs/ru/docs/tutorial/dependencies/sub-dependencies.md
+++ b/docs/ru/docs/tutorial/dependencies/sub-dependencies.md
@@ -58,11 +58,11 @@ query_extractor --> query_or_cookie_extractor --> read_query
ÐÑли одна из ваÑиÑ
завиÑимоÑÑей обÑÑвлена неÑколÑко Ñаз Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ и Ñой же *ÑÑнкÑии опеÑаÑии пÑÑи*, напÑимеÑ, неÑколÑко завиÑимоÑÑей имеÑÑ Ð¾Ð±ÑÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð²Ð¸ÑимоÑÑÑ, **FastAPI** бÑÐ´ÐµÑ Ð·Ð½Ð°ÑÑ, ÑÑо вÑзÑваÑÑ ÑÑÑ Ð¿Ð¾Ð´Ð·Ð°Ð²Ð¸ÑимоÑÑÑ Ð½Ñжно ÑолÑко один Ñаз за запÑоÑ.
-ÐÑи ÑÑом возвÑаÑаемое знаÑение бÑÐ´ÐµÑ ÑоÑ
Ñанено в "кÑÑ" и бÑÐ´ÐµÑ Ð¿ÐµÑедано вÑем "завиÑимÑм" ÑÑнкÑиÑм, коÑоÑÑе нÑждаÑÑÑÑ Ð² нем внÑÑÑи ÑÑого конкÑеÑного запÑоÑа, вмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð²ÑзÑваÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ Ð½ÐµÑколÑко Ñаз Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ и Ñого же запÑоÑа.
+ÐÑи ÑÑом возвÑаÑаемое знаÑение бÑÐ´ÐµÑ ÑоÑ
Ñанено в «кÑÑ» и бÑÐ´ÐµÑ Ð¿ÐµÑедано вÑем "завиÑимÑм" ÑÑнкÑиÑм, коÑоÑÑе нÑждаÑÑÑÑ Ð² нем внÑÑÑи ÑÑого конкÑеÑного запÑоÑа, вмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð²ÑзÑваÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ Ð½ÐµÑколÑко Ñаз Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ и Ñого же запÑоÑа.
Ð ÑаÑÑиÑенном ÑÑенаÑии, когда Ð²Ñ Ð·Ð½Ð°ÐµÑе, ÑÑо вам нÑжно, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ Ð²ÑзÑвалаÑÑ Ð½Ð° каждом Ñаге (возможно, неÑколÑко Ñаз) в одном и Ñом же запÑоÑе, вмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ "кÑÑиÑованного" знаÑениÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑÑановиÑÑ Ð¿Ð°ÑамеÑÑ `use_cache=False` пÑи иÑполÑзовании `Depends`:
-//// tab | Python 3.9+
+//// tab | Python 3.10+
```Python hl_lines="1"
async def needy_dependency(fresh_value: Annotated[str, Depends(get_value, use_cache=False)]):
@@ -71,7 +71,7 @@ async def needy_dependency(fresh_value: Annotated[str, Depends(get_value, use_ca
////
-//// tab | Python 3.9+ без Annotated
+//// tab | Python 3.10+ без Annotated
/// tip | ÐодÑказка
diff --git a/docs/ru/docs/tutorial/encoder.md b/docs/ru/docs/tutorial/encoder.md
index 16981f79de..28e2a49c0a 100644
--- a/docs/ru/docs/tutorial/encoder.md
+++ b/docs/ru/docs/tutorial/encoder.md
@@ -10,9 +10,9 @@
ÐÑедÑÑавим, ÑÑо Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð±Ð°Ð·Ð° даннÑÑ
`fake_db`, коÑоÑÐ°Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑолÑко JSON-ÑовмеÑÑимÑе даннÑе.
-ÐапÑимеÑ, он не пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¾Ð±ÑекÑÑ `datetime`, Ñак как они не ÑовмеÑÑÐ¸Ð¼Ñ Ñ JSON.
+ÐапÑимеÑ, она не пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¾Ð±ÑекÑÑ `datetime`, Ñак как они не ÑовмеÑÑÐ¸Ð¼Ñ Ñ JSON.
-Ð Ñаком ÑлÑÑае обÑÐµÐºÑ `datetime` ÑледÑÐµÑ Ð¿ÑеобÑазоваÑÑ Ð² ÑÑÑÐ¾ÐºÑ ÑооÑвеÑÑÑвÑÑÑÑÑ ÑоÑмаÑÑ ISO.
+Ð Ñаком ÑлÑÑае обÑÐµÐºÑ `datetime` ÑледÑÐµÑ Ð¿ÑеобÑазоваÑÑ Ð² ÑÑÑокÑ, ÑооÑвеÑÑÑвÑÑÑÑÑ ÑоÑмаÑÑ ISO.
ТоÑно Ñак же ÑÑа база даннÑÑ
не Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинÑÑÑ Pydantic-Ð¼Ð¾Ð´ÐµÐ»Ñ (обÑÐµÐºÑ Ñ Ð°ÑÑибÑÑами), а ÑолÑко `dict`.
diff --git a/docs/ru/docs/tutorial/extra-models.md b/docs/ru/docs/tutorial/extra-models.md
index 03156f2b4e..f9b63ca70e 100644
--- a/docs/ru/docs/tutorial/extra-models.md
+++ b/docs/ru/docs/tutorial/extra-models.md
@@ -190,9 +190,9 @@ some_variable: PlaneItem | CarItem
Таким же обÑазом Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обÑÑвлÑÑÑ HTTP-оÑвеÑÑ, возвÑаÑаÑÑие ÑпиÑки обÑекÑов.
-ÐÐ»Ñ ÑÑого иÑполÑзÑйÑе ÑÑандаÑÑнÑй `typing.List` в Python (или пÑоÑÑо `list` в Python 3.9 и вÑÑе):
+ÐÐ»Ñ ÑÑого иÑполÑзÑйÑе ÑÑандаÑÑнÑй `list` в Python:
-{* ../../docs_src/extra_models/tutorial004_py39.py hl[18] *}
+{* ../../docs_src/extra_models/tutorial004_py310.py hl[18] *}
## ÐÑÐ²ÐµÑ Ñ Ð¿ÑоизволÑнÑм `dict` { #response-with-arbitrary-dict }
@@ -200,9 +200,9 @@ some_variable: PlaneItem | CarItem
ÐÑо полезно, еÑли Ð²Ñ Ð·Ð°Ñанее не знаеÑе коÑÑекÑнÑÑ
названий полей/аÑÑибÑÑов (коÑоÑÑе бÑдÑÑ Ð½ÑÐ¶Ð½Ñ Ð¿Ñи иÑполÑзовании Pydantic-модели).
-Ð ÑÑом ÑлÑÑае Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `typing.Dict` (или пÑоÑÑо `dict` в Python 3.9 и вÑÑе):
+Ð ÑÑом ÑлÑÑае Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `dict`:
-{* ../../docs_src/extra_models/tutorial005_py39.py hl[6] *}
+{* ../../docs_src/extra_models/tutorial005_py310.py hl[6] *}
## РезÑме { #recap }
diff --git a/docs/ru/docs/tutorial/first-steps.md b/docs/ru/docs/tutorial/first-steps.md
index 798c03d517..cee264ff46 100644
--- a/docs/ru/docs/tutorial/first-steps.md
+++ b/docs/ru/docs/tutorial/first-steps.md
@@ -2,7 +2,7 @@
СамÑй пÑоÑÑой Ñайл FastAPI Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ñак:
-{* ../../docs_src/first_steps/tutorial001_py39.py *}
+{* ../../docs_src/first_steps/tutorial001_py310.py *}
СкопиÑÑйÑе ÑÑо в Ñайл `main.py`.
@@ -183,7 +183,7 @@ Deploying to FastAPI Cloud...
### Шаг 1: импоÑÑиÑÑйÑе `FastAPI` { #step-1-import-fastapi }
-{* ../../docs_src/first_steps/tutorial001_py39.py hl[1] *}
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[1] *}
`FastAPI` â ÑÑо клаÑÑ Ð½Ð° Python, коÑоÑÑй пÑедоÑÑавлÑÐµÑ Ð²ÑÑ ÑÑнкÑионалÑноÑÑÑ Ð´Ð»Ñ Ð²Ð°Ñего API.
@@ -197,7 +197,7 @@ Deploying to FastAPI Cloud...
### Шаг 2: ÑоздайÑе ÑкземплÑÑ `FastAPI` { #step-2-create-a-fastapi-instance }
-{* ../../docs_src/first_steps/tutorial001_py39.py hl[3] *}
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[3] *}
ÐдеÑÑ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ `app` бÑÐ´ÐµÑ ÑкземплÑÑом клаÑÑа `FastAPI`.
@@ -266,12 +266,12 @@ https://example.com/items/foo
#### ÐпÑеделиÑе *декоÑаÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑии пÑÑи (path operation decorator)* { #define-a-path-operation-decorator }
-{* ../../docs_src/first_steps/tutorial001_py39.py hl[6] *}
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[6] *}
`@app.get("/")` ÑообÑÐ°ÐµÑ **FastAPI**, ÑÑо ÑÑнкÑÐ¸Ñ Ð¿ÑÑмо под ним оÑвеÑÐ°ÐµÑ Ð·Ð° обÑабоÑÐºÑ Ð·Ð°Ð¿ÑоÑов, поÑÑÑпаÑÑиÑ
:
* по пÑÑи `/`
-* Ñ Ð¸ÑполÑзованием get опеÑаÑии
+* Ñ Ð¸ÑполÑзованием get опеÑаÑии
/// info | ÐнÑоÑмаÑÐ¸Ñ Ð¾ `@decorator`
@@ -320,7 +320,7 @@ https://example.com/items/foo
* **опеÑаÑиÑ**: `get`.
* **ÑÑнкÑиÑ**: ÑÑнкÑÐ¸Ñ Ð½Ð¸Ð¶Ðµ «декоÑаÑоÑа» (ниже `@app.get("/")`).
-{* ../../docs_src/first_steps/tutorial001_py39.py hl[7] *}
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[7] *}
ÐÑо ÑÑнкÑÐ¸Ñ Ð½Ð° Python.
@@ -332,7 +332,7 @@ https://example.com/items/foo
ÐÑ Ñакже можеÑе опÑеделиÑÑ ÐµÑ ÐºÐ°Ðº обÑÑнÑÑ ÑÑнкÑÐ¸Ñ Ð²Ð¼ÐµÑÑо `async def`:
-{* ../../docs_src/first_steps/tutorial003_py39.py hl[7] *}
+{* ../../docs_src/first_steps/tutorial003_py310.py hl[7] *}
/// note | ÐÑимеÑание
@@ -342,7 +342,7 @@ https://example.com/items/foo
### Шаг 5: веÑниÑе ÑодеÑжимое { #step-5-return-the-content }
-{* ../../docs_src/first_steps/tutorial001_py39.py hl[8] *}
+{* ../../docs_src/first_steps/tutorial001_py310.py hl[8] *}
ÐÑ Ð¼Ð¾Ð¶ÐµÑе веÑнÑÑÑ `dict`, `list`, оÑделÑнÑе знаÑÐµÐ½Ð¸Ñ `str`, `int` и Ñ.д.
diff --git a/docs/ru/docs/tutorial/handling-errors.md b/docs/ru/docs/tutorial/handling-errors.md
index 2e00d70759..fbd82cf28a 100644
--- a/docs/ru/docs/tutorial/handling-errors.md
+++ b/docs/ru/docs/tutorial/handling-errors.md
@@ -11,7 +11,7 @@
* ÐлеменÑ, к коÑоÑÐ¾Ð¼Ñ ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿ÑÑалÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾ÑÑÑп, не ÑÑÑеÑÑвÑеÑ.
* и Ñ.д.
-Ð ÑакиÑ
ÑлÑÑаÑÑ
обÑÑно возвÑаÑаеÑÑÑ **HTTP-код ÑÑаÑÑÑа оÑвеÑа** в диапазоне **400** (Ð¾Ñ 400 до 499).
+Ð ÑакиÑ
ÑлÑÑаÑÑ
обÑÑно возвÑаÑаÑÑ **HTTP ÑÑаÑÑÑ-код** в диапазоне **400** (Ð¾Ñ 400 до 499).
Ðни поÑ
ожи на двÑÑ
ÑоÑÑе HTTP ÑÑаÑÑÑ-ÐºÐ¾Ð´Ñ (Ð¾Ñ 200 до 299), коÑоÑÑе ознаÑаÑÑ, ÑÑо запÑÐ¾Ñ Ð¾Ð±ÑабоÑан ÑÑпеÑно.
@@ -25,7 +25,7 @@
### ÐмпоÑÑиÑÑйÑе `HTTPException` { #import-httpexception }
-{* ../../docs_src/handling_errors/tutorial001_py39.py hl[1] *}
+{* ../../docs_src/handling_errors/tutorial001_py310.py hl[1] *}
### ÐÑзовиÑе `HTTPException` в Ñвоем коде { #raise-an-httpexception-in-your-code }
@@ -39,7 +39,7 @@
Рданном пÑимеÑе, когда ÐºÐ»Ð¸ÐµÐ½Ñ Ð·Ð°Ð¿ÑаÑÐ¸Ð²Ð°ÐµÑ ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿Ð¾ неÑÑÑеÑÑвÑÑÑÐµÐ¼Ñ ID, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¸ÑклÑÑение Ñо ÑÑаÑÑÑ-кодом `404`:
-{* ../../docs_src/handling_errors/tutorial001_py39.py hl[11] *}
+{* ../../docs_src/handling_errors/tutorial001_py310.py hl[11] *}
### ÐозвÑаÑаемÑй оÑÐ²ÐµÑ { #the-resulting-response }
@@ -71,13 +71,13 @@
## Ðобавление полÑзоваÑелÑÑкиÑ
заголовков { #add-custom-headers }
-РнекоÑоÑÑÑ
ÑиÑÑаÑиÑÑ
полезно имеÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие заголовки к оÑибке HTTP. ÐапÑимеÑ, Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
Ñипов безопаÑноÑÑи.
+РнекоÑоÑÑÑ
ÑиÑÑаÑиÑÑ
полезно имеÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие HTTP-заголовки к оÑибке HTTP. ÐапÑимеÑ, Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
Ñипов безопаÑноÑÑи.
СкоÑее вÑего, вам не поÑÑебÑеÑÑÑ Ð¸ÑполÑзоваÑÑ ÐµÐ³Ð¾ непоÑÑедÑÑвенно в коде.
Ðо в ÑлÑÑае, еÑли ÑÑо необÑ
одимо Ð´Ð»Ñ Ð¿ÑодвинÑÑого ÑÑенаÑиÑ, можно добавиÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие заголовки:
-{* ../../docs_src/handling_errors/tutorial002_py39.py hl[14] *}
+{* ../../docs_src/handling_errors/tutorial002_py310.py hl[14] *}
## УÑÑановка полÑзоваÑелÑÑкиÑ
обÑабоÑÑиков иÑклÑÑений { #install-custom-exception-handlers }
@@ -89,7 +89,7 @@
Ðожно добавиÑÑ ÑобÑÑвеннÑй обÑабоÑÑик иÑклÑÑений Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `@app.exception_handler()`:
-{* ../../docs_src/handling_errors/tutorial003_py39.py hl[5:7,13:18,24] *}
+{* ../../docs_src/handling_errors/tutorial003_py310.py hl[5:7,13:18,24] *}
ÐдеÑÑ, еÑли запÑоÑиÑÑ `/unicorns/yolo`, Ñо *опеÑаÑÐ¸Ñ Ð¿ÑÑи* вÑÐ·Ð¾Ð²ÐµÑ `UnicornException`.
@@ -127,7 +127,7 @@
ÐбÑабоÑÑик иÑклÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ Ð¾Ð±ÑÐµÐºÑ `Request` и иÑклÑÑение.
-{* ../../docs_src/handling_errors/tutorial004_py39.py hl[2,14:19] *}
+{* ../../docs_src/handling_errors/tutorial004_py310.py hl[2,14:19] *}
ТепеÑÑ, еÑли пеÑейÑи к `/items/foo`, Ñо вмеÑÑо ÑÑандаÑÑной JSON-оÑибки Ñ:
@@ -159,7 +159,7 @@ Field: ('path', 'item_id'), Error: Input should be a valid integer, unable to pa
ÐапÑимеÑ, Ð´Ð»Ñ ÑÑиÑ
оÑибок можно веÑнÑÑÑ Ð¾Ð±ÑÑнÑй ÑекÑÑовÑй оÑÐ²ÐµÑ Ð²Ð¼ÐµÑÑо JSON:
-{* ../../docs_src/handling_errors/tutorial004_py39.py hl[3:4,9:11,25] *}
+{* ../../docs_src/handling_errors/tutorial004_py310.py hl[3:4,9:11,25] *}
/// note | ТеÑ
ниÑеÑкие деÑали
@@ -183,7 +183,7 @@ Field: ('path', 'item_id'), Error: Input should be a valid integer, unable to pa
ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÐµÐ³Ð¾ пÑи ÑазÑабоÑке пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑегиÑÑÑаÑии Ñела и его оÑладки, возвÑаÑа полÑзоваÑÐµÐ»Ñ Ð¸ Ñ.д.
-{* ../../docs_src/handling_errors/tutorial005_py39.py hl[14] *}
+{* ../../docs_src/handling_errors/tutorial005_py310.py hl[14] *}
ТепеÑÑ Ð¿Ð¾Ð¿ÑобÑйÑе оÑпÑавиÑÑ Ð½ÐµÐ´ÐµÐ¹ÑÑвиÑелÑнÑй ÑлеменÑ, напÑимеÑ:
@@ -239,6 +239,6 @@ from starlette.exceptions import HTTPException as StarletteHTTPException
ÐÑли Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ Ð¸ÑклÑÑение вмеÑÑе Ñ Ñеми же обÑабоÑÑиками иÑклÑÑений по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð· **FastAPI**, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе импоÑÑиÑоваÑÑ Ð¸ повÑоÑно иÑполÑзоваÑÑ Ð¾Ð±ÑабоÑÑики иÑклÑÑений по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð· `fastapi.exception_handlers`:
-{* ../../docs_src/handling_errors/tutorial006_py39.py hl[2:5,15,21] *}
+{* ../../docs_src/handling_errors/tutorial006_py310.py hl[2:5,15,21] *}
Ð ÑÑом пÑимеÑе Ð²Ñ Ð¿ÑоÑÑо `вÑводиÑе в ÑеÑминал` оÑÐ¸Ð±ÐºÑ Ñ Ð¾ÑÐµÐ½Ñ Ð²ÑÑазиÑелÑнÑм ÑообÑением, но Ð¸Ð´ÐµÑ Ð²Ð°Ð¼ понÑÑна. ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¸ÑклÑÑение, а заÑем пÑоÑÑо повÑоÑно иÑполÑзоваÑÑ ÑÑандаÑÑнÑе обÑабоÑÑики иÑклÑÑений.
diff --git a/docs/ru/docs/tutorial/metadata.md b/docs/ru/docs/tutorial/metadata.md
index e4fe5fb544..221655aa5d 100644
--- a/docs/ru/docs/tutorial/metadata.md
+++ b/docs/ru/docs/tutorial/metadata.md
@@ -18,7 +18,7 @@
ÐÑ Ð¼Ð¾Ð¶ÐµÑе задаÑÑ Ð¸Ñ
ÑледÑÑÑим обÑазом:
-{* ../../docs_src/metadata/tutorial001_py39.py hl[3:16, 19:32] *}
+{* ../../docs_src/metadata/tutorial001_py310.py hl[3:16, 19:32] *}
/// tip | ÐодÑказка
@@ -36,7 +36,7 @@
РпÑимеÑÑ:
-{* ../../docs_src/metadata/tutorial001_1_py39.py hl[31] *}
+{* ../../docs_src/metadata/tutorial001_1_py310.py hl[31] *}
## ÐеÑаданнÑе Ð´Ð»Ñ Ñегов { #metadata-for-tags }
@@ -58,7 +58,7 @@
СоздайÑе меÑаданнÑе Ð´Ð»Ñ Ð²Ð°ÑиÑ
Ñегов и пеÑедайÑе иÑ
в паÑамеÑÑе `openapi_tags`:
-{* ../../docs_src/metadata/tutorial004_py39.py hl[3:16,18] *}
+{* ../../docs_src/metadata/tutorial004_py310.py hl[3:16,18] *}
ÐомниÑе, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Markdown внÑÑÑи опиÑаниÑ, к пÑимеÑÑ "login" бÑÐ´ÐµÑ Ð¾ÑобÑажен жиÑнÑм ÑÑиÑÑом (**login**) и "fancy" бÑÐ´ÐµÑ Ð¾ÑобÑажаÑÑÑÑ ÐºÑÑÑивом (_fancy_).
@@ -72,7 +72,7 @@
ÐÑполÑзÑйÑе паÑамеÑÑ `tags` Ñ Ð²Ð°Ñими *опеÑаÑиÑми пÑÑи* (и `APIRouter`ами), ÑÑÐ¾Ð±Ñ Ð¿ÑиÑвоиÑÑ Ð¸Ð¼ ÑазлиÑнÑе Ñеги:
-{* ../../docs_src/metadata/tutorial004_py39.py hl[21,26] *}
+{* ../../docs_src/metadata/tutorial004_py310.py hl[21,26] *}
/// info | ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ
@@ -100,7 +100,7 @@
РпÑимеÑÑ, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð´Ð°ÑÑ ÐµÑ Ð¾ÑобÑажение по адÑеÑÑ `/api/v1/openapi.json`:
-{* ../../docs_src/metadata/tutorial002_py39.py hl[3] *}
+{* ../../docs_src/metadata/tutorial002_py310.py hl[3] *}
ÐÑли Ð²Ñ Ñ
оÑиÑе оÑклÑÑиÑÑ ÑÑ
ÐµÐ¼Ñ OpenAPI полноÑÑÑÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе задаÑÑ `openapi_url=None`, ÑÑо Ñакже оÑклÑÑÐ¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие инÑеÑÑейÑÑ Ð´Ð¾ÐºÑменÑаÑии, коÑоÑÑе ÐµÑ Ð¸ÑполÑзÑÑÑ.
@@ -117,4 +117,4 @@
РпÑимеÑÑ, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð´Ð°ÑÑ Ð¾ÑобÑажение Swagger UI по адÑеÑÑ `/documentation` и оÑклÑÑиÑÑ ReDoc:
-{* ../../docs_src/metadata/tutorial003_py39.py hl[3] *}
+{* ../../docs_src/metadata/tutorial003_py310.py hl[3] *}
diff --git a/docs/ru/docs/tutorial/middleware.md b/docs/ru/docs/tutorial/middleware.md
index a83d3c0111..734545cd8b 100644
--- a/docs/ru/docs/tutorial/middleware.md
+++ b/docs/ru/docs/tutorial/middleware.md
@@ -1,10 +1,8 @@
# Middleware (ÐÑомежÑÑоÑнÑй Ñлой) { #middleware }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ Ð¿ÑомежÑÑоÑнÑй Ñлой (middleware) в **FastAPI** пÑиложение.
-
-"Middleware" ÑÑо ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð²ÑполнÑеÑÑÑ Ñ ÐºÐ°Ð¶Ð´Ñм запÑоÑом до его обÑабоÑки какой-либо конкÑеÑной *опеÑаÑией пÑÑи*.
-Ð Ñакже Ñ ÐºÐ°Ð¶Ð´Ñм оÑвеÑом пеÑед его возвÑаÑением.
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ middleware (пÑомежÑÑоÑнÑй Ñлой) в **FastAPI** пÑиложение.
+"Middleware" - ÑÑо ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð²ÑполнÑеÑÑÑ Ñ ÐºÐ°Ð¶Ð´Ñм **запÑоÑом** до его обÑабоÑки какой-либо конкÑеÑной *опеÑаÑией пÑÑи*. Ð Ñакже Ñ ÐºÐ°Ð¶Ð´Ñм **оÑвеÑом** пеÑед его возвÑаÑением.
* Ðна пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÐºÐ°Ð¶Ð´Ñй поÑÑÑпаÑÑий **запÑоÑ**.
* ÐÐ¾Ð¶ÐµÑ ÑÑо-Ñо ÑделаÑÑ Ñ ÑÑим **запÑоÑом** или вÑполниÑÑ Ð»Ñбой нÑжнÑй код.
@@ -23,23 +21,23 @@
## Создание middleware { #create-a-middleware }
-ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ middleware иÑполÑзÑйÑе декоÑаÑÐ¾Ñ `@app.middleware("http")`.
+ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ middleware иÑполÑзÑйÑе декоÑаÑÐ¾Ñ `@app.middleware("http")` повеÑÑ
ÑÑнкÑии.
ФÑнкÑÐ¸Ñ middleware полÑÑаеÑ:
-* `request` (обÑÐµÐºÑ Ð·Ð°Ð¿ÑоÑа).
+* `request`.
* ФÑнкÑÐ¸Ñ `call_next`, коÑоÑÐ°Ñ Ð¿Ð¾Ð»ÑÑÐ°ÐµÑ `request` в каÑеÑÑве паÑамеÑÑа.
* ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÐµÑедаÑÑ `request` ÑооÑвеÑÑÑвÑÑÑей *опеÑаÑии пÑÑи*.
- * ÐаÑем она возвÑаÑÐ°ÐµÑ Ð¾ÑÐ²ÐµÑ `response`, ÑгенеÑиÑованнÑй *опеÑаÑией пÑÑи*.
-* Также имееÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð²Ð¸Ð´Ð¾Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ `response`, пеÑед Ñем как его веÑнÑÑÑ.
+ * ÐаÑем она возвÑаÑÐ°ÐµÑ `response`, ÑгенеÑиÑованнÑй ÑооÑвеÑÑÑвÑÑÑей *опеÑаÑией пÑÑи*.
+* Также имееÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð²Ð¸Ð´Ð¾Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ `response` пеÑед Ñем как его веÑнÑÑÑ.
-{* ../../docs_src/middleware/tutorial001_py39.py hl[8:9,11,14] *}
+{* ../../docs_src/middleware/tutorial001_py310.py hl[8:9,11,14] *}
-/// tip | ÐÑимеÑание
+/// tip | СовеÑ
-ÐмейÑе в видÑ, ÑÑо можно добавлÑÑÑ Ñвои ÑобÑÑвеннÑе заголовки пÑи помоÑи пÑеÑикÑа 'X-'.
+ÐмейÑе в видÑ, ÑÑо можно добавлÑÑÑ Ð¿ÑопÑиеÑаÑнÑе HTTP-заголовки Ñ Ð¿ÑеÑикÑом `X-`.
-ÐÑли же Ð²Ñ Ñ
оÑиÑе добавиÑÑ ÑобÑÑвеннÑе заголовки, коÑоÑÑе ÐºÐ»Ð¸ÐµÐ½Ñ ÑÐ¼Ð¾Ð¶ÐµÑ ÑвидеÑÑ Ð² бÑаÑзеÑе, Ñо вам поÑÑебÑеÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¸Ñ
в наÑÑÑойки CORS ([CORS (Cross-Origin Resource Sharing)](cors.md){.internal-link target=_blank}), иÑполÑзÑÑ Ð¿Ð°ÑамеÑÑ `expose_headers`, Ñм. докÑменÑаÑÐ¸Ñ Starlette's CORS docs.
+Ðо еÑли Ð²Ñ Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ ÐºÐ»Ð¸ÐµÐ½Ñ Ð² бÑаÑзеÑе мог видеÑÑ Ð²Ð°Ñи полÑзоваÑелÑÑкие заголовки, необÑ
одимо добавиÑÑ Ð¸Ñ
в наÑÑÑойки CORS ([CORS (Cross-Origin Resource Sharing)](cors.md){.internal-link target=_blank}), иÑполÑзÑÑ Ð¿Ð°ÑамеÑÑ `expose_headers`, опиÑаннÑй в докÑменÑаÑии по CORS Starlette.
///
@@ -53,17 +51,17 @@
### Ðо и поÑле `response` { #before-and-after-the-response }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ ÐºÐ¾Ð´, иÑполÑзÑÑÑий `request` до пеÑедаÑи его какой-либо *опеÑаÑии пÑÑи*.
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ ÐºÐ¾Ð´, иÑполÑзÑÑÑий `request`, до пеÑедаÑи его какой-либо *опеÑаÑии пÑÑи*.
Ð Ñакже поÑле ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ `response`, до Ñого, как Ð²Ñ ÐµÐ³Ð¾ веÑнÑÑе.
ÐапÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ ÑобÑÑвеннÑй заголовок `X-Process-Time`, ÑодеÑжаÑий вÑÐµÐ¼Ñ Ð² ÑекÑндаÑ
, необÑ
одимое Ð´Ð»Ñ Ð¾Ð±ÑабоÑки запÑоÑа и генеÑаÑии оÑвеÑа:
-{* ../../docs_src/middleware/tutorial001_py39.py hl[10,12:13] *}
+{* ../../docs_src/middleware/tutorial001_py310.py hl[10,12:13] *}
-/// tip | ÐÑимеÑание
+/// tip | СовеÑ
-ÐÑ Ð¸ÑполÑзÑем `time.perf_counter()` вмеÑÑо `time.time()` Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑÑей ÑоÑноÑÑи наÑиÑ
пÑимеÑов. ð¤
+ÐÑ Ð¸ÑполÑзÑем `time.perf_counter()` вмеÑÑо `time.time()` Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑÑей ÑоÑноÑÑи в ÑакиÑ
ÑлÑÑаÑÑ
. ð¤
///
@@ -94,4 +92,4 @@ app.add_middleware(MiddlewareB)
РдÑÑгиÑ
middleware Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑзнаÑÑ Ð±Ð¾Ð»ÑÑе в Ñазделе [Advanced User Guide: Advanced Middleware](../advanced/middleware.md){.internal-link target=_blank}.
-Ð ÑледÑÑÑем Ñазделе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑоÑиÑаÑÑ, как наÑÑÑоиÑÑ CORS Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ middleware.
+Ð ÑледÑÑÑем Ñазделе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑоÑиÑаÑÑ, как наÑÑÑоиÑÑ CORS Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ middleware.
diff --git a/docs/ru/docs/tutorial/path-operation-configuration.md b/docs/ru/docs/tutorial/path-operation-configuration.md
index 112a1efca5..31531c67f1 100644
--- a/docs/ru/docs/tutorial/path-operation-configuration.md
+++ b/docs/ru/docs/tutorial/path-operation-configuration.md
@@ -4,7 +4,7 @@
/// warning | Ðнимание
-ÐомниÑе, ÑÑо ÑÑи паÑамеÑÑÑ Ð¿ÐµÑедаÑÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно *декоÑаÑоÑÑ Ð¾Ð¿ÐµÑаÑий пÑÑи*, а не ваÑей *ÑÑнкÑии-обÑабоÑÑÐ¸ÐºÑ Ð¾Ð¿ÐµÑаÑий пÑÑи*.
+ÐомниÑе, ÑÑо ÑÑи паÑамеÑÑÑ Ð¿ÐµÑедаÑÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно *декоÑаÑоÑÑ Ð¾Ð¿ÐµÑаÑий пÑÑи*, а не ваÑей *ÑÑнкÑии-обÑабоÑÑÐ¸ÐºÑ Ð¿ÑÑи*.
///
@@ -46,7 +46,7 @@
**FastAPI** поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑо Ñак же, как и в ÑлÑÑае Ñ Ð¾Ð±ÑÑнÑми ÑÑÑоками:
-{* ../../docs_src/path_operation_configuration/tutorial002b_py39.py hl[1,8:10,13,18] *}
+{* ../../docs_src/path_operation_configuration/tutorial002b_py310.py hl[1,8:10,13,18] *}
## ÐÑаÑкое и ÑазвÑÑнÑÑое ÑодеÑжание { #summary-and-description }
@@ -56,7 +56,7 @@
## ÐпиÑание из ÑÑÑок докÑменÑаÑии { #description-from-docstring }
-Так как опиÑÐ°Ð½Ð¸Ñ Ð¾Ð±ÑÑно длиннÑе и ÑодеÑÐ¶Ð°Ñ Ð¼Ð½Ð¾Ð³Ð¾ ÑÑÑок, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¾Ð¿Ð¸Ñание *опеÑаÑии пÑÑи* в ÑÑнкÑии ÑÑÑоки докÑменÑаÑии и **FastAPI** пÑоÑиÑÐ°ÐµÑ ÐµÑ Ð¾ÑÑÑда.
+Так как опиÑÐ°Ð½Ð¸Ñ Ð¾Ð±ÑÑно длиннÑе и ÑодеÑÐ¶Ð°Ñ Ð¼Ð½Ð¾Ð³Ð¾ ÑÑÑок, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¾Ð¿Ð¸Ñание *опеÑаÑии пÑÑи* в ÑÑÑоке докÑменÑаÑии ÑÑнкÑии, и **FastAPI** пÑоÑиÑÐ°ÐµÑ ÐµÑ Ð¾ÑÑÑда.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Markdown в ÑÑÑоке докÑменÑаÑии, и он бÑÐ´ÐµÑ Ð¸Ð½ÑеÑпÑеÑиÑован и оÑобÑажÑн коÑÑекÑно (Ñ ÑÑеÑом оÑÑÑÑпа в ÑÑÑоке докÑменÑаÑии).
@@ -90,9 +90,9 @@ OpenAPI ÑказÑваеÑ, ÑÑо каждой *опеÑаÑии пÑÑи* не
## ÐбознаÑение *опеÑаÑии пÑÑи* как ÑÑÑаÑевÑей { #deprecate-a-path-operation }
-ÐÑли вам необÑ
одимо помеÑиÑÑ *опеÑаÑÐ¸Ñ Ð¿ÑÑи* как ÑÑÑаÑевÑÑÑ, пÑи ÑÑом не ÑдалÑÑ ÐµÑ, пеÑедайÑе паÑамеÑÑ `deprecated`:
+ÐÑли вам необÑ
одимо помеÑиÑÑ *опеÑаÑÐ¸Ñ Ð¿ÑÑи* как ÑÑÑаÑевÑÑÑ, пÑи ÑÑом не ÑдалÑÑ ÐµÑ, пеÑедайÑе паÑамеÑÑ `deprecated`:
-{* ../../docs_src/path_operation_configuration/tutorial006_py39.py hl[16] *}
+{* ../../docs_src/path_operation_configuration/tutorial006_py310.py hl[16] *}
Ðн бÑÐ´ÐµÑ ÑеÑко помеÑен как ÑÑÑаÑевÑий в инÑеÑакÑивной докÑменÑаÑии:
diff --git a/docs/ru/docs/tutorial/path-params-numeric-validations.md b/docs/ru/docs/tutorial/path-params-numeric-validations.md
index f0fe788051..6c1148b60c 100644
--- a/docs/ru/docs/tutorial/path-params-numeric-validations.md
+++ b/docs/ru/docs/tutorial/path-params-numeric-validations.md
@@ -44,7 +44,7 @@ Path-паÑамеÑÑ Ð²Ñегда ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм, п
РеÑли вам болÑÑе ниÑего не нÑжно ÑказÑваÑÑ Ð´Ð»Ñ ÑÑого паÑамеÑÑа, Ñо Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи иÑполÑзоваÑÑ `Query`.
-Ðо вам по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð½Ñжно иÑполÑзоваÑÑ `Path` Ð´Ð»Ñ path-паÑамеÑÑа `item_id`. РеÑли по какой-либо пÑиÑине Ð²Ñ Ð½Ðµ Ñ
оÑиÑе иÑполÑзоваÑÑ `Annotated`, Ñо могÑÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑие ÑложноÑÑи.
+Ðо вам по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð½Ñжно иÑполÑзоваÑÑ `Path` Ð´Ð»Ñ path-паÑамеÑÑа `item_id`. Рпо какой-либо пÑиÑине Ð²Ñ Ð½Ðµ Ñ
оÑиÑе иÑполÑзоваÑÑ `Annotated`.
ÐÑли Ð²Ñ Ð¿Ð¾Ð¼ÐµÑÑиÑе паÑамеÑÑ Ñо знаÑением по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÐµÑед дÑÑгим паÑамеÑÑом, Ñ ÐºÐ¾ÑоÑого Ð½ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ, Ñо Python ÑÐºÐ°Ð¶ÐµÑ Ð½Ð° оÑибкÑ.
@@ -54,11 +54,11 @@ Path-паÑамеÑÑ Ð²Ñегда ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм, п
ÐоÑÑÐ¾Ð¼Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ ÑÑнкÑÐ¸Ñ Ñак:
-{* ../../docs_src/path_params_numeric_validations/tutorial002_py39.py hl[7] *}
+{* ../../docs_src/path_params_numeric_validations/tutorial002_py310.py hl[7] *}
Ðо имейÑе в видÑ, ÑÑо еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе `Annotated`, Ð²Ñ Ð½Ðµ ÑÑолкнÑÑеÑÑ Ñ ÑÑой пÑоблемой, Ñак как Ð²Ñ Ð½Ðµ иÑполÑзÑеÑе знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð°ÑамеÑÑов ÑÑнкÑии Ð´Ð»Ñ `Query()` или `Path()`.
-{* ../../docs_src/path_params_numeric_validations/tutorial002_an_py39.py *}
+{* ../../docs_src/path_params_numeric_validations/tutorial002_an_py310.py *}
## ÐадайÑе нÑжнÑй вам поÑÑдок паÑамеÑÑов, полезнÑе пÑиÑÐ¼Ñ { #order-the-parameters-as-you-need-tricks }
@@ -83,13 +83,13 @@ Path-паÑамеÑÑ Ð²Ñегда ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм, п
Python не бÑÐ´ÐµÑ Ð½Ð¸Ñего делаÑÑ Ñ `*`, но он бÑÐ´ÐµÑ Ð·Ð½Ð°ÑÑ, ÑÑо вÑе ÑледÑÑÑие паÑамеÑÑÑ ÑвлÑÑÑÑÑ Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½Ñми аÑгÑменÑами (паÑами клÑÑ-знаÑение), Ñакже извеÑÑнÑми как kwargs, даже еÑли Ñ Ð½Ð¸Ñ
Ð½ÐµÑ Ð·Ð½Ð°Ñений по ÑмолÑаниÑ.
-{* ../../docs_src/path_params_numeric_validations/tutorial003_py39.py hl[7] *}
+{* ../../docs_src/path_params_numeric_validations/tutorial003_py310.py hl[7] *}
### ÐÑÑÑе Ñ `Annotated` { #better-with-annotated }
ÐмейÑе в видÑ, ÑÑо еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе `Annotated`, Ñо, поÑколÑÐºÑ Ð²Ñ Ð½Ðµ иÑполÑзÑеÑе знаÑений по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑов ÑÑнкÑии, Ñ Ð²Ð°Ñ Ð½Ðµ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð¾Ð¹ пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¸ вам, веÑоÑÑно, не пÑидÑÑÑÑ Ð¸ÑполÑзоваÑÑ `*`.
-{* ../../docs_src/path_params_numeric_validations/tutorial003_an_py39.py hl[10] *}
+{* ../../docs_src/path_params_numeric_validations/tutorial003_an_py310.py hl[10] *}
## ÐалидаÑÐ¸Ñ ÑиÑловÑÑ
даннÑÑ
: болÑÑе или Ñавно { #number-validations-greater-than-or-equal }
@@ -97,7 +97,7 @@ Python не бÑÐ´ÐµÑ Ð½Ð¸Ñего делаÑÑ Ñ `*`, но он бÑÐ´ÐµÑ Ð·
Ð ÑÑом пÑимеÑе пÑи Ñказании `ge=1`, паÑамеÑÑ `item_id` должен бÑÑÑ ÑелÑм ÑиÑлом "`g`reater than or `e`qual" â болÑÑе или Ñавно `1`.
-{* ../../docs_src/path_params_numeric_validations/tutorial004_an_py39.py hl[10] *}
+{* ../../docs_src/path_params_numeric_validations/tutorial004_an_py310.py hl[10] *}
## ÐалидаÑÐ¸Ñ ÑиÑловÑÑ
даннÑÑ
: болÑÑе и менÑÑе или Ñавно { #number-validations-greater-than-and-less-than-or-equal }
@@ -106,7 +106,7 @@ Python не бÑÐ´ÐµÑ Ð½Ð¸Ñего делаÑÑ Ñ `*`, но он бÑÐ´ÐµÑ Ð·
* `gt`: болÑÑе (`g`reater `t`han)
* `le`: менÑÑе или Ñавно (`l`ess than or `e`qual)
-{* ../../docs_src/path_params_numeric_validations/tutorial005_an_py39.py hl[10] *}
+{* ../../docs_src/path_params_numeric_validations/tutorial005_an_py310.py hl[10] *}
## ÐалидаÑÐ¸Ñ ÑиÑловÑÑ
даннÑÑ
: ÑиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой, болÑÑе и менÑÑе { #number-validations-floats-greater-than-and-less-than }
@@ -118,7 +118,7 @@ Python не бÑÐ´ÐµÑ Ð½Ð¸Ñего делаÑÑ Ñ `*`, но он бÑÐ´ÐµÑ Ð·
То же Ñамое ÑпÑаведливо и Ð´Ð»Ñ lt.
-{* ../../docs_src/path_params_numeric_validations/tutorial006_an_py39.py hl[13] *}
+{* ../../docs_src/path_params_numeric_validations/tutorial006_an_py310.py hl[13] *}
## РезÑме { #recap }
diff --git a/docs/ru/docs/tutorial/path-params.md b/docs/ru/docs/tutorial/path-params.md
index 83a7ed3ffe..7295697487 100644
--- a/docs/ru/docs/tutorial/path-params.md
+++ b/docs/ru/docs/tutorial/path-params.md
@@ -2,7 +2,7 @@
ÐÑ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ "паÑамеÑÑÑ" или "пеÑеменнÑе" пÑÑи, иÑполÑзÑÑ ÑинÑакÑÐ¸Ñ ÑоÑмаÑиÑованнÑÑ
ÑÑÑок Python:
-{* ../../docs_src/path_params/tutorial001_py39.py hl[6:7] *}
+{* ../../docs_src/path_params/tutorial001_py310.py hl[6:7] *}
ÐнаÑение паÑамеÑÑа пÑÑи `item_id` бÑÐ´ÐµÑ Ð¿ÐµÑедано в ÑÑнкÑÐ¸Ñ Ð² каÑеÑÑве аÑгÑменÑа `item_id`.
@@ -16,7 +16,7 @@
ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ñип паÑамеÑÑа пÑÑи в ÑÑнкÑии, иÑполÑзÑÑ ÑÑандаÑÑнÑе анноÑаÑии Ñипов Python:
-{* ../../docs_src/path_params/tutorial002_py39.py hl[7] *}
+{* ../../docs_src/path_params/tutorial002_py310.py hl[7] *}
ÐдеÑÑ, `item_id` обÑÑвлен Ñипом `int`.
@@ -26,7 +26,7 @@
///
-## ÐÑеобÑазование даннÑÑ
{ #data-conversion }
+## ÐÑеобÑазование даннÑÑ
{ #data-conversion }
ÐÑли запÑÑÑиÑе ÑÑÐ¾Ñ Ð¿ÑÐ¸Ð¼ÐµÑ Ð¸ пеÑейдÑÑе по адÑеÑÑ: http://127.0.0.1:8000/items/3, Ñо ÑвидиÑе оÑвеÑ:
@@ -38,7 +38,7 @@
ÐбÑаÑиÑе внимание на знаÑение `3`, коÑоÑое полÑÑила (и веÑнÑла) ÑÑнкÑиÑ. ÐÑо ÑелоÑиÑленнÑй Python `int`, а не ÑÑÑока `"3"`.
-ÐÑполÑзÑÑ Ñакое обÑÑвление Ñипов, **FastAPI** вÑполнÑÐµÑ Ð°Ð²ÑомаÑиÑеÑкий "паÑÑинг" запÑоÑов.
+ÐÑполÑзÑÑ Ñакое обÑÑвление Ñипов, **FastAPI** вÑполнÑÐµÑ Ð°Ð²ÑомаÑиÑеÑкий HTTP-запÑÐ¾Ñ "паÑÑинг".
///
@@ -118,13 +118,13 @@
ÐоÑколÑÐºÑ *опеÑаÑии пÑÑи* вÑполнÑÑÑÑÑ Ð² поÑÑдке иÑ
обÑÑвлениÑ, необÑ
одимо, ÑÑÐ¾Ð±Ñ Ð¿ÑÑÑ Ð´Ð»Ñ `/users/me` бÑл обÑÑвлен ÑанÑÑе, Ñем пÑÑÑ Ð´Ð»Ñ `/users/{user_id}`:
-{* ../../docs_src/path_params/tutorial003_py39.py hl[6,11] *}
+{* ../../docs_src/path_params/tutorial003_py310.py hl[6,11] *}
ÐнаÑе пÑÑÑ Ð´Ð»Ñ `/users/{user_id}` Ñакже бÑÐ´ÐµÑ ÑооÑвеÑÑÑвоваÑÑ `/users/me`, "подÑазÑмеваÑ", ÑÑо он полÑÑÐ°ÐµÑ Ð¿Ð°ÑамеÑÑ `user_id` Ñо знаÑением `"me"`.
ÐналогиÑно, Ð²Ñ Ð½Ðµ можеÑе пеÑеопÑеделиÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ñ Ð¿ÑÑем:
-{* ../../docs_src/path_params/tutorial003b_py39.py hl[6,11] *}
+{* ../../docs_src/path_params/tutorial003b_py310.py hl[6,11] *}
ÐеÑвÑй бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð²Ñегда, Ñак как пÑÑÑ ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ð¿ÐµÑвÑм.
@@ -140,11 +140,11 @@
ÐаÑем ÑоздайÑе аÑÑибÑÑÑ ÐºÐ»Ð°ÑÑа Ñ ÑикÑиÑованнÑми допÑÑÑимÑми знаÑениÑми:
-{* ../../docs_src/path_params/tutorial005_py39.py hl[1,6:9] *}
+{* ../../docs_src/path_params/tutorial005_py310.py hl[1,6:9] *}
/// tip | ÐодÑказка
-ÐÑли инÑеÑеÑно, Ñо "AlexNet", "ResNet" и "LeNet" - ÑÑо Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð´ÐµÐ»ÐµÐ¹ ÐаÑинного обÑÑениÑ.
+ÐÑли инÑеÑеÑно, Ñо "AlexNet", "ResNet" и "LeNet" - ÑÑо Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð´ÐµÐ»ÐµÐ¹ ÐаÑинного обÑÑениÑ.
///
@@ -152,7 +152,7 @@
ÐпÑеделиÑе *паÑамеÑÑ Ð¿ÑÑи*, иÑполÑзÑÑ Ð² анноÑаÑии Ñипа клаÑÑ Ð¿ÐµÑеÑиÑÐ»ÐµÐ½Ð¸Ñ (`ModelName`), ÑозданнÑй Ñанее:
-{* ../../docs_src/path_params/tutorial005_py39.py hl[16] *}
+{* ../../docs_src/path_params/tutorial005_py310.py hl[16] *}
### ÐÑовеÑÑÑе докÑменÑаÑÐ¸Ñ { #check-the-docs }
@@ -168,13 +168,13 @@
ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑÑавниÑÑ ÑÑо знаÑение Ñ *ÑлеменÑом пеÑеÑиÑлениÑ* клаÑÑа `ModelName`:
-{* ../../docs_src/path_params/tutorial005_py39.py hl[17] *}
+{* ../../docs_src/path_params/tutorial005_py310.py hl[17] *}
#### ÐолÑÑение *знаÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеÑиÑлениÑ* { #get-the-enumeration-value }
Ðожно полÑÑиÑÑ ÑакÑиÑеÑкое знаÑение (в данном ÑлÑÑае - `str`) Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `model_name.value` или в обÑем ÑлÑÑае `your_enum_member.value`:
-{* ../../docs_src/path_params/tutorial005_py39.py hl[20] *}
+{* ../../docs_src/path_params/tutorial005_py310.py hl[20] *}
/// tip | ÐодÑказка
@@ -188,8 +188,8 @@
Ðни бÑдÑÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ Ð² ÑооÑвеÑÑÑвÑÑÑие знаÑÐµÐ½Ð¸Ñ (в данном ÑлÑÑае - ÑÑÑоки) пеÑед иÑ
возвÑаÑом клиенÑÑ:
-{* ../../docs_src/path_params/tutorial005_py39.py hl[18,21,23] *}
-ÐÑ Ð¾ÑпÑавиÑе клиенÑÑ Ñакой JSON-оÑвеÑ:
+{* ../../docs_src/path_params/tutorial005_py310.py hl[18,21,23] *}
+Ðа ÑÑоÑоне клиенÑа Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе Ñакой JSON-оÑвеÑ:
```JSON
{
@@ -226,7 +226,7 @@ OpenAPI не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑпоÑобов обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ *п
ÐожеÑе иÑполÑзоваÑÑ Ñак:
-{* ../../docs_src/path_params/tutorial004_py39.py hl[6] *}
+{* ../../docs_src/path_params/tutorial004_py310.py hl[6] *}
/// tip | ÐодÑказка
@@ -241,7 +241,7 @@ OpenAPI не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑпоÑобов обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ *п
ÐÑполÑзÑÑ **FastAPI** вмеÑÑе Ñо ÑÑандаÑÑнÑми обÑÑвлениÑми Ñипов Python (коÑоÑкими и инÑÑиÑивно понÑÑнÑми), Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе:
* ÐоддеÑÐ¶ÐºÑ ÑедакÑоÑа кода (пÑовеÑÐºÑ Ð¾Ñибок, авÑозавеÑÑение и Ñ.п.)
-* "ÐаÑÑинг" даннÑÑ
+* "ÐаÑÑинг" даннÑÑ
* ÐалидаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
* ÐнноÑаÑии API и авÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑиÑ
diff --git a/docs/ru/docs/tutorial/query-param-models.md b/docs/ru/docs/tutorial/query-param-models.md
index 5ad7f1d99d..7f29740acc 100644
--- a/docs/ru/docs/tutorial/query-param-models.md
+++ b/docs/ru/docs/tutorial/query-param-models.md
@@ -6,7 +6,7 @@
/// note | ÐамеÑка
-ÐÑÐ¾Ñ ÑÑнкÑионал доÑÑÑпен Ñ Ð²ÐµÑÑии `0.115.0`. ð¤
+ÐÑо поддеÑживаеÑÑÑ Ð½Ð°ÑÐ¸Ð½Ð°Ñ Ñ Ð²ÐµÑÑии FastAPI `0.115.0`. ð¤
///
diff --git a/docs/ru/docs/tutorial/query-params-str-validations.md b/docs/ru/docs/tutorial/query-params-str-validations.md
index 2bc2fb22c5..43cbcad03c 100644
--- a/docs/ru/docs/tutorial/query-params-str-validations.md
+++ b/docs/ru/docs/tutorial/query-params-str-validations.md
@@ -47,40 +47,16 @@ FastAPI поймÑÑ, ÑÑо знаÑение `q` не обÑзаÑелÑно,
У Ð½Ð°Ñ Ð±Ñла ÑÐ°ÐºÐ°Ñ Ð°Ð½Ð½Ð¾ÑаÑÐ¸Ñ Ñипа:
-//// tab | Python 3.10+
-
```Python
q: str | None = None
```
-////
-
-//// tab | Python 3.9+
-
-```Python
-q: Union[str, None] = None
-```
-
-////
-
ÐÑ Â«Ð¾Ð±ÐµÑнÑм» ÑÑо в `Annotated`, и полÑÑиÑÑÑ:
-//// tab | Python 3.10+
-
```Python
q: Annotated[str | None] = None
```
-////
-
-//// tab | Python 3.9+
-
-```Python
-q: Annotated[Union[str, None]] = None
-```
-
-////
-
Ðбе веÑÑии ознаÑаÑÑ Ð¾Ð´Ð½Ð¾ и Ñо же: `q` â паÑамеÑÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ `str` или `None`, и по ÑмолÑÐ°Ð½Ð¸Ñ Ñавен `None`.
Ð ÑепеÑÑ Ðº ÑÐ°Ð¼Ð¾Ð¼Ñ Ð¸Ð½ÑеÑеÑномÑ. ð
@@ -109,7 +85,7 @@ q: Annotated[Union[str, None]] = None
## ÐлÑÑеÑнаÑива (ÑÑÑаÑевÑее): `Query` как знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ { #alternative-old-query-as-the-default-value }
-РпÑедÑдÑÑиÑ
веÑÑиÑÑ
FastAPI (до 0.95.0) ÑÑебовалоÑÑ Ð¸ÑполÑзоваÑÑ `Query` как знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа вмеÑÑо помеÑÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ в `Annotated`. СкоÑее вÑего Ð²Ñ ÐµÑÑ Ð²ÑÑÑеÑиÑе Ñакой код, поÑÑÐ¾Ð¼Ñ Ð¿Ð¾ÑÑнÑ.
+РпÑедÑдÑÑиÑ
веÑÑиÑÑ
FastAPI (до 0.95.0) ÑÑебовалоÑÑ Ð¸ÑполÑзоваÑÑ `Query` как знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа вмеÑÑо помеÑÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ в `Annotated`. СкоÑее вÑего Ð²Ñ ÐµÑÑ Ð²ÑÑÑеÑиÑе Ñакой код, поÑÑÐ¾Ð¼Ñ Ð¿Ð¾ÑÑнÑ.
/// tip | ÐодÑказка
@@ -191,7 +167,7 @@ q: str = Query(default="rick")
## РегÑлÑÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ { #add-regular-expressions }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ ÑегÑлÑÑное вÑÑажение `pattern`, коÑоÑÐ¾Ð¼Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑооÑвеÑÑÑвоваÑÑ Ð¿Ð°ÑамеÑÑ:
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе опÑеделиÑÑ ÑегÑлÑÑное вÑÑажение `pattern`, коÑоÑÐ¾Ð¼Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑооÑвеÑÑÑвоваÑÑ Ð¿Ð°ÑамеÑÑ:
{* ../../docs_src/query_params_str_validations/tutorial004_an_py310.py hl[11] *}
@@ -211,7 +187,7 @@ q: str = Query(default="rick")
ÐопÑÑÑим, Ð²Ñ Ñ
оÑиÑе обÑÑвиÑÑ, ÑÑо query-паÑамеÑÑ `q` должен имеÑÑ `min_length` ÑавнÑй `3` и знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ `"fixedquery"`:
-{* ../../docs_src/query_params_str_validations/tutorial005_an_py39.py hl[9] *}
+{* ../../docs_src/query_params_str_validations/tutorial005_an_py310.py hl[9] *}
/// note | ÐÑимеÑание
@@ -241,7 +217,7 @@ q: Annotated[str | None, Query(min_length=3)] = None
ÐоÑÑомÑ, когда вам нÑжно обÑÑвиÑÑ Ð·Ð½Ð°Ñение как обÑзаÑелÑное пÑи иÑполÑзовании `Query`, пÑоÑÑо не ÑказÑвайÑе знаÑение по ÑмолÑаниÑ:
-{* ../../docs_src/query_params_str_validations/tutorial006_an_py39.py hl[9] *}
+{* ../../docs_src/query_params_str_validations/tutorial006_an_py310.py hl[9] *}
### ÐбÑзаÑелÑнÑй, но Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ `None` { #required-can-be-none }
@@ -292,7 +268,7 @@ http://localhost:8000/items/?q=foo&q=bar
Ðожно Ñакже опÑеделиÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ ÐºÐ°Ðº `list`, еÑли ниÑего не пеÑедано:
-{* ../../docs_src/query_params_str_validations/tutorial012_an_py39.py hl[9] *}
+{* ../../docs_src/query_params_str_validations/tutorial012_an_py310.py hl[9] *}
ÐÑли Ð²Ñ Ð¿ÐµÑейдÑÑе по адÑеÑÑ:
@@ -315,7 +291,7 @@ http://localhost:8000/items/
Ðожно иÑполÑзоваÑÑ `list` напÑÑмÑÑ Ð²Ð¼ÐµÑÑо `list[str]`:
-{* ../../docs_src/query_params_str_validations/tutorial013_an_py39.py hl[9] *}
+{* ../../docs_src/query_params_str_validations/tutorial013_an_py310.py hl[9] *}
/// note | ÐÑимеÑание
@@ -371,7 +347,7 @@ http://127.0.0.1:8000/items/?item-query=foobaritems
ÐÑедположим, ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²Ð°Ð¼ болÑÑе не нÑавиÑÑÑ.
-Ðго нÑжно оÑÑавиÑÑ Ð½Ð° какоеâÑо вÑемÑ, Ñак как клиенÑÑ ÐµÐ³Ð¾ иÑполÑзÑÑÑ, но Ð²Ñ Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð² докÑменÑаÑии он Ñвно оÑобÑажалÑÑ ÐºÐ°Ðº ÑÑÑаÑевÑий.
+Ðго нÑжно оÑÑавиÑÑ Ð½Ð° какоеâÑо вÑемÑ, Ñак как клиенÑÑ ÐµÐ³Ð¾ иÑполÑзÑÑÑ, но Ð²Ñ Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð² докÑменÑаÑии он Ñвно оÑобÑажалÑÑ ÐºÐ°Ðº ÑÑÑаÑевÑий.
Тогда пеÑедайÑе паÑамеÑÑ `deprecated=True` в `Query`:
@@ -401,7 +377,7 @@ http://127.0.0.1:8000/items/?item-query=foobaritems
///
-ÐапÑимеÑ, ÑÑа каÑÑÐ¾Ð¼Ð½Ð°Ñ Ð¿ÑовеÑка ÑбеждаеÑÑÑ, ÑÑо ID ÑлеменÑа наÑинаеÑÑÑ Ñ `isbn-` Ð´Ð»Ñ Ð½Ð¾Ð¼ÐµÑа книги ISBN или Ñ `imdb-` Ð´Ð»Ñ ID URL ÑилÑма на IMDB:
+ÐапÑимеÑ, ÑÑа каÑÑÐ¾Ð¼Ð½Ð°Ñ Ð¿ÑовеÑка ÑбеждаеÑÑÑ, ÑÑо ID ÑлеменÑа наÑинаеÑÑÑ Ñ `isbn-` Ð´Ð»Ñ Ð½Ð¾Ð¼ÐµÑа книги ISBN или Ñ `imdb-` Ð´Ð»Ñ ID URL ÑилÑма на IMDB:
{* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py hl[5,16:19,24] *}
@@ -435,7 +411,7 @@ http://127.0.0.1:8000/items/?item-query=foobaritems
#### СлÑÑайнÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ { #a-random-item }
-С помоÑÑÑ `data.items()` Ð¼Ñ Ð¿Ð¾Ð»ÑÑаем иÑеÑиÑÑемÑй обÑÐµÐºÑ Ñ ÐºÐ¾ÑÑежами, ÑодеÑжаÑими клÑÑ Ð¸ знаÑение Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлеменÑа ÑловаÑÑ.
+С помоÑÑÑ `data.items()` Ð¼Ñ Ð¿Ð¾Ð»ÑÑаем иÑеÑиÑÑемÑй обÑÐµÐºÑ Ñ ÐºÐ¾ÑÑежами, ÑодеÑжаÑими клÑÑ Ð¸ знаÑение Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑлеменÑа ÑловаÑÑ.
ÐÑ Ð¿ÑевÑаÑаем ÑÑÐ¾Ñ Ð¸ÑеÑиÑÑемÑй обÑÐµÐºÑ Ð² обÑÑнÑй `list` ÑеÑез `list(data.items())`.
diff --git a/docs/ru/docs/tutorial/query-params.md b/docs/ru/docs/tutorial/query-params.md
index be1c0e46e1..cbacb129c5 100644
--- a/docs/ru/docs/tutorial/query-params.md
+++ b/docs/ru/docs/tutorial/query-params.md
@@ -2,7 +2,7 @@
Ðогда Ð²Ñ Ð¾Ð±ÑÑвлÑеÑе паÑамеÑÑÑ ÑÑнкÑии, коÑоÑÑе не ÑвлÑÑÑÑÑ Ð¿Ð°ÑамеÑÑами пÑÑи, они авÑомаÑиÑеÑки инÑеÑпÑеÑиÑÑÑÑÑÑ ÐºÐ°Ðº "query"-паÑамеÑÑÑ.
-{* ../../docs_src/query_params/tutorial001_py39.py hl[9] *}
+{* ../../docs_src/query_params/tutorial001_py310.py hl[9] *}
Query-паÑамеÑÑÑ Ð¿ÑедÑÑавлÑÑÑ Ð¸Ð· ÑÐµÐ±Ñ Ð½Ð°Ð±Ð¾Ñ Ð¿Ð°Ñ ÐºÐ»ÑÑ-знаÑение, коÑоÑÑе идÑÑ Ð¿Ð¾Ñле знака `?` в URL-адÑеÑе, ÑазделеннÑе Ñимволами `&`.
@@ -24,7 +24,7 @@ http://127.0.0.1:8000/items/?skip=0&limit=10
ÐÑе Ñе же пÑавила, коÑоÑÑе пÑименÑÑÑÑÑ Ðº path-паÑамеÑÑам, Ñакже пÑименÑÑÑÑÑ Ð¸ query-паÑамеÑÑам:
* ÐоддеÑжка Ð¾Ñ ÑедакÑоÑа кода (оÑевидно)
-* "ÐаÑÑинг" даннÑÑ
+* "ÐаÑÑинг" даннÑÑ
* ÐÑовеÑка на ÑооÑвеÑÑÑвие даннÑÑ
(ÐалидаÑиÑ)
* ÐвÑомаÑиÑеÑÐºÐ°Ñ Ð´Ð¾ÐºÑменÑаÑиÑ
@@ -121,13 +121,13 @@ http://127.0.0.1:8000/items/foo?short=yes
## ÐбÑзаÑелÑнÑе query-паÑамеÑÑÑ { #required-query-parameters }
-Ðогда Ð²Ñ Ð¾Ð±ÑÑвлÑеÑе знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа, коÑоÑÑй не ÑвлÑеÑÑÑ path-паÑамеÑÑом (в ÑÑом Ñазделе, Ð¼Ñ Ð¿Ð¾ÐºÐ° ÑÑо познакомилиÑÑ ÑолÑко Ñ path-паÑамеÑÑами), Ñо он не ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм.
+Ðогда Ð²Ñ Ð¾Ð±ÑÑвлÑеÑе знаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа, коÑоÑÑй не ÑвлÑеÑÑÑ path-паÑамеÑÑом (в ÑÑом Ñазделе Ð¼Ñ Ð¿Ð¾ÐºÐ° ÑÑо ÑаÑÑмоÑÑели ÑолÑко query-паÑамеÑÑÑ), Ñо он не ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм.
ÐÑли Ð²Ñ Ð½Ðµ Ñ
оÑиÑе задаваÑÑ ÐºÐ¾Ð½ÐºÑеÑное знаÑение, но Ñ
оÑиÑе ÑделаÑÑ Ð¿Ð°ÑамеÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑм, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑÑановиÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ ÑавнÑм `None`.
Ðо еÑли Ð²Ñ Ñ
оÑиÑе ÑделаÑÑ query-паÑамеÑÑ Ð¾Ð±ÑзаÑелÑнÑм, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑоÑÑо не ÑказÑваÑÑ Ð·Ð½Ð°Ñение по ÑмолÑаниÑ:
-{* ../../docs_src/query_params/tutorial005_py39.py hl[6:7] *}
+{* ../../docs_src/query_params/tutorial005_py310.py hl[6:7] *}
ÐдеÑÑ Ð¿Ð°ÑамеÑÑ Ð·Ð°Ð¿ÑоÑа `needy` ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм паÑамеÑÑом Ñ Ñипом даннÑÑ
`str`.
diff --git a/docs/ru/docs/tutorial/request-files.md b/docs/ru/docs/tutorial/request-files.md
index 9cfbd53dfe..41922333f8 100644
--- a/docs/ru/docs/tutorial/request-files.md
+++ b/docs/ru/docs/tutorial/request-files.md
@@ -20,13 +20,13 @@ $ pip install python-multipart
ÐмпоÑÑиÑÑйÑе `File` и `UploadFile` из модÑÐ»Ñ `fastapi`:
-{* ../../docs_src/request_files/tutorial001_an_py39.py hl[3] *}
+{* ../../docs_src/request_files/tutorial001_an_py310.py hl[3] *}
## ÐпÑеделиÑе паÑамеÑÑÑ `File` { #define-file-parameters }
СоздайÑе паÑамеÑÑÑ `File` Ñак же, как Ð²Ñ ÑÑо делаеÑе Ð´Ð»Ñ `Body` или `Form`:
-{* ../../docs_src/request_files/tutorial001_an_py39.py hl[9] *}
+{* ../../docs_src/request_files/tutorial001_an_py310.py hl[9] *}
/// info | ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ
@@ -54,7 +54,7 @@ $ pip install python-multipart
ÐпÑеделиÑе паÑамеÑÑ Ñайла Ñ Ñипом `UploadFile`:
-{* ../../docs_src/request_files/tutorial001_an_py39.py hl[14] *}
+{* ../../docs_src/request_files/tutorial001_an_py310.py hl[14] *}
ÐÑполÑзование `UploadFile` Ð¸Ð¼ÐµÐµÑ ÑÑд пÑеимÑÑеÑÑв пеÑед `bytes`:
@@ -122,7 +122,7 @@ contents = myfile.file.read()
Ðо когда ÑоÑма вклÑÑÐ°ÐµÑ ÑайлÑ, она кодиÑÑеÑÑÑ ÐºÐ°Ðº multipart/form-data. ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе `File`, **FastAPI** бÑÐ´ÐµÑ Ð·Ð½Ð°ÑÑ, ÑÑо ÐµÐ¼Ñ Ð½Ñжно полÑÑиÑÑ ÑÐ°Ð¹Ð»Ñ Ð¸Ð· нÑжной ÑаÑÑи Ñела.
-ÐÑли Ð²Ñ Ñ
оÑиÑе ÑзнаÑÑ Ð±Ð¾Ð»ÑÑе об ÑÑиÑ
кодиÑовкаÑ
и полÑÑ
ÑоÑм, пеÑейдиÑе по ÑÑÑлке MDN web docs for POST.
+ÐÑли Ð²Ñ Ñ
оÑиÑе ÑзнаÑÑ Ð±Ð¾Ð»ÑÑе об ÑÑиÑ
кодиÑовкаÑ
и полÑÑ
ÑоÑм, пеÑейдиÑе по ÑÑÑлке MDN web docs for POST.
///
@@ -144,7 +144,7 @@ contents = myfile.file.read()
ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ `File()` вмеÑÑе Ñ `UploadFile`, напÑимеÑ, Ð´Ð»Ñ ÑÑÑановки дополниÑелÑнÑÑ
меÑаданнÑÑ
:
-{* ../../docs_src/request_files/tutorial001_03_an_py39.py hl[9,15] *}
+{* ../../docs_src/request_files/tutorial001_03_an_py310.py hl[9,15] *}
## ÐагÑÑзка неÑколÑкиÑ
Ñайлов { #multiple-file-uploads }
@@ -154,7 +154,7 @@ contents = myfile.file.read()
ÐÐ»Ñ ÑÑого необÑ
одимо обÑÑвиÑÑ ÑпиÑок `bytes` или `UploadFile`:
-{* ../../docs_src/request_files/tutorial002_an_py39.py hl[10,15] *}
+{* ../../docs_src/request_files/tutorial002_an_py310.py hl[10,15] *}
ÐÑ Ð¿Ð¾Ð»ÑÑиÑе, как и бÑло обÑÑвлено, ÑпиÑок `list` из `bytes` или `UploadFile`.
@@ -170,7 +170,7 @@ contents = myfile.file.read()
Так же, как и ÑанÑÑе, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `File()` Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ
паÑамеÑÑов, даже Ð´Ð»Ñ `UploadFile`:
-{* ../../docs_src/request_files/tutorial003_an_py39.py hl[11,18:20] *}
+{* ../../docs_src/request_files/tutorial003_an_py310.py hl[11,18:20] *}
## РезÑме { #recap }
diff --git a/docs/ru/docs/tutorial/request-form-models.md b/docs/ru/docs/tutorial/request-form-models.md
index f8c58356cb..f4411a27bc 100644
--- a/docs/ru/docs/tutorial/request-form-models.md
+++ b/docs/ru/docs/tutorial/request-form-models.md
@@ -24,7 +24,7 @@ $ pip install python-multipart
Ðам пÑоÑÑо нÑжно обÑÑвиÑÑ **Pydantic-моделÑ** Ñ Ð¿Ð¾Ð»Ñми, коÑоÑÑе Ð²Ñ Ñ
оÑиÑе полÑÑиÑÑ ÐºÐ°Ðº **Ð¿Ð¾Ð»Ñ ÑоÑмÑ**, а заÑем обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ ÐºÐ°Ðº `Form`:
-{* ../../docs_src/request_form_models/tutorial001_an_py39.py hl[9:11,15] *}
+{* ../../docs_src/request_form_models/tutorial001_an_py310.py hl[9:11,15] *}
**FastAPI** **извлеÑÑÑ** даннÑе Ð´Ð»Ñ **каждого полÑ** из **даннÑÑ
ÑоÑмÑ** в запÑоÑе и вÑдаÑÑ Ð²Ð°Ð¼ обÑÑвленнÑÑ Pydantic-моделÑ.
@@ -48,7 +48,7 @@ $ pip install python-multipart
ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑконÑигÑÑиÑоваÑÑ Pydantic-Ð¼Ð¾Ð´ÐµÐ»Ñ Ñак, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑеÑиÑÑ (`forbid`) вÑе дополниÑелÑнÑе (`extra`) полÑ:
-{* ../../docs_src/request_form_models/tutorial002_an_py39.py hl[12] *}
+{* ../../docs_src/request_form_models/tutorial002_an_py310.py hl[12] *}
ÐÑли ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿Ð¾Ð¿ÑобÑÐµÑ Ð¾ÑпÑавиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе даннÑе, Ñо в оÑÐ²ÐµÑ Ð¾Ð½ полÑÑÐ¸Ñ **оÑибкÑ**.
diff --git a/docs/ru/docs/tutorial/request-forms-and-files.md b/docs/ru/docs/tutorial/request-forms-and-files.md
index 691dc75ba3..10836d74fd 100644
--- a/docs/ru/docs/tutorial/request-forms-and-files.md
+++ b/docs/ru/docs/tutorial/request-forms-and-files.md
@@ -16,13 +16,13 @@ $ pip install python-multipart
## ÐмпоÑÑиÑÑйÑе `File` и `Form` { #import-file-and-form }
-{* ../../docs_src/request_forms_and_files/tutorial001_an_py39.py hl[3] *}
+{* ../../docs_src/request_forms_and_files/tutorial001_an_py310.py hl[3] *}
## ÐпÑеделиÑе паÑамеÑÑÑ `File` и `Form` { #define-file-and-form-parameters }
СоздайÑе паÑамеÑÑÑ Ñайла и ÑоÑÐ¼Ñ Ñаким же обÑазом, как Ð´Ð»Ñ `Body` или `Query`:
-{* ../../docs_src/request_forms_and_files/tutorial001_an_py39.py hl[10:12] *}
+{* ../../docs_src/request_forms_and_files/tutorial001_an_py310.py hl[10:12] *}
Ð¤Ð°Ð¹Ð»Ñ Ð¸ Ð¿Ð¾Ð»Ñ ÑоÑÐ¼Ñ Ð±ÑдÑÑ Ð·Ð°Ð³ÑÑÐ¶ÐµÐ½Ñ Ð² виде даннÑÑ
ÑоÑмÑ, и Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе ÑÐ°Ð¹Ð»Ñ Ð¸ Ð¿Ð¾Ð»Ñ ÑоÑмÑ.
diff --git a/docs/ru/docs/tutorial/request-forms.md b/docs/ru/docs/tutorial/request-forms.md
index e257652b61..01f71ac2fc 100644
--- a/docs/ru/docs/tutorial/request-forms.md
+++ b/docs/ru/docs/tutorial/request-forms.md
@@ -18,17 +18,17 @@ $ pip install python-multipart
ÐмпоÑÑиÑÑйÑе `Form` из `fastapi`:
-{* ../../docs_src/request_forms/tutorial001_an_py39.py hl[3] *}
+{* ../../docs_src/request_forms/tutorial001_an_py310.py hl[3] *}
## ÐпÑеделение паÑамеÑÑов `Form` { #define-form-parameters }
СоздайÑе паÑамеÑÑÑ ÑоÑÐ¼Ñ Ñак же, как ÑÑо делаеÑÑÑ Ð´Ð»Ñ `Body` или `Query`:
-{* ../../docs_src/request_forms/tutorial001_an_py39.py hl[9] *}
+{* ../../docs_src/request_forms/tutorial001_an_py310.py hl[9] *}
-ÐапÑимеÑ, в одном из ÑпоÑобов иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑпеÑиÑикаÑии OAuth2 (назÑваемом «поÑоком паÑолÑ») ÑÑебÑеÑÑÑ Ð¾ÑпÑавиÑÑ `username` и `password` в виде полей ÑоÑмÑ.
+ÐапÑимеÑ, в одном из ÑпоÑобов иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑпеÑиÑикаÑии OAuth2 (назÑваемом «password flow» - аÑÑенÑиÑикаÑÐ¸Ñ Ð¿Ð¾ паÑолÑ) ÑÑебÑеÑÑÑ Ð¾ÑпÑавиÑÑ `username` и `password` в виде полей ÑоÑмÑ.
-spec ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»Ñ Ð±Ñли ÑÑÑого Ð½Ð°Ð·Ð²Ð°Ð½Ñ `username` и `password` и оÑпÑавлÑлиÑÑ ÐºÐ°Ðº Ð¿Ð¾Ð»Ñ ÑоÑмÑ, а не JSON.
+ÑпеÑиÑикаÑÐ¸Ñ ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»Ñ Ð±Ñли ÑÑÑого Ð½Ð°Ð·Ð²Ð°Ð½Ñ `username` и `password` и оÑпÑавлÑлиÑÑ ÐºÐ°Ðº Ð¿Ð¾Ð»Ñ ÑоÑмÑ, а не JSON.
С помоÑÑÑ `Form` Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ñе же наÑÑÑойки, ÑÑо и Ñ `Body` (и `Query`, `Path`, `Cookie`), вклÑÑÐ°Ñ Ð²Ð°Ð»Ð¸Ð´Ð°ÑиÑ, пÑимеÑÑ, пÑевдоним (напÑимеÑ, `user-name` вмеÑÑо `username`) и Ñ.д.
@@ -56,7 +56,7 @@ $ pip install python-multipart
Ðо когда ÑоÑма ÑодеÑÐ¶Ð¸Ñ ÑайлÑ, она кодиÑÑеÑÑÑ ÐºÐ°Ðº `multipart/form-data`. Ð ÑабоÑе Ñ Ñайлами Ð²Ñ Ð¿ÑоÑÑÑÑе в ÑледÑÑÑей главе.
-ÐÑли Ð²Ñ Ñ
оÑиÑе ÑзнаÑÑ Ð±Ð¾Ð»ÑÑе пÑо ÑÑи кодиÑовки и Ð¿Ð¾Ð»Ñ ÑоÑмÑ, обÑаÑиÑеÑÑ Ðº MDN веб-докÑменÑаÑии Ð´Ð»Ñ `POST`.
+ÐÑли Ð²Ñ Ñ
оÑиÑе ÑзнаÑÑ Ð±Ð¾Ð»ÑÑе пÑо ÑÑи кодиÑовки и Ð¿Ð¾Ð»Ñ ÑоÑмÑ, обÑаÑиÑеÑÑ Ðº MDN веб-докÑменÑаÑии Ð´Ð»Ñ `POST`.
///
diff --git a/docs/ru/docs/tutorial/response-model.md b/docs/ru/docs/tutorial/response-model.md
index 22a811cd57..cd99ce28c7 100644
--- a/docs/ru/docs/tutorial/response-model.md
+++ b/docs/ru/docs/tutorial/response-model.md
@@ -183,7 +183,7 @@ FastAPI Ð´ÐµÐ»Ð°ÐµÑ Ð½ÐµÑколÑко веÑей внÑÑÑи вмеÑÑе Ñ
СамÑй ÑаÑпÑоÑÑÑанÑннÑй ÑлÑÑай â [возвÑаÑаÑÑ Response напÑÑмÑÑ, как опиÑано далее в ÑазделаÑ
докÑменÑаÑии Ð´Ð»Ñ Ð¿ÑодвинÑÑÑÑ
](../advanced/response-directly.md){.internal-link target=_blank}.
-{* ../../docs_src/response_model/tutorial003_02_py39.py hl[8,10:11] *}
+{* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *}
ÐÑÐ¾Ñ Ð¿ÑоÑÑой ÑлÑÑай обÑабаÑÑваеÑÑÑ FastAPI авÑомаÑиÑеÑки, поÑÐ¾Ð¼Ñ ÑÑо анноÑаÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаемого Ñипа â ÑÑо клаÑÑ (или подклаÑÑ) `Response`.
@@ -193,7 +193,7 @@ FastAPI Ð´ÐµÐ»Ð°ÐµÑ Ð½ÐµÑколÑко веÑей внÑÑÑи вмеÑÑе Ñ
ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ Ð¿Ð¾Ð´ÐºÐ»Ð°ÑÑ `Response` в анноÑаÑии Ñипа:
-{* ../../docs_src/response_model/tutorial003_03_py39.py hl[8:9] *}
+{* ../../docs_src/response_model/tutorial003_03_py310.py hl[8:9] *}
ÐÑо Ñоже ÑÑабоÑаеÑ, Ñак как `RedirectResponse` â подклаÑÑ `Response`, и FastAPI авÑомаÑиÑеÑки обÑабоÑÐ°ÐµÑ ÑÑÐ¾Ñ Ð¿ÑоÑÑой ÑлÑÑай.
@@ -201,7 +201,7 @@ FastAPI Ð´ÐµÐ»Ð°ÐµÑ Ð½ÐµÑколÑко веÑей внÑÑÑи вмеÑÑе Ñ
Ðо когда Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе пÑоизволÑнÑй обÑекÑ, не ÑвлÑÑÑийÑÑ Ð²Ð°Ð»Ð¸Ð´Ð½Ñм Ñипом Pydantic (напÑимеÑ, обÑÐµÐºÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
), и анноÑиÑÑеÑе его Ñаким обÑазом в ÑÑнкÑии, FastAPI попÑÑаеÑÑÑ ÑоздаÑÑ Ð¼Ð¾Ð´ÐµÐ»Ñ Ð¾ÑвеÑа Pydantic из ÑÑой анноÑаÑии Ñипа и поÑеÑÐ¿Ð¸Ñ Ð½ÐµÑдаÑÑ.
-То же пÑоизойдÑÑ, еÑли Ñ Ð²Ð°Ñ Ð±ÑÐ´ÐµÑ ÑÑо-Ñо вÑоде union ÑазнÑÑ
Ñипов, где один или неÑколÑко не ÑвлÑÑÑÑÑ Ð²Ð°Ð»Ð¸Ð´Ð½Ñми Ñипами Pydantic, напÑимеÑ, ÑÑо пÑиведÑÑ Ðº оÑибке ð¥:
+То же пÑоизойдÑÑ, еÑли Ñ Ð²Ð°Ñ Ð±ÑÐ´ÐµÑ ÑÑо-Ñо вÑоде union ÑазнÑÑ
Ñипов, где один или неÑколÑко не ÑвлÑÑÑÑÑ Ð²Ð°Ð»Ð¸Ð´Ð½Ñми Ñипами Pydantic, напÑимеÑ, ÑÑо пÑиведÑÑ Ðº оÑибке ð¥:
{* ../../docs_src/response_model/tutorial003_04_py310.py hl[8] *}
diff --git a/docs/ru/docs/tutorial/response-status-code.md b/docs/ru/docs/tutorial/response-status-code.md
index 30f642b643..13d982e803 100644
--- a/docs/ru/docs/tutorial/response-status-code.md
+++ b/docs/ru/docs/tutorial/response-status-code.md
@@ -8,7 +8,7 @@
* `@app.delete()`
* и дÑÑгиÑ
.
-{* ../../docs_src/response_status_code/tutorial001_py39.py hl[6] *}
+{* ../../docs_src/response_status_code/tutorial001_py310.py hl[6] *}
/// note | ÐÑимеÑание
@@ -66,7 +66,7 @@ FastAPI Ð·Ð½Ð°ÐµÑ Ð¾Ð± ÑÑом и ÑоздаÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Open
/// tip | ÐодÑказка
-ЧÑÐ¾Ð±Ñ ÑзнаÑÑ Ð±Ð¾Ð»ÑÑе о HTTP кодаÑ
ÑÑаÑÑÑа и о Ñом, Ð´Ð»Ñ Ñего каждÑй из ниÑ
пÑедназнаÑен, ознакомÑÑеÑÑ Ñ MDN докÑменÑаÑией об HTTP ÑÑаÑÑÑ-кодаÑ
.
+ЧÑÐ¾Ð±Ñ ÑзнаÑÑ Ð±Ð¾Ð»ÑÑе о HTTP кодаÑ
ÑÑаÑÑÑа и о Ñом, Ð´Ð»Ñ Ñего каждÑй из ниÑ
пÑедназнаÑен, ознакомÑÑеÑÑ Ñ MDN докÑменÑаÑией об HTTP ÑÑаÑÑÑ-кодаÑ
.
///
@@ -74,7 +74,7 @@ FastAPI Ð·Ð½Ð°ÐµÑ Ð¾Ð± ÑÑом и ÑоздаÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Open
РаÑÑмоÑÑим пÑедÑдÑÑий пÑÐ¸Ð¼ÐµÑ ÐµÑе Ñаз:
-{* ../../docs_src/response_status_code/tutorial001_py39.py hl[6] *}
+{* ../../docs_src/response_status_code/tutorial001_py310.py hl[6] *}
`201` â ÑÑо код ÑÑаÑÑÑа "Создано".
@@ -82,7 +82,7 @@ FastAPI Ð·Ð½Ð°ÐµÑ Ð¾Ð± ÑÑом и ÑоздаÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Open
ÐÐ»Ñ ÑдобÑÑва Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¿ÐµÑеменнÑе из `fastapi.status`.
-{* ../../docs_src/response_status_code/tutorial002_py39.py hl[1,6] *}
+{* ../../docs_src/response_status_code/tutorial002_py310.py hl[1,6] *}
Ðни ÑодеÑÐ¶Ð°Ñ Ñе же ÑиÑловÑе знаÑениÑ, но позволÑÑÑ Ð¸ÑполÑзоваÑÑ Ð°Ð²ÑозавеÑÑение ÑедакÑоÑа кода Ð´Ð»Ñ Ð²ÑбоÑа кода ÑÑаÑÑÑа:
@@ -90,7 +90,7 @@ FastAPI Ð·Ð½Ð°ÐµÑ Ð¾Ð± ÑÑом и ÑоздаÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Open
/// note | ТеÑ
ниÑеÑкие деÑали
-ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ `from starlette import status` вмеÑÑо `from fastapi import status`.
+ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ `from starlette import status`.
**FastAPI** позволÑÐµÑ Ð¸ÑполÑзоваÑÑ ÐºÐ°Ðº `starlette.status`, Ñак и `fastapi.status` иÑклÑÑиÑелÑно Ð´Ð»Ñ ÑдобÑÑва ÑазÑабоÑÑиков. Ðо поÑÑавлÑеÑÑÑ fastapi.status непоÑÑедÑÑвенно из Starlette.
diff --git a/docs/ru/docs/tutorial/schema-extra-example.md b/docs/ru/docs/tutorial/schema-extra-example.md
index e4a97c8801..c7381aae25 100644
--- a/docs/ru/docs/tutorial/schema-extra-example.md
+++ b/docs/ru/docs/tutorial/schema-extra-example.md
@@ -74,7 +74,7 @@ OpenAPI 3.1.0 (иÑполÑзÑеÑÑÑ Ð½Ð°ÑÐ¸Ð½Ð°Ñ Ñ FastAPI 0.99.0) доб
Ðогда Ð²Ñ Ð´ÐµÐ»Ð°ÐµÑе ÑÑо, пÑимеÑÑ ÑÑановÑÑÑÑ ÑаÑÑÑÑ Ð²Ð½ÑÑÑенней **JSON Schema** Ð´Ð»Ñ Ð´Ð°Ð½Ð½ÑÑ
Ñела запÑоÑа.
-Тем не менее, на Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÑÑого Swagger UI, инÑÑÑÑменÑ, оÑвеÑаÑÑий за оÑобÑажение UI докÑменÑаÑии, не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿Ð¾ÐºÐ°Ð· неÑколÑкиÑ
пÑимеÑов Ð´Ð»Ñ Ð´Ð°Ð½Ð½ÑÑ
в **JSON Schema**. Ðо ниже еÑÑÑ Ð¾Ð±Ñ
одной пÑÑÑ.
+Тем не менее, на Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÑÑого Swagger UI, инÑÑÑÑменÑ, оÑвеÑаÑÑий за оÑобÑажение UI докÑменÑаÑии, не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿Ð¾ÐºÐ°Ð· неÑколÑкиÑ
пÑимеÑов Ð´Ð»Ñ Ð´Ð°Ð½Ð½ÑÑ
в **JSON Schema**. Ðо ниже еÑÑÑ Ð¾Ð±Ñ
одной пÑÑÑ.
### СпеÑиÑиÑеÑкие Ð´Ð»Ñ OpenAPI `examples` { #openapi-specific-examples }
diff --git a/docs/ru/docs/tutorial/security/first-steps.md b/docs/ru/docs/tutorial/security/first-steps.md
index 983e85e661..9b9673b842 100644
--- a/docs/ru/docs/tutorial/security/first-steps.md
+++ b/docs/ru/docs/tutorial/security/first-steps.md
@@ -20,7 +20,7 @@
СкопиÑÑйÑе пÑÐ¸Ð¼ÐµÑ Ð² Ñайл `main.py`:
-{* ../../docs_src/security/tutorial001_an_py39.py *}
+{* ../../docs_src/security/tutorial001_an_py310.py *}
## ÐапÑÑк { #run-it }
@@ -132,7 +132,7 @@ OAuth2 бÑл ÑпÑоекÑиÑован Ñак, ÑÑÐ¾Ð±Ñ Ð±Ñкенд или
ÐÑи Ñоздании ÑкземплÑÑа клаÑÑа `OAuth2PasswordBearer` Ð¼Ñ Ð¿ÐµÑедаем паÑамеÑÑ `tokenUrl`. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑодеÑÐ¶Ð¸Ñ URL, коÑоÑÑй ÐºÐ»Ð¸ÐµÐ½Ñ (ÑÑонÑенд, ÑабоÑаÑÑий в бÑаÑзеÑе полÑзоваÑелÑ) бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ Ð´Ð»Ñ Ð¾ÑпÑавки `username` и `password`, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ñокен.
-{* ../../docs_src/security/tutorial001_an_py39.py hl[8] *}
+{* ../../docs_src/security/tutorial001_an_py310.py hl[8] *}
/// tip | ÐодÑказка
@@ -170,7 +170,7 @@ oauth2_scheme(some, parameters)
ТепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пеÑедаÑÑ `oauth2_scheme` как завиÑимоÑÑÑ Ñ `Depends`.
-{* ../../docs_src/security/tutorial001_an_py39.py hl[12] *}
+{* ../../docs_src/security/tutorial001_an_py310.py hl[12] *}
ÐÑа завиÑимоÑÑÑ Ð¿ÑедоÑÑÐ°Ð²Ð¸Ñ `str`, коÑоÑÑй бÑÐ´ÐµÑ Ð¿ÑиÑвоен паÑамеÑÑÑ `token` *ÑÑнкÑии-обÑабоÑÑика пÑÑи*.
diff --git a/docs/ru/docs/tutorial/security/get-current-user.md b/docs/ru/docs/tutorial/security/get-current-user.md
index c6bc07cc16..8388b672c7 100644
--- a/docs/ru/docs/tutorial/security/get-current-user.md
+++ b/docs/ru/docs/tutorial/security/get-current-user.md
@@ -2,7 +2,7 @@
РпÑедÑдÑÑей главе ÑиÑÑема безопаÑноÑÑи (оÑÐ½Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð½Ð° ÑиÑÑеме внедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей) пеÑедавала *ÑÑнкÑии-обÑабоÑÑÐ¸ÐºÑ Ð¿ÑÑи* `token` Ñипа `str`:
-{* ../../docs_src/security/tutorial001_an_py39.py hl[12] *}
+{* ../../docs_src/security/tutorial001_an_py310.py hl[12] *}
Ðо ÑÑо вÑÑ ÐµÑÑ Ð½Ðµ ÑлиÑком полезно.
diff --git a/docs/ru/docs/tutorial/security/index.md b/docs/ru/docs/tutorial/security/index.md
index ebac013b6c..bd8da824b3 100644
--- a/docs/ru/docs/tutorial/security/index.md
+++ b/docs/ru/docs/tutorial/security/index.md
@@ -1,56 +1,56 @@
-# ÐаÑÑÑойка авÑоÑизаÑии { #security }
+# ÐезопаÑноÑÑÑ { #security }
СÑÑеÑÑвÑÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво ÑпоÑобов обеÑпеÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, аÑÑенÑиÑикаÑии и авÑоÑизаÑии.
-ÐбÑÑно ÑÑа Ñема ÑвлÑеÑÑÑ Ð´Ð¾ÑÑаÑоÑно Ñложной и ÑÑÑдной.
+ÐбÑÑно ÑÑа Ñема ÑвлÑеÑÑÑ Ð´Ð¾ÑÑаÑоÑно Ñложной и «ÑÑÑдной».
-Ðо многиÑ
ÑÑеймвоÑкаÑ
и ÑиÑÑемаÑ
ÑолÑко ÑабоÑа Ñ Ð¾Ð¿Ñеделением доÑÑÑпов к пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ аÑÑенÑиÑикаÑией ÑÑебÑÐµÑ Ð·Ð½Ð°ÑиÑелÑнÑÑ
заÑÑÐ°Ñ ÑÑилий и напиÑÐ°Ð½Ð¸Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑва кода (во многиÑ
ÑлÑÑаÑÑ
его обÑÑм Ð¼Ð¾Ð¶ÐµÑ ÑоÑÑавлÑÑÑ Ð±Ð¾Ð»ÐµÐµ 50% Ð¾Ñ Ð²Ñего напиÑанного кода).
+Ðо многиÑ
ÑÑеймвоÑкаÑ
и ÑиÑÑемаÑ
ÑолÑко ÑабоÑа Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑÑÑ Ð¸ аÑÑенÑиÑикаÑией ÑÑебÑÐµÑ Ð·Ð½Ð°ÑиÑелÑнÑÑ
заÑÑÐ°Ñ ÑÑилий и напиÑÐ°Ð½Ð¸Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑва кода (во многиÑ
ÑлÑÑаÑÑ
его обÑÑм Ð¼Ð¾Ð¶ÐµÑ ÑоÑÑавлÑÑÑ 50% или более Ð¾Ñ Ð²Ñего напиÑанного кода).
-**FastAPI** пÑедоÑÑавлÑÐµÑ Ð½ÐµÑколÑко инÑÑÑÑменÑов, коÑоÑÑе помогÑÑ Ð²Ð°Ð¼ наÑÑÑоиÑÑ **ÐвÑоÑизаÑиÑ** легко, бÑÑÑÑо, ÑÑандаÑÑнÑм ÑпоÑобом, без необÑ
одимоÑÑи изÑÑаÑÑ Ð²Ñе ÐµÑ ÑонкоÑÑи.
+**FastAPI** пÑедоÑÑавлÑÐµÑ Ð½ÐµÑколÑко инÑÑÑÑменÑов, коÑоÑÑе помогÑÑ Ð²Ð°Ð¼ ÑабоÑаÑÑ Ñ **безопаÑноÑÑÑÑ** легко, бÑÑÑÑо, ÑÑандаÑÑнÑм ÑпоÑобом, без необÑ
одимоÑÑи изÑÑаÑÑ Ð¸ ÑазбиÑаÑÑÑÑ Ð²Ð¾ вÑеÑ
ÑпеÑиÑикаÑиÑÑ
по безопаÑноÑÑи.
-Ðо ÑнаÑала давайÑе ÑаÑÑмоÑÑим некоÑоÑÑе неболÑÑие конÑепÑии.
+Ðо ÑнаÑала давайÑе ÑаÑÑмоÑÑим неÑколÑко неболÑÑиÑ
конÑепÑий.
-## ÐÑда-Ñо ÑоÑопиÑÑÑÑ? { #in-a-hurry }
+## ÐÐµÑ Ð²Ñемени? { #in-a-hurry }
-ÐÑли вам не нÑжна инÑоÑмаÑÐ¸Ñ Ð¾ какиÑ
-либо из ÑледÑÑÑиÑ
ÑеÑминов и вам пÑоÑÑо нÑжно добавиÑÑ Ð·Ð°ÑиÑÑ Ñ Ð°ÑÑенÑиÑикаÑией на оÑнове логина и паÑÐ¾Ð»Ñ *пÑÑмо ÑейÑаÑ*, пеÑеÑ
одиÑе к ÑледÑÑÑим главам.
+ÐÑли вам не Ð²Ð°Ð¶Ð½Ñ ÐºÐ°ÐºÐ¸Ðµ-либо из ÑÑиÑ
ÑеÑминов и вам пÑоÑÑо нÑжно добавиÑÑ Ð·Ð°ÑиÑÑ Ñ Ð°ÑÑенÑиÑикаÑией на оÑнове имени полÑзоваÑÐµÐ»Ñ Ð¸ паÑÐ¾Ð»Ñ Ð¿ÑÑмо ÑейÑаÑ, пеÑеÑ
одиÑе к ÑледÑÑÑим главам.
## OAuth2 { #oauth2 }
-OAuth2 - ÑÑо пÑоÑокол, коÑоÑÑй опÑеделÑÐµÑ Ð½ÐµÑколÑко ÑпоÑобов обÑабоÑки аÑÑенÑиÑикаÑии и авÑоÑизаÑии.
+OAuth2 - ÑÑо ÑпеÑиÑикаÑиÑ, коÑоÑÐ°Ñ Ð¾Ð¿ÑеделÑÐµÑ Ð½ÐµÑколÑко ÑпоÑобов обÑабоÑки аÑÑенÑиÑикаÑии и авÑоÑизаÑии.
-Ðн доволÑно обÑиÑен и оÑ
ваÑÑÐ²Ð°ÐµÑ Ð½ÐµÑколÑко ÑложнÑÑ
ваÑианÑов иÑполÑзованиÑ.
+ÐÑо доволÑно обÑиÑÐ½Ð°Ñ ÑпеÑиÑикаÑиÑ, оÑ
ваÑÑваÑÑÐ°Ñ Ð½ÐµÑколÑко ÑложнÑÑ
ваÑианÑов иÑполÑзованиÑ.
-OAuth2 вклÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ ÑпоÑÐ¾Ð±Ñ Ð°ÑÑенÑиÑикаÑии Ñ Ð¸ÑполÑзованием "ÑÑеÑÑей ÑÑоÑонÑ".
+Ðна вклÑÑÐ°ÐµÑ ÑпоÑÐ¾Ð±Ñ Ð°ÑÑенÑиÑикаÑии Ñ Ð¸ÑполÑзованием «ÑÑеÑÑей ÑÑоÑонÑ».
-ÐÑо Ñо, ÑÑо иÑполÑзÑÑÑ Ð¿Ð¾Ð´ Ñобой вÑе кнопки "вÑ
од Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Facebook, Google, X (Twitter), GitHub" на ÑÑÑаниÑаÑ
авÑоÑизаÑии.
+Ðменно ÑÑо иÑполÑзÑеÑÑÑ Ð²Ð¾ вÑеÑ
ÑиÑÑемаÑ
Ñ ÐºÐ½Ð¾Ð¿ÐºÐ°Ð¼Ð¸ «войÑи Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Facebook, Google, X (Twitter), GitHub».
### OAuth 1 { #oauth-1 }
-Ранее иÑполÑзовалÑÑ Ð¿ÑоÑокол OAuth 1, коÑоÑÑй ÑилÑно оÑлиÑаеÑÑÑ Ð¾Ñ OAuth2 и ÑвлÑеÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑложнÑм, поÑколÑÐºÑ Ð¾Ð½ вклÑÑал пÑÑмÑе опиÑÐ°Ð½Ð¸Ñ Ñого, как ÑиÑÑоваÑÑ ÑообÑение.
+Ранее иÑполÑзовалÑÑ OAuth 1, коÑоÑÑй ÑилÑно оÑлиÑаеÑÑÑ Ð¾Ñ OAuth2 и ÑвлÑеÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑложнÑм, поÑколÑÐºÑ Ð¾Ð½ вклÑÑал пÑÑмÑе ÑпеÑиÑикаÑии Ñого, как ÑиÑÑоваÑÑ Ð¾Ð±Ð¼ÐµÐ½ даннÑми.
РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¾Ð½ не оÑÐµÐ½Ñ Ð¿Ð¾Ð¿ÑлÑÑен и не иÑполÑзÑеÑÑÑ.
-OAuth2 не ÑказÑваеÑ, как ÑиÑÑоваÑÑ ÑообÑение, он ожидаеÑ, ÑÑо ваÑе пÑиложение бÑÐ´ÐµÑ Ð¾Ð±ÑлÑживаÑÑÑÑ Ð¿Ð¾ пÑоÑÐ¾ÐºÐ¾Ð»Ñ HTTPS.
+OAuth2 не ÑказÑваеÑ, как ÑиÑÑоваÑÑ Ð¾Ð±Ð¼ÐµÐ½ даннÑми, он ожидаеÑ, ÑÑо ваÑе пÑиложение бÑÐ´ÐµÑ Ð¾Ð±ÑлÑживаÑÑÑÑ Ð¿Ð¾ пÑоÑÐ¾ÐºÐ¾Ð»Ñ HTTPS.
/// tip | ÐодÑказка
-Ð Ñазделе **РазвеÑÑÑвание** Ð²Ñ ÑвидиÑе как наÑÑÑоиÑÑ Ð¿ÑоÑокол HTTPS беÑплаÑно, иÑполÑзÑÑ Traefik и Let's Encrypt.
+Ð Ñазделе о **ÑазвеÑÑÑвании** Ð²Ñ ÑвидиÑе, как наÑÑÑоиÑÑ HTTPS беÑплаÑно, иÑполÑзÑÑ Traefik и Let's Encrypt.
///
## OpenID Connect { #openid-connect }
-OpenID Connect - ÑÑо еÑе один пÑоÑокол, оÑнованнÑй на **OAuth2**.
+OpenID Connect â ÑÑо еÑÑ Ð¾Ð´Ð½Ð° ÑпеÑиÑикаÑиÑ, оÑÐ½Ð¾Ð²Ð°Ð½Ð½Ð°Ñ Ð½Ð° **OAuth2**.
-Ðн пÑоÑÑо ÑаÑÑиÑÑÐµÑ OAuth2, ÑÑоÑнÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе веÑи, не имеÑÑие однознаÑного опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð² OAuth2, в попÑÑке ÑделаÑÑ ÐµÐ³Ð¾ более ÑовмеÑÑимÑм.
+Ðна пÑоÑÑо ÑаÑÑиÑÑÐµÑ OAuth2, ÑÑоÑнÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе веÑи, коÑоÑÑе оÑноÑиÑелÑно неоднознаÑÐ½Ñ Ð² OAuth2, ÑÑаÑаÑÑÑ ÑделаÑÑ ÐµÐ³Ð¾ более ÑовмеÑÑимÑм.
-ÐапÑимеÑ, Ð´Ð»Ñ Ð²Ñ
ода в Google иÑполÑзÑеÑÑÑ OpenID Connect (коÑоÑÑй под Ñобой иÑполÑзÑÐµÑ OAuth2).
+ÐапÑимеÑ, Ð´Ð»Ñ Ð²Ñ
ода в Google иÑполÑзÑеÑÑÑ OpenID Connect (коÑоÑÑй под капоÑом иÑполÑзÑÐµÑ OAuth2).
Ðо вÑ
од в Facebook не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ OpenID Connect. У него еÑÑÑ ÑобÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð²Ð°ÑиаÑÐ¸Ñ OAuth2.
-### OpenID (не "OpenID Connect") { #openid-not-openid-connect }
+### OpenID (не «OpenID Connect») { #openid-not-openid-connect }
-Также Ñанее иÑполÑзовалÑÑ ÑÑандаÑÑ "OpenID", коÑоÑÑй пÑÑалÑÑ ÑеÑиÑÑ ÑÑ Ð¶Ðµ пÑоблемÑ, ÑÑо и **OpenID Connect**, но не бÑл оÑнован на OAuth2.
+Также Ñанее иÑполÑзовалаÑÑ ÑпеÑиÑикаÑÐ¸Ñ Â«OpenID», коÑоÑÐ°Ñ Ð¿ÑÑалаÑÑ ÑеÑиÑÑ ÑÑ Ð¶Ðµ задаÑÑ, ÑÑо и **OpenID Connect**, но не бÑла оÑнована на OAuth2.
Таким обÑазом, ÑÑо бÑла полноÑÐµÐ½Ð½Ð°Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑÐ½Ð°Ñ ÑиÑÑема.
@@ -62,45 +62,45 @@ OpenAPI (Ñанее извеÑÑнÑй как Swagger) - ÑÑо оÑкÑÑÑаÑ
**FastAPI** оÑнован на **OpenAPI**.
-ÐÑо Ñо, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñм налиÑие множеÑÑва авÑомаÑиÑеÑкиÑ
инÑеÑакÑивнÑÑ
инÑеÑÑейÑов докÑменÑиÑованиÑ, ÑгенеÑиÑованного кода и Ñ.д.
+ÐÑо Ñо, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñми неÑколÑко авÑомаÑиÑеÑкиÑ
инÑеÑакÑивнÑÑ
инÑеÑÑейÑов докÑменÑаÑии, генеÑаÑÐ¸Ñ ÐºÐ¾Ð´Ð° и Ñ.д.
-Ð OpenAPI еÑÑÑ ÑпоÑоб иÑполÑзоваÑÑ Ð½ÐµÑколÑко "ÑÑ
ем" безопаÑноÑÑи.
+Ð OpenAPI еÑÑÑ ÑпоÑоб опÑеделиÑÑ Ð½ÐµÑколÑко «ÑÑ
ем» безопаÑноÑÑи.
-Таким обÑазом, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе воÑполÑзоваÑÑÑÑ Ð¿ÑеимÑÑеÑÑвами ÐÑеÑ
ÑÑиÑ
ÑÑандаÑÑнÑÑ
инÑÑÑÑменÑов, вклÑÑÐ°Ñ Ð¸Ð½ÑеÑакÑивнÑе ÑиÑÑÐµÐ¼Ñ Ð´Ð¾ÐºÑменÑиÑованиÑ.
+ÐÑполÑзÑÑ Ð¸Ñ
, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе воÑполÑзоваÑÑÑÑ Ð¿ÑеимÑÑеÑÑвами вÑеÑ
ÑÑиÑ
инÑÑÑÑменÑов, оÑнованнÑÑ
на ÑÑандаÑÑаÑ
, вклÑÑÐ°Ñ Ð¸Ð½ÑеÑакÑивнÑе ÑиÑÑÐµÐ¼Ñ Ð´Ð¾ÐºÑменÑиÑованиÑ.
-OpenAPI Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ ÑледÑÑÑие ÑÑ
ÐµÐ¼Ñ Ð°Ð²ÑоÑизаÑии:
+OpenAPI опÑеделÑÐµÑ ÑледÑÑÑие ÑÑ
ÐµÐ¼Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи:
-* `apiKey`: ÑникалÑнÑй иденÑиÑикаÑÐ¾Ñ Ð´Ð»Ñ Ð¿ÑиложениÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÑÑен из:
- * ÐаÑамеÑÑов запÑоÑа.
- * Ðаголовка.
- * Cookies.
-* `http`: ÑÑандаÑÑнÑе ÑиÑÑÐµÐ¼Ñ Ð°ÑÑенÑиÑикаÑии по пÑоÑÐ¾ÐºÐ¾Ð»Ñ HTTP, вклÑÑаÑ:
- * `bearer`: заголовок `Authorization` Ñо знаÑением `Bearer {ÑникалÑнÑй Ñокен}`. ÐÑо ÑнаÑледовано Ð¾Ñ OAuth2.
- * ÐÐ°Ð·Ð¾Ð²Ð°Ñ Ð°ÑÑенÑиÑикаÑÐ¸Ñ Ð¿Ð¾ пÑоÑÐ¾ÐºÐ¾Ð»Ñ HTTP.
+* `apiKey`: ÑпеÑиÑиÑнÑй Ð´Ð»Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐºÐ»ÑÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑÑпаÑÑ Ð¸Ð·:
+ * паÑамеÑÑа запÑоÑа.
+ * HTTP-заголовка.
+ * cookie.
+* `http`: ÑÑандаÑÑнÑе ÑиÑÑÐµÐ¼Ñ Ð°ÑÑенÑиÑикаÑии по HTTP, вклÑÑаÑ:
+ * `bearer`: HTTP-заголовок `Authorization` Ñо знаÑением `Bearer ` плÑÑ Ñокен. ÐÑо ÑнаÑледовано Ð¾Ñ OAuth2.
+ * ÐÐ°Ð·Ð¾Ð²Ð°Ñ Ð°ÑÑенÑиÑикаÑÐ¸Ñ Ð¿Ð¾ HTTP.
* HTTP Digest и Ñ.д.
-* `oauth2`: вÑе ÑпоÑÐ¾Ð±Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи OAuth2 назÑваемÑе "поÑоки" (англ. "flows").
- * ÐекоÑоÑÑе из ÑÑиÑ
"поÑоков" подÑ
одÑÑ Ð´Ð»Ñ ÑеализаÑии аÑÑенÑиÑикаÑии ÑеÑез ÑÑоÑонний ÑеÑÐ²Ð¸Ñ Ð¸ÑполÑзÑÑÑий OAuth 2.0 (напÑимеÑ, Google, Facebook, X (Twitter), GitHub и Ñ.д.):
+* `oauth2`: вÑе ÑпоÑÐ¾Ð±Ñ OAuth2 Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи (назÑваÑÑÑÑ Â«Ð¿Ð¾Ñоками»).
+ * ÐеÑколÑко из ÑÑиÑ
«поÑоков» подÑ
одÑÑ Ð´Ð»Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð¿ÑовайдеÑа аÑÑенÑиÑикаÑии OAuth 2.0 (напÑимеÑ, Google, Facebook, X (Twitter), GitHub и Ñ.д.):
* `implicit`
* `clientCredentials`
* `authorizationCode`
- * Ðо еÑÑÑ Ð¾Ð´Ð¸Ð½ конкÑеÑнÑй "поÑок", коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð´ÐµÐ°Ð»Ñно иÑполÑзован Ð´Ð»Ñ Ð¾Ð±ÑабоÑки аÑÑенÑиÑикаÑии непоÑÑедÑÑвенно в Ñом же пÑиложении:
- * `password`: в некоÑоÑÑÑ
ÑледÑÑÑиÑ
главаÑ
бÑдÑÑ ÑаÑÑмоÑÑÐµÐ½Ñ Ð¿ÑимеÑÑ ÑÑого.
-* `openIdConnect`: ÑпоÑоб опÑеделиÑÑ, как авÑомаÑиÑеÑки обнаÑÑживаÑÑ Ð´Ð°Ð½Ð½Ñе аÑÑенÑиÑикаÑии OAuth2.
- * ÐÑо авÑомаÑиÑеÑкое обнаÑÑжение опÑеделено в ÑпеÑиÑикаÑии OpenID Connect.
+ * Ðо еÑÑÑ Ð¾Ð´Ð¸Ð½ конкÑеÑнÑй «поÑок», коÑоÑÑй можно идеалÑно иÑполÑзоваÑÑ Ð´Ð»Ñ Ð¾Ð±ÑабоÑки аÑÑенÑиÑикаÑии непоÑÑедÑÑвенно в ÑÑом же пÑиложении:
+ * `password`: в некоÑоÑÑÑ
ÑледÑÑÑиÑ
главаÑ
бÑдÑÑ Ð¿ÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð¿ÑимеÑÑ.
+* `openIdConnect`: Ð¸Ð¼ÐµÐµÑ ÑпоÑоб опÑеделиÑÑ, как авÑомаÑиÑеÑки обнаÑÑживаÑÑ Ð´Ð°Ð½Ð½Ñе аÑÑенÑиÑикаÑии OAuth2.
+ * Ðменно ÑÑо авÑомаÑиÑеÑкое обнаÑÑжение опÑеделено в ÑпеÑиÑикаÑии OpenID Connect.
/// tip | ÐодÑказка
-ÐнÑегÑаÑÐ¸Ñ ÑÑоÑонниÑ
ÑеÑвиÑов Ð´Ð»Ñ Ð°ÑÑенÑиÑикаÑии/авÑоÑизаÑии ÑакиÑ
как Google, Facebook, X (Twitter), GitHub и Ñ.д. оÑÑÑеÑÑвлÑеÑÑÑ Ð´Ð¾ÑÑаÑоÑно легко.
+ÐнÑегÑаÑÐ¸Ñ ÑÑоÑонниÑ
пÑовайдеÑов аÑÑенÑиÑикаÑии/авÑоÑизаÑии, ÑакиÑ
как Google, Facebook, X (Twitter), GitHub и Ñ.д., Ñакже возможна и оÑноÑиÑелÑно пÑоÑÑа.
-Самой Ñложной пÑоблемой ÑвлÑеÑÑÑ Ñоздание Ñакого пÑовайдеÑа аÑÑенÑиÑикаÑии/авÑоÑизаÑии, но **FastAPI** пÑедоÑÑавлÑÐµÑ Ð²Ð°Ð¼ инÑÑÑÑменÑÑ, позволÑÑÑие легко ÑÑо ÑделаÑÑ, вÑполнÑÑ Ð¿Ñи ÑÑом вÑÑ ÑÑжелÑÑ ÑабоÑÑ Ð·Ð° ваÑ.
+Самой Ñложной задаÑей ÑвлÑеÑÑÑ Ñоздание Ñакого пÑовайдеÑа аÑÑенÑиÑикаÑии/авÑоÑизаÑии, но **FastAPI** пÑедоÑÑавлÑÐµÑ Ð²Ð°Ð¼ инÑÑÑÑменÑÑ, позволÑÑÑие легко ÑÑо ÑделаÑÑ, вÑполнÑÑ Ð¿Ñи ÑÑом вÑÑ ÑÑжÑлÑÑ ÑабоÑÑ Ð·Ð° ваÑ.
///
-## ÐÑеимÑÑеÑÑва **FastAPI** { #fastapi-utilities }
+## ÐнÑÑÑÑменÑÑ **FastAPI** { #fastapi-utilities }
-Fast API пÑедоÑÑавлÑÐµÑ Ð½ÐµÑколÑко инÑÑÑÑменÑов Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ из ÑÑиÑ
ÑÑ
ем безопаÑноÑÑи в модÑле `fastapi.security`, коÑоÑÑе ÑпÑоÑаÑÑ Ð¸ÑполÑзование ÑÑиÑ
меÑ
анизмов безопаÑноÑÑи.
+FastAPI пÑедоÑÑавлÑÐµÑ Ð½ÐµÑколÑко инÑÑÑÑменÑов Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ из ÑÑиÑ
ÑÑ
ем безопаÑноÑÑи в модÑле `fastapi.security`, коÑоÑÑе ÑпÑоÑаÑÑ Ð¸ÑполÑзование ÑÑиÑ
меÑ
анизмов безопаÑноÑÑи.
-Ð ÑледÑÑÑиÑ
главаÑ
Ð²Ñ ÑвидиÑе, как обезопаÑиÑÑ Ñвой API, иÑполÑзÑÑ Ð¸Ð½ÑÑÑÑменÑÑ, пÑедоÑÑавлÑемÑе **FastAPI**.
+Ð ÑледÑÑÑиÑ
главаÑ
Ð²Ñ ÑвидиÑе, как добавиÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑÑ Ð² Ð²Ð°Ñ API, иÑполÑзÑÑ Ð¸Ð½ÑÑÑÑменÑÑ, пÑедоÑÑавлÑемÑе **FastAPI**.
-Ð Ð²Ñ Ñакже ÑвидиÑе, как он авÑомаÑиÑеÑки инÑегÑиÑÑеÑÑÑ Ð² ÑиÑÑÐµÐ¼Ñ Ð¸Ð½ÑеÑакÑивной докÑменÑаÑии.
+Ð Ð²Ñ Ñакже ÑвидиÑе, как ÑÑо авÑомаÑиÑеÑки инÑегÑиÑÑеÑÑÑ Ð² ÑиÑÑÐµÐ¼Ñ Ð¸Ð½ÑеÑакÑивной докÑменÑаÑии.
diff --git a/docs/ru/docs/tutorial/security/oauth2-jwt.md b/docs/ru/docs/tutorial/security/oauth2-jwt.md
index 803491f539..7838b07df4 100644
--- a/docs/ru/docs/tutorial/security/oauth2-jwt.md
+++ b/docs/ru/docs/tutorial/security/oauth2-jwt.md
@@ -1,10 +1,10 @@
# OAuth2 Ñ Ð¿Ð°Ñолем (и Ñ
еÑиÑованием), Bearer Ñ JWT-Ñокенами { #oauth2-with-password-and-hashing-bearer-with-jwt-tokens }
-ТепеÑÑ, когда Ñ Ð½Ð°Ñ Ð¾Ð¿Ñеделен пÑоÑеÑÑ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, давайÑе Ñделаем пÑиложение дейÑÑвиÑелÑно безопаÑнÑм, иÑполÑзÑÑ ÑÐ¾ÐºÐµÐ½Ñ JWT и безопаÑное Ñ
еÑиÑование паÑолей.
+ТепеÑÑ, когда Ñ Ð½Ð°Ñ Ð¾Ð¿Ñеделен пÑоÑеÑÑ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, давайÑе Ñделаем пÑиложение дейÑÑвиÑелÑно безопаÑнÑм, иÑполÑзÑÑ ÑÐ¾ÐºÐµÐ½Ñ JWT и безопаÑное Ñ
еÑиÑование паÑолей.
ÐÑÐ¾Ñ ÐºÐ¾Ð´ можно ÑеалÑно иÑполÑзоваÑÑ Ð² Ñвоем пÑиложении, ÑоÑ
ÑанÑÑÑ Ñ
ÑÑи паÑолей в базе даннÑÑ
и Ñ.д.
-ÐÑ Ð¿Ñодолжим ÑазбиÑаÑÑÑÑ, наÑÐ¸Ð½Ð°Ñ Ñ Ñого меÑÑа, на коÑоÑом оÑÑановилиÑÑ Ð² пÑедÑдÑÑей главе.
+ÐÑ Ð¿Ñодолжим ÑазбиÑаÑÑÑÑ, наÑÐ¸Ð½Ð°Ñ Ñ Ñого меÑÑа, на коÑоÑом оÑÑановилиÑÑ Ð² пÑедÑдÑÑей главе, и ÑаÑÑиÑим его.
## ÐÑо JWT { #about-jwt }
@@ -43,9 +43,11 @@ $ pip install pyjwt
/// info | ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ
+
ÐÑли Ð²Ñ Ð¿Ð»Ð°Ð½Ð¸ÑÑеÑе иÑполÑзоваÑÑ Ð°Ð»Ð³Ð¾ÑиÑÐ¼Ñ ÑиÑÑовой подпиÑи, Ñакие как RSA или ECDSA, вам ÑледÑÐµÑ ÑÑÑановиÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñеки кÑипÑогÑаÑии `pyjwt[crypto]`.
ÐодÑобнее об ÑÑом можно пÑоÑиÑаÑÑ Ð² докÑменÑаÑии по ÑÑÑановке PyJWT.
+
///
## ХеÑиÑование паÑолей { #password-hashing }
@@ -83,11 +85,13 @@ $ pip install "pwdlib[argon2]"
/// tip | ÐодÑказка
+
С помоÑÑÑ `pwdlib` можно даже наÑÑÑоиÑÑ ÐµÐ³Ð¾ на ÑÑение паÑолей, ÑозданнÑÑ
**Django**, плагином безопаÑноÑÑи **Flask** или многими дÑÑгими библиоÑеками.
Таким обÑазом, Ð²Ñ ÑможеÑе, напÑимеÑ, ÑовмеÑÑно иÑполÑзоваÑÑ Ð¾Ð´Ð½Ð¸ и Ñе же даннÑе из пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Django в базе даннÑÑ
Ñ Ð¿Ñиложением FastAPI. Ðли поÑÑепенно мигÑиÑоваÑÑ Django-пÑиложение, иÑполÑзÑÑ ÑÑ Ð¶Ðµ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.
ÐÑи ÑÑом полÑзоваÑели ÑмогÑÑ Ð¾Ð´Ð½Ð¾Ð²Ñеменно вÑ
одиÑÑ Ð² ÑиÑÑÐµÐ¼Ñ ÐºÐ°Ðº из пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Django, Ñак и из пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ **FastAPI**.
+
///
## ХеÑиÑование и пÑовеÑка паÑолей { #hash-and-verify-the-passwords }
@@ -97,11 +101,13 @@ $ pip install "pwdlib[argon2]"
СоздайÑе ÑкземплÑÑ PasswordHash Ñ ÑекомендованнÑми наÑÑÑойками â он бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ñ
ÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ пÑовеÑки паÑолей.
/// tip | ÐодÑказка
+
pwdlib Ñакже поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð°Ð»Ð³Ð¾ÑиÑм Ñ
еÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ bcrypt, но не вклÑÑÐ°ÐµÑ ÑÑÑаÑевÑие алгоÑиÑÐ¼Ñ â Ð´Ð»Ñ ÑабоÑÑ Ñ ÑÑÑаÑевÑими Ñ
ÑÑами ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ passlib.
ÐапÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÐµÐµ Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸ пÑовеÑки паÑолей, ÑгенеÑиÑованнÑÑ
дÑÑгой ÑиÑÑемой (напÑимеÑ, Django), но Ñ
ÑÑиÑоваÑÑ Ð²Ñе новÑе паÑоли дÑÑгим алгоÑиÑмом, напÑÐ¸Ð¼ÐµÑ Argon2 или Bcrypt.
РпÑи ÑÑом бÑÑÑ ÑовмеÑÑимÑм Ñо вÑеми ÑÑими ÑиÑÑемами.
+
///
СоздайÑе ÑлÑжебнÑÑ ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Ñ
ÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°ÑолÑ, поÑÑÑпаÑÑего Ð¾Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ.
@@ -110,10 +116,16 @@ pwdlib Ñакже поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð°Ð»Ð³Ð¾ÑиÑм Ñ
еÑиÑовани
РеÑе Ð¾Ð´Ð½Ñ â Ð´Ð»Ñ Ð°ÑÑенÑиÑикаÑии и возвÑаÑа полÑзоваÑелÑ.
-{* ../../docs_src/security/tutorial004_an_py310.py hl[8,49,56:57,60:61,70:76] *}
+{* ../../docs_src/security/tutorial004_an_py310.py hl[8,49,51,58:59,62:63,72:79] *}
+
+Ðогда `authenticate_user` вÑзÑваеÑÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ полÑзоваÑелÑ, коÑоÑого Ð½ÐµÑ Ð² базе даннÑÑ
, Ð¼Ñ Ð²Ñе Ñавно запÑÑкаем `verify_password` Ñ Ð¸ÑполÑзованием ÑикÑивного Ñ
ÑÑа.
+
+ÐÑо гаÑанÑиÑÑеÑ, ÑÑо ÑÐ½Ð´Ð¿Ð¾Ð¸Ð½Ñ Ð¾ÑвеÑÐ°ÐµÑ Ð¿ÑимеÑно за одно и Ñо же вÑÐµÐ¼Ñ Ð²Ð½Ðµ завиÑимоÑÑи Ð¾Ñ Ñого, ÑÑÑеÑÑвÑÐµÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸Ð»Ð¸ неÑ, пÑедоÑвÑаÑÐ°Ñ ÑайминговÑе аÑаки (аÑака по вÑемени), Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾ÑоÑÑÑ
можно бÑло Ð±Ñ Ð¿ÐµÑеÑиÑлÑÑÑ ÑÑÑеÑÑвÑÑÑие имена полÑзоваÑелей.
/// note | ТеÑ
ниÑеÑкие деÑали
+
ÐÑли пÑовеÑиÑÑ Ð½Ð¾Ð²ÑÑ (ÑалÑÑивÑÑ) Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
`fake_users_db`, Ñо можно ÑвидеÑÑ, как ÑепеÑÑ Ð²ÑглÑÐ´Ð¸Ñ Ñ
ÑÑиÑованнÑй паÑолÑ: `"$argon2id$v=19$m=65536,t=3,p=4$wagCPXjifgvUFBzq4hqe3w$CYaIb8sB+wtD+Vu/P4uod1+Qof8h+1g7bbDlBID48Rc"`.
+
///
## РабоÑа Ñ JWT Ñокенами { #handle-jwt-tokens }
@@ -144,7 +156,7 @@ $ openssl rand -hex 32
СоздайÑе ÑлÑжебнÑÑ ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑии нового Ñокена доÑÑÑпа.
-{* ../../docs_src/security/tutorial004_an_py310.py hl[4,7,13:15,29:31,79:87] *}
+{* ../../docs_src/security/tutorial004_an_py310.py hl[4,7,13:15,29:31,82:90] *}
## Ðбновление завиÑимоÑÑей { #update-the-dependencies }
@@ -154,7 +166,7 @@ $ openssl rand -hex 32
ÐÑли Ñокен недейÑÑвиÑелен, Ñо ÑÑÐ°Ð·Ñ Ð¶Ðµ веÑниÑе HTTP-оÑибкÑ.
-{* ../../docs_src/security/tutorial004_an_py310.py hl[90:107] *}
+{* ../../docs_src/security/tutorial004_an_py310.py hl[93:110] *}
## Ðбновление *опеÑаÑии пÑÑи* `/token` { #update-the-token-path-operation }
@@ -162,7 +174,7 @@ $ openssl rand -hex 32
СоздайÑе ÑеалÑнÑй Ñокен доÑÑÑпа JWT и веÑниÑе его
-{* ../../docs_src/security/tutorial004_an_py310.py hl[118:133] *}
+{* ../../docs_src/security/tutorial004_an_py310.py hl[121:136] *}
### ТеÑ
ниÑеÑкие подÑобноÑÑи о JWT клÑÑе `sub` { #technical-details-about-the-jwt-subject-sub }
@@ -202,7 +214,9 @@ Username: `johndoe`
Password: `secret`
/// check | ÐÑовеÑка
+
ÐбÑаÑиÑе внимание, ÑÑо нигде в коде не иÑполÑзÑеÑÑÑ Ð¾ÑкÑÑÑÑй ÑекÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ "`secret`", Ð¼Ñ Ð¸ÑполÑзÑем ÑолÑко его Ñ
ÑÑиÑованнÑÑ Ð²ÐµÑÑиÑ.
+
///
@@ -225,7 +239,9 @@ Password: `secret`
/// note | ТеÑ
ниÑеÑÐºÐ°Ñ Ð¸Ð½ÑоÑмаÑиÑ
+
ÐбÑаÑиÑе внимание на HTTP-заголовок `Authorization`, знаÑение коÑоÑого наÑинаеÑÑÑ Ñ `Bearer `.
+
///
## ÐÑодвинÑÑое иÑполÑзование `scopes` { #advanced-usage-with-scopes }
diff --git a/docs/ru/docs/tutorial/security/simple-oauth2.md b/docs/ru/docs/tutorial/security/simple-oauth2.md
index 36ff32c8ef..4b86a40139 100644
--- a/docs/ru/docs/tutorial/security/simple-oauth2.md
+++ b/docs/ru/docs/tutorial/security/simple-oauth2.md
@@ -236,7 +236,7 @@ UserInDB(
-ÐÑли ÑÑлкнÑÑÑ Ð½Ð° знаÑке замка и вÑйÑи из ÑиÑÑемÑ, а заÑем попÑÑаÑÑÑÑ Ð²ÑполниÑÑ ÑÑ Ð¶Ðµ опеÑаÑÐ¸Ñ ÐµÑÑ Ñаз, бÑÐ´ÐµÑ Ð²Ñдана оÑибка HTTP 401:
+ÐÑли ÑÑлкнÑÑÑ Ð½Ð° знаÑке замка и вÑйÑи из ÑиÑÑемÑ, а заÑем попÑобоваÑÑ Ð²ÑполниÑÑ ÑÑ Ð¶Ðµ опеÑаÑÐ¸Ñ ÐµÑÑ Ñаз, бÑÐ´ÐµÑ Ð²Ñдана оÑибка HTTP 401:
```JSON
{
diff --git a/docs/ru/docs/tutorial/sql-databases.md b/docs/ru/docs/tutorial/sql-databases.md
index 1d03465337..ed67739cc9 100644
--- a/docs/ru/docs/tutorial/sql-databases.md
+++ b/docs/ru/docs/tutorial/sql-databases.md
@@ -8,7 +8,7 @@
/// tip | ÐодÑказка
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð»ÑбÑÑ Ð´ÑÑгÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð´Ð»Ñ ÑабоÑÑ Ñ SQL или NoSQL базами даннÑÑ
(иногда иÑ
назÑваÑÑ "ORMs"), FastAPI ниÑего не навÑзÑваеÑ. ð
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð»ÑбÑÑ Ð´ÑÑгÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Ð´Ð»Ñ ÑабоÑÑ Ñ SQL или NoSQL базами даннÑÑ
(иногда иÑ
назÑваÑÑ "ORMs"), FastAPI ниÑего не навÑзÑваеÑ. ð
///
@@ -344,7 +344,7 @@ $ fastapi dev main.py
-ÐÑли Ð²Ñ Ð¿ÐµÑейдÑÑе в UI API `/docs`, Ð²Ñ ÑвидиÑе, ÑÑо он обновилÑÑ: ÑепеÑÑ Ð¿Ñи Ñоздании геÑÐ¾Ñ Ð¾Ð½ не Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ `id` Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñа и Ñ. д.
+ÐÑли Ð²Ñ Ð¿ÐµÑейдÑÑе в UI API `/docs`, Ð²Ñ ÑвидиÑе, ÑÑо он обновилÑÑ: ÑепеÑÑ Ð¿Ñи Ñоздании геÑÐ¾Ñ Ð¾Ð½ не Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ `id` Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñа и Ñ.д.
@@ -354,4 +354,4 @@ $ fastapi dev main.py
ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ **SQLModel** Ð´Ð»Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ñ SQL базой даннÑÑ
и ÑпÑоÑÑиÑÑ ÐºÐ¾Ð´ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ *моделей даннÑÑ
* и *моделей-ÑаблиÑ*.
-ÐоÑаздо болÑÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑзнаÑÑ Ð² докÑменÑаÑии **SQLModel**, Ñам еÑÑÑ Ð±Ð¾Ð»ÐµÐµ подÑобнÑй мини-ÑÑÑоÑиал по иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ SQLModel Ñ **FastAPI**. ð
+ÐоÑаздо болÑÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑзнаÑÑ Ð² докÑменÑаÑии **SQLModel**, Ñам еÑÑÑ Ð±Ð¾Ð»ÐµÐµ подÑобное мини-ÑÑководÑÑво по иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ SQLModel Ñ **FastAPI**. ð
diff --git a/docs/ru/docs/tutorial/static-files.md b/docs/ru/docs/tutorial/static-files.md
index f40cfe9b04..3b0cab8313 100644
--- a/docs/ru/docs/tutorial/static-files.md
+++ b/docs/ru/docs/tutorial/static-files.md
@@ -7,7 +7,7 @@
* ÐмпоÑÑиÑÑйÑе `StaticFiles`.
* "ÐÑимонÑиÑÑйÑе" ÑкземплÑÑ `StaticFiles()` к опÑеделÑÐ½Ð½Ð¾Ð¼Ñ Ð¿ÑÑи.
-{* ../../docs_src/static_files/tutorial001_py39.py hl[2,6] *}
+{* ../../docs_src/static_files/tutorial001_py310.py hl[2,6] *}
/// note | ТеÑ
ниÑеÑкие деÑали
diff --git a/docs/ru/docs/tutorial/testing.md b/docs/ru/docs/tutorial/testing.md
index ab58429c51..6dd2fe579a 100644
--- a/docs/ru/docs/tutorial/testing.md
+++ b/docs/ru/docs/tutorial/testing.md
@@ -30,7 +30,7 @@ $ pip install httpx
ÐапиÑиÑе пÑоÑÑое ÑÑвеÑждение Ñ `assert` Ð´Ð°Ð±Ñ Ð¿ÑовеÑиÑÑ Ð¸ÑÑинноÑÑÑ Python-вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ (ÑÑо Ñоже ÑÑандаÑÑ `pytest`).
-{* ../../docs_src/app_testing/tutorial001_py39.py hl[2,12,15:18] *}
+{* ../../docs_src/app_testing/tutorial001_py310.py hl[2,12,15:18] *}
/// tip | ÐодÑказка
@@ -76,7 +76,7 @@ $ pip install httpx
Ð Ñайле `main.py` наÑ
одиÑÑÑ ÐаÑе пÑиложение **FastAPI**:
-{* ../../docs_src/app_testing/app_a_py39/main.py *}
+{* ../../docs_src/app_testing/app_a_py310/main.py *}
### Файл ÑеÑÑов { #testing-file }
@@ -92,7 +92,7 @@ $ pip install httpx
Так как оба Ñайла наÑ
одÑÑÑÑ Ð² одной диÑекÑоÑии, Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾ÑÑа обÑекÑа пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð· Ñайла `main` в Ñайл `test_main` ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¾ÑноÑиÑелÑнÑй импоÑÑ:
-{* ../../docs_src/app_testing/app_a_py39/test_main.py hl[3] *}
+{* ../../docs_src/app_testing/app_a_py310/test_main.py hl[3] *}
...и пиÑаÑÑ Ð´Ð°Ð»ÑÑе ÑеÑÑÑ, как и ÑанÑÑе.
@@ -119,7 +119,7 @@ $ pip install httpx
ÐÑÑ ÐµÑÑÑ Ð¾Ð¿ÐµÑаÑÐ¸Ñ `POST`, и она Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑ Ð½ÐµÑколÑко оÑибок.
-Ðбе *опеÑаÑии пÑÑи* ÑÑебÑÑÑ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ Ð² запÑоÑе заголовка `X-Token`.
+Ðбе *опеÑаÑии пÑÑи* ÑÑебÑÑÑ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ Ð² запÑоÑе HTTP-заголовка `X-Token`.
{* ../../docs_src/app_testing/app_b_an_py310/main.py *}
@@ -139,7 +139,7 @@ $ pip install httpx
* ÐеÑедаÑÑе *path*-паÑамеÑÑÑ Ð¸Ð»Ð¸ *query*-паÑамеÑÑÑ, впиÑав иÑ
непоÑÑедÑÑвенно в ÑÑÑÐ¾ÐºÑ URL.
* ÐеÑедаÑÑе JSON в Ñеле запÑоÑа, пеÑедав Python-обÑÐµÐºÑ (напÑимеÑ: `dict`) ÑеÑез именованнÑй паÑамеÑÑ `json`.
* ÐÑли же Ðам необÑ
одимо оÑпÑавиÑÑ *ÑоÑÐ¼Ñ Ñ Ð´Ð°Ð½Ð½Ñми* вмеÑÑо JSON, Ñо иÑполÑзÑйÑе паÑамеÑÑ `data` вмеÑÑо `json`.
-* ÐÐ»Ñ Ð¿ÐµÑедаÑи *заголовков*, пеÑедайÑе обÑÐµÐºÑ `dict` ÑеÑез паÑамеÑÑ `headers`.
+* ÐÐ»Ñ Ð¿ÐµÑедаÑи *HTTP-заголовков*, пеÑедайÑе обÑÐµÐºÑ `dict` ÑеÑез паÑамеÑÑ `headers`.
* ÐÐ»Ñ Ð¿ÐµÑедаÑи *cookies* Ñакже пеÑедайÑе `dict`, но ÑеÑез паÑамеÑÑ `cookies`.
ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной инÑоÑмаÑии о пеÑедаÑе даннÑÑ
на бÑкенд Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `httpx` или `TestClient` ознакомÑÑеÑÑ Ñ Ð´Ð¾ÐºÑменÑаÑией HTTPX.
diff --git a/docs/ru/docs/virtual-environments.md b/docs/ru/docs/virtual-environments.md
index 43136298a3..f931cc3c82 100644
--- a/docs/ru/docs/virtual-environments.md
+++ b/docs/ru/docs/virtual-environments.md
@@ -53,7 +53,7 @@ $ cd awesome-project
## Создание виÑÑÑалÑного окÑÑÐ¶ÐµÐ½Ð¸Ñ { #create-a-virtual-environment }
-Ðогда Ð²Ñ Ð½Ð°ÑинаеÑе ÑабоÑаÑÑ Ð½Ð°Ð´ PythonâпÑоекÑом **впеÑвÑе**, ÑоздайÑе виÑÑÑалÑное окÑÑжение **внÑÑÑи ваÑего пÑоекÑа**.
+Ðогда Ð²Ñ Ð½Ð°ÑинаеÑе ÑабоÑаÑÑ Ð½Ð°Ð´ PythonâпÑоекÑом **впеÑвÑе**, ÑоздайÑе виÑÑÑалÑное окÑÑжение **внÑÑÑи ваÑего пÑоекÑа**.
/// tip | ÐодÑказка
@@ -166,7 +166,7 @@ $ source .venv/Scripts/activate
ÐаждÑй Ñаз, когда Ð²Ñ ÑÑÑанавливаеÑе **новÑй пакеÑ** в ÑÑо окÑÑжение, **акÑивиÑÑйÑе** окÑÑжение Ñнова.
-ÐÑо гаÑанÑиÑÑеÑ, ÑÑо еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе **пÑогÑÐ°Ð¼Ð¼Ñ ÑеÑминала (CLI)**, ÑÑÑановленнÑÑ ÑÑим пакеÑом, Ð²Ñ Ð±ÑдеÑе иÑполÑзоваÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ ÑÑ, ÑÑо из ваÑего виÑÑÑалÑного окÑÑжениÑ, а не какÑÑâÑо глобалÑно ÑÑÑановленнÑÑ, возможно дÑÑгой веÑÑии, Ñем вам нÑжна.
+ÐÑо гаÑанÑиÑÑеÑ, ÑÑо еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе **пÑогÑÐ°Ð¼Ð¼Ñ ÑеÑминала (CLI)**, ÑÑÑановленнÑÑ ÑÑим пакеÑом, Ð²Ñ Ð±ÑдеÑе иÑполÑзоваÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ ÑÑ, ÑÑо из ваÑего виÑÑÑалÑного окÑÑжениÑ, а не какÑÑâÑо глобалÑно ÑÑÑановленнÑÑ, возможно дÑÑгой веÑÑии, Ñем вам нÑжна.
///