From: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
Date: Thu, 11 Dec 2025 21:25:03 +0000 (+0100)
Subject: 🌐 Sync Russian docs (#14509)
X-Git-Tag: 0.124.3~4
X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f8b216df30f4d4fd36dccf7c7e885154a2699838;p=thirdparty%2Ffastapi%2Ffastapi.git
🌐 Sync Russian docs (#14509)
* Translate missing pages
* Update outdated translations
---
diff --git a/docs/ru/docs/_llm-test.md b/docs/ru/docs/_llm-test.md
index 476cc19244..9a15f6bb21 100644
--- a/docs/ru/docs/_llm-test.md
+++ b/docs/ru/docs/_llm-test.md
@@ -15,7 +15,7 @@
ТеÑÑÑ:
-## ФÑагменÑÑ ÐºÐ¾Ð´Ð° { #code-snippets}
+## ФÑагменÑÑ ÐºÐ¾Ð´Ð° { #code-snippets }
//// tab | ТеÑÑ
@@ -53,7 +53,7 @@ LLM, веÑоÑÑно, пеÑеведÑÑ ÑÑо непÑавилÑно. ÐнÑ
////
-## ÐавÑÑки во ÑÑагменÑаÑ
кода { #quotes-in-code-snippets}
+## ÐавÑÑки во ÑÑагменÑаÑ
кода { #quotes-in-code-snippets }
//// tab | ТеÑÑ
diff --git a/docs/ru/docs/advanced/additional-responses.md b/docs/ru/docs/advanced/additional-responses.md
index c63c0c08b0..1fc3715e41 100644
--- a/docs/ru/docs/advanced/additional-responses.md
+++ b/docs/ru/docs/advanced/additional-responses.md
@@ -175,7 +175,7 @@
ÐапÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй Ñип ÑодеÑжимого `image/png`, обÑÑвив, ÑÑо ваÑа опеÑаÑÐ¸Ñ Ð¿ÑÑи Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ JSONâобÑÐµÐºÑ (Ñ Ñипом ÑодеÑжимого `application/json`) или PNGâизобÑажение:
-{* ../../docs_src/additional_responses/tutorial002.py hl[19:24,28] *}
+{* ../../docs_src/additional_responses/tutorial002_py310.py hl[17:22,26] *}
/// note | ÐÑимеÑание
@@ -237,7 +237,7 @@ new_dict = {**old_dict, "new key": "new value"}
ÐапÑимеÑ:
-{* ../../docs_src/additional_responses/tutorial004.py hl[13:17,26] *}
+{* ../../docs_src/additional_responses/tutorial004_py310.py hl[11:15,24] *}
## ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± оÑвеÑаÑ
OpenAPI { #more-information-about-openapi-responses }
diff --git a/docs/ru/docs/advanced/advanced-dependencies.md b/docs/ru/docs/advanced/advanced-dependencies.md
index 339c0a3631..cc6691b300 100644
--- a/docs/ru/docs/advanced/advanced-dependencies.md
+++ b/docs/ru/docs/advanced/advanced-dependencies.md
@@ -144,7 +144,7 @@ checker(q="somequery")
### ФоновÑе задаÑи и завиÑимоÑÑи Ñ `yield`, ÑеÑ
ниÑеÑкие деÑали { #background-tasks-and-dependencies-with-yield-technical-details }
-Ðо FastAPI 0.106.0 вÑзÑваÑÑ Ð¸ÑклÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле `yield` бÑло невозможно: код поÑле `yield` в завиÑимоÑÑÑÑ
вÑполнÑлÑÑ Ñже поÑле оÑпÑавки оÑвеÑа, поÑÑÐ¾Ð¼Ñ [ÐбÑабоÑÑики иÑклÑÑений](../handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank} к ÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¼ÐµÐ½ÑÑ Ñже оÑÑабоÑали.
+Ðо FastAPI 0.106.0 вÑзÑваÑÑ Ð¸ÑклÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле `yield` бÑло невозможно: код поÑле `yield` в завиÑимоÑÑÑÑ
вÑполнÑлÑÑ Ñже поÑле оÑпÑавки оÑвеÑа, поÑÑÐ¾Ð¼Ñ [ÐбÑабоÑÑики иÑклÑÑений](../tutorial/handling-errors.md#install-custom-exception-handlers){.internal-link target=_blank} к ÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¼ÐµÐ½ÑÑ Ñже оÑÑабоÑали.
Так бÑло Ñделано в оÑновном Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло иÑполÑзоваÑÑ Ñе же обÑекÑÑ, «оÑданнÑе» завиÑимоÑÑÑми ÑеÑез `yield`, внÑÑÑи ÑоновÑÑ
задаÑ, поÑÐ¾Ð¼Ñ ÑÑо код поÑле `yield` вÑполнÑлÑÑ Ð¿Ð¾Ñле завеÑÑÐµÐ½Ð¸Ñ ÑоновÑÑ
задаÑ.
diff --git a/docs/ru/docs/advanced/behind-a-proxy.md b/docs/ru/docs/advanced/behind-a-proxy.md
index 281cb7f735..7119efe2dc 100644
--- a/docs/ru/docs/advanced/behind-a-proxy.md
+++ b/docs/ru/docs/advanced/behind-a-proxy.md
@@ -64,7 +64,7 @@ https://mysuperapp.com/items/
///
-### Ðак ÑабоÑаÑÑ Ð¿ÐµÑеÑÑлаемÑе заголовки пÑокÑи
+### Ðак ÑабоÑаÑÑ Ð¿ÐµÑеÑÑлаемÑе заголовки пÑокÑи { #how-proxy-forwarded-headers-work }
Ðиже показано, как пÑокÑи добавлÑÐµÑ Ð¿ÐµÑеÑÑлаемÑе заголовки Ð¼ÐµÐ¶Ð´Ñ ÐºÐ»Ð¸ÐµÐ½Ñом и ÑеÑвеÑом пÑиложениÑ:
@@ -443,6 +443,14 @@ $ fastapi run main.py --forwarded-allow-ips="*" --root-path /api/v1
///
+/// note | ТеÑ
ниÑеÑкие деÑали
+
+СвойÑÑво `servers` в ÑпеÑиÑикаÑии OpenAPI ÑвлÑеÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑм.
+
+ÐÑли Ð²Ñ Ð½Ðµ ÑкажеÑе паÑамеÑÑ `servers`, а `root_path` Ñавен `/`, Ñо ÑвойÑÑво `servers` в ÑгенеÑиÑованной ÑÑ
еме OpenAPI по ÑмолÑÐ°Ð½Ð¸Ñ Ð±ÑÐ´ÐµÑ Ð¾Ð¿ÑÑено. ÐÑо ÑквиваленÑно ÑеÑвеÑÑ Ñо знаÑением `url` ÑавнÑм `/`.
+
+///
+
### ÐÑклÑÑиÑÑ Ð°Ð²ÑомаÑиÑеÑкое добавление ÑеÑвеÑа из `root_path` { #disable-automatic-server-from-root-path }
ÐÑли Ð²Ñ Ð½Ðµ Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ FastAPI добавлÑл авÑомаÑиÑеÑкий ÑеÑвеÑ, иÑполÑзÑÑ `root_path`, ÑкажиÑе паÑамеÑÑ `root_path_in_servers=False`:
diff --git a/docs/ru/docs/advanced/dataclasses.md b/docs/ru/docs/advanced/dataclasses.md
index 816f744048..c37ce30236 100644
--- a/docs/ru/docs/advanced/dataclasses.md
+++ b/docs/ru/docs/advanced/dataclasses.md
@@ -4,7 +4,7 @@ FastAPI поÑÑÑоен повеÑÑ
**Pydantic**, и Ñ Ð¿Ð¾ÐºÐ°Ð·Ñвал в
Ðо FastAPI Ñакже поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¸ÑполÑзование `dataclasses` Ñем же ÑпоÑобом:
-{* ../../docs_src/dataclasses/tutorial001.py hl[1,7:12,19:20] *}
+{* ../../docs_src/dataclasses/tutorial001_py310.py hl[1,6:11,18:19] *}
ÐÑо по-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ Ð±Ð»Ð°Ð³Ð¾Ð´Ð°ÑÑ **Pydantic**, Ñак как в нÑм еÑÑÑ Ð²ÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ Ð¿Ð¾Ð´Ð´ÐµÑжка `dataclasses`.
@@ -32,7 +32,7 @@ FastAPI поÑÑÑоен повеÑÑ
**Pydantic**, и Ñ Ð¿Ð¾ÐºÐ°Ð·Ñвал в
ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ `dataclasses` в паÑамеÑÑе `response_model`:
-{* ../../docs_src/dataclasses/tutorial002.py hl[1,7:13,19] *}
+{* ../../docs_src/dataclasses/tutorial002_py310.py hl[1,6:12,18] *}
ÐÑÐ¾Ñ dataclass бÑÐ´ÐµÑ Ð°Ð²ÑомаÑиÑеÑки пÑеобÑазован в Pydantic dataclass.
@@ -48,7 +48,7 @@ FastAPI поÑÑÑоен повеÑÑ
**Pydantic**, и Ñ Ð¿Ð¾ÐºÐ°Ð·Ñвал в
Ð Ñаком ÑлÑÑае Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑоÑÑо замениÑÑ ÑÑандаÑÑнÑе `dataclasses` на `pydantic.dataclasses`, коÑоÑÐ°Ñ ÑвлÑеÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ ÑовмеÑÑимой заменой (drop-in replacement):
-{* ../../docs_src/dataclasses/tutorial003.py hl[1,5,8:11,14:17,23:25,28] *}
+{* ../../docs_src/dataclasses/tutorial003_py310.py hl[1,4,7:10,13:16,22:24,27] *}
1. ÐÑ Ð¿Ð¾-пÑÐµÐ¶Ð½ÐµÐ¼Ñ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑем `field` из ÑÑандаÑÑнÑÑ
`dataclasses`.
diff --git a/docs/ru/docs/advanced/openapi-callbacks.md b/docs/ru/docs/advanced/openapi-callbacks.md
index faf58370be..de7e283017 100644
--- a/docs/ru/docs/advanced/openapi-callbacks.md
+++ b/docs/ru/docs/advanced/openapi-callbacks.md
@@ -31,7 +31,7 @@
ÐÑа ÑаÑÑÑ Ð²Ð¿Ð¾Ð»Ð½Ðµ обÑÑна, болÑÑÐ°Ñ ÑаÑÑÑ ÐºÐ¾Ð´Ð° вам Ñже знакома:
-{* ../../docs_src/openapi_callbacks/tutorial001.py hl[9:13,36:53] *}
+{* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[7:11,34:51] *}
/// tip | СовеÑ
@@ -90,7 +90,7 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True})
СнаÑала ÑоздайÑе новÑй `APIRouter`, коÑоÑÑй бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð¾Ð´Ð¸Ð½ или неÑколÑко обÑаÑнÑÑ
вÑзовов.
-{* ../../docs_src/openapi_callbacks/tutorial001.py hl[3,25] *}
+{* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[1,23] *}
### СоздайÑе *опеÑаÑÐ¸Ñ Ð¿ÑÑи* Ð´Ð»Ñ Ð¾Ð±ÑаÑного вÑзова { #create-the-callback-path-operation }
@@ -101,7 +101,7 @@ httpx.post(callback_url, json={"description": "Invoice paid", "paid": True})
* ÐеÑоÑÑно, в ней должно бÑÑÑ Ð¾Ð±ÑÑвление Ñела запÑоÑа, напÑÐ¸Ð¼ÐµÑ `body: InvoiceEvent`.
* Ð Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±ÑÑвление модели оÑвеÑа, напÑÐ¸Ð¼ÐµÑ `response_model=InvoiceEventReceived`.
-{* ../../docs_src/openapi_callbacks/tutorial001.py hl[16:18,21:22,28:32] *}
+{* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[14:16,19:20,26:30] *}
ÐÑÑÑ 2 оÑновнÑÑ
оÑлиÑÐ¸Ñ Ð¾Ñ Ð¾Ð±ÑÑной *опеÑаÑии пÑÑи*:
@@ -169,7 +169,7 @@ https://www.external.org/events/invoices/2expen51ve
ТепеÑÑ Ð¸ÑполÑзÑйÑе паÑамеÑÑ `callbacks` в *декоÑаÑоÑе опеÑаÑии пÑÑи ваÑего API*, ÑÑÐ¾Ð±Ñ Ð¿ÐµÑедаÑÑ Ð°ÑÑибÑÑ `.routes` (ÑÑо, по ÑÑÑи, пÑоÑÑо `list` маÑÑÑÑÑов/*опеÑаÑий пÑÑи*) из ÑÑого маÑÑÑÑÑизаÑоÑа обÑаÑнÑÑ
вÑзовов:
-{* ../../docs_src/openapi_callbacks/tutorial001.py hl[35] *}
+{* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[33] *}
/// tip | СовеÑ
diff --git a/docs/ru/docs/advanced/path-operation-advanced-configuration.md b/docs/ru/docs/advanced/path-operation-advanced-configuration.md
index fcb3cd47f2..78a16a5583 100644
--- a/docs/ru/docs/advanced/path-operation-advanced-configuration.md
+++ b/docs/ru/docs/advanced/path-operation-advanced-configuration.md
@@ -50,7 +50,7 @@
ÐÑа ÑаÑÑÑ Ð½Ðµ попадÑÑ Ð² докÑменÑаÑиÑ, но дÑÑгие инÑÑÑÑменÑÑ (напÑимеÑ, Sphinx) ÑмогÑÑ Ð¸ÑполÑзоваÑÑ Ð¾ÑÑалÑное.
-{* ../../docs_src/path_operation_advanced_configuration/tutorial004.py hl[19:29] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial004_py310.py hl[17:27] *}
## ÐополниÑелÑнÑе оÑвеÑÑ { #additional-responses }
@@ -155,13 +155,13 @@
//// tab | Pydantic v2
-{* ../../docs_src/path_operation_advanced_configuration/tutorial007.py hl[17:22, 24] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py39.py hl[15:20, 22] *}
////
//// tab | Pydantic v1
-{* ../../docs_src/path_operation_advanced_configuration/tutorial007_pv1.py hl[17:22, 24] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial007_pv1_py39.py hl[15:20, 22] *}
////
@@ -179,13 +179,13 @@
//// tab | Pydantic v2
-{* ../../docs_src/path_operation_advanced_configuration/tutorial007.py hl[26:33] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py39.py hl[24:31] *}
////
//// tab | Pydantic v1
-{* ../../docs_src/path_operation_advanced_configuration/tutorial007_pv1.py hl[26:33] *}
+{* ../../docs_src/path_operation_advanced_configuration/tutorial007_pv1_py39.py hl[24:31] *}
////
diff --git a/docs/ru/docs/advanced/response-directly.md b/docs/ru/docs/advanced/response-directly.md
index febd40ed4a..3c10633e91 100644
--- a/docs/ru/docs/advanced/response-directly.md
+++ b/docs/ru/docs/advanced/response-directly.md
@@ -34,7 +34,7 @@
Ð ÑакиÑ
ÑлÑÑаÑÑ
Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ `jsonable_encoder` Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
пеÑед пеÑедаÑей иÑ
в оÑвеÑ:
-{* ../../docs_src/response_directly/tutorial001.py hl[6:7,21:22] *}
+{* ../../docs_src/response_directly/tutorial001_py310.py hl[5:6,20:21] *}
/// note | ТеÑ
ниÑеÑкие деÑали
diff --git a/docs/ru/docs/advanced/settings.md b/docs/ru/docs/advanced/settings.md
index a335548c3c..0ef46fb13c 100644
--- a/docs/ru/docs/advanced/settings.md
+++ b/docs/ru/docs/advanced/settings.md
@@ -148,7 +148,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
ÐÑÐ¾Ð´Ð¾Ð»Ð¶Ð°Ñ Ð¿ÑедÑдÑÑий пÑимеÑ, Ð²Ð°Ñ Ñайл `config.py` Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ñак:
-{* ../../docs_src/settings/app02/config.py hl[10] *}
+{* ../../docs_src/settings/app02_an_py39/config.py hl[10] *}
ÐбÑаÑиÑе внимание, ÑÑо ÑепеÑÑ Ð¼Ñ Ð½Ðµ Ñоздаем ÑкземплÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ `settings = Settings()`.
@@ -174,7 +174,7 @@ $ ADMIN_EMAIL="deadpool@example.com" APP_NAME="ChimichangApp" fastapi run main.p
Ðалее бÑÐ´ÐµÑ Ð¾ÑÐµÐ½Ñ Ð¿ÑоÑÑо пÑедоÑÑавиÑÑ Ð´ÑÑгой обÑÐµÐºÑ Ð½Ð°ÑÑÑоек во вÑÐµÐ¼Ñ ÑеÑÑиÑованиÑ, Ñоздав пеÑеопÑеделение завиÑимоÑÑи Ð´Ð»Ñ `get_settings`:
-{* ../../docs_src/settings/app02/test_main.py hl[9:10,13,21] *}
+{* ../../docs_src/settings/app02_an_py39/test_main.py hl[9:10,13,21] *}
РпеÑеопÑеделении завиÑимоÑÑи Ð¼Ñ Ð·Ð°Ð´Ð°ÐµÐ¼ новое знаÑение `admin_email` пÑи Ñоздании нового обÑекÑа `Settings`, а заÑем возвÑаÑаем ÑÑÐ¾Ñ Ð½Ð¾Ð²Ñй обÑекÑ.
@@ -217,7 +217,7 @@ APP_NAME="ChimichangApp"
//// tab | Pydantic v2
-{* ../../docs_src/settings/app03_an/config.py hl[9] *}
+{* ../../docs_src/settings/app03_an_py39/config.py hl[9] *}
/// tip | СовеÑ
@@ -229,7 +229,7 @@ APP_NAME="ChimichangApp"
//// tab | Pydantic v1
-{* ../../docs_src/settings/app03_an/config_pv1.py hl[9:10] *}
+{* ../../docs_src/settings/app03_an_py39/config_pv1.py hl[9:10] *}
/// tip | СовеÑ
diff --git a/docs/ru/docs/deployment/cloud.md b/docs/ru/docs/deployment/cloud.md
index a400d18434..955db2a157 100644
--- a/docs/ru/docs/deployment/cloud.md
+++ b/docs/ru/docs/deployment/cloud.md
@@ -4,11 +4,19 @@
РболÑÑинÑÑве ÑлÑÑаев Ñ Ð¾ÑновнÑÑ
облаÑнÑÑ
пÑовайдеÑов еÑÑÑ ÑÑководÑÑва по ÑазвеÑÑÑÐ²Ð°Ð½Ð¸Ñ FastAPI на иÑ
плаÑÑоÑме.
-## ÐблаÑнÑе пÑовайдеÑÑ â ÑпонÑоÑÑ { #cloud-providers-sponsors }
+## FastAPI Cloud { #fastapi-cloud }
+
+**FastAPI Cloud** Ñоздан Ñем же авÑоÑом и командой, ÑÑоÑÑими за **FastAPI**.
+
+Ðн ÑпÑоÑÐ°ÐµÑ Ð¿ÑоÑеÑÑ **ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±Ñаза**, **ÑазвеÑÑÑваниÑ** и **доÑÑÑпа** к API Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑми ÑÑилиÑми.
-ÐекоÑоÑÑе облаÑнÑе пÑовайдеÑÑ â¨ [**ÑпонÑиÑÑÑÑ FastAPI**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ⨠â ÑÑо обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð½ÐµÐ¿ÑеÑÑвное и здоÑовое ÑазвиÑие FastAPI и его ÑкоÑиÑÑемÑ.
+Ðн пеÑеноÑÐ¸Ñ ÑÐ¾Ñ Ð¶Ðµ **опÑÑ ÑазÑабоÑÑика** ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñиложений Ñ FastAPI на иÑ
**ÑазвеÑÑÑвание** в облаке. ð
+
+FastAPI Cloud â оÑновной ÑпонÑÐ¾Ñ Ð¸ иÑÑоÑник ÑинанÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ open source пÑоекÑов *FastAPI and friends*. â¨
+
+## ÐблаÑнÑе пÑовайдеÑÑ â ÑпонÑоÑÑ { #cloud-providers-sponsors }
-Ð ÑÑо показÑÐ²Ð°ÐµÑ Ð¸Ñ
иÑкÑеннÑÑ Ð¿ÑивеÑженноÑÑÑ FastAPI и его ÑообÑеÑÑÐ²Ñ (вам): они не ÑолÑко Ñ
оÑÑÑ Ð¿ÑедоÑÑавиÑÑ Ð²Ð°Ð¼ Ñ
оÑоÑий ÑеÑвиÑ, но и ÑÑÑемÑÑÑÑ Ð³Ð°ÑанÑиÑоваÑÑ, ÑÑо Ñ Ð²Ð°Ñ Ð±ÑÐ´ÐµÑ Ñ
оÑоÑий и ÑÑабилÑнÑй ÑÑеймвоÑк â FastAPI. ð
+ÐекоÑоÑÑе дÑÑгие облаÑнÑе пÑовайдеÑÑ â¨ [**ÑпонÑиÑÑÑÑ FastAPI**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ⨠Ñоже. ð
Ðозможно, Ð²Ñ Ð·Ð°Ñ
оÑиÑе попÑобоваÑÑ Ð¸Ñ
ÑеÑвиÑÑ Ð¸ воÑполÑзоваÑÑÑÑ Ð¸Ñ
ÑÑководÑÑвами:
diff --git a/docs/ru/docs/deployment/fastapicloud.md b/docs/ru/docs/deployment/fastapicloud.md
new file mode 100644
index 0000000000..9e7430ecb0
--- /dev/null
+++ b/docs/ru/docs/deployment/fastapicloud.md
@@ -0,0 +1,65 @@
+# FastAPI Cloud { #fastapi-cloud }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑазвеÑнÑÑÑ ÑÐ²Ð¾Ñ Ð¿Ñиложение FastAPI в FastAPI Cloud одной командой, пÑиÑоединÑйÑеÑÑ Ðº ÑпиÑÐºÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ, еÑли еÑÑ Ð½Ðµ Ñделали ÑÑого. ð
+
+## ÐÑ
од { #login }
+
+УбедиÑеÑÑ, ÑÑо Ñ Ð²Ð°Ñ Ñже еÑÑÑ Ð°ÐºÐºÐ°ÑÐ½Ñ **FastAPI Cloud** (Ð¼Ñ Ð¿ÑиглаÑили Ð²Ð°Ñ Ð¸Ð· ÑпиÑка Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ð).
+
+ÐаÑем вÑполниÑе вÑ
од:
+
+
+
+```console
+$ fastapi login
+
+You are logged in to FastAPI Cloud ð
+```
+
+
+
+## Ðеплой { #deploy }
+
+ТепеÑÑ ÑазвеÑниÑе пÑиложение одной командой:
+
+
+
+```console
+$ fastapi deploy
+
+Deploying to FastAPI Cloud...
+
+â
Deployment successful!
+
+ð Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev
+```
+
+
+
+ÐÐ¾Ñ Ð¸ вÑÑ! ТепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе оÑкÑÑÑÑ ÑÐ²Ð¾Ñ Ð¿Ñиложение по ÑÑÐ¾Ð¼Ñ URL. â¨
+
+## Ð FastAPI Cloud { #about-fastapi-cloud }
+
+**FastAPI Cloud** Ñоздан Ñем же авÑоÑом и командой, ÑÑо и **FastAPI**.
+
+Ðн ÑпÑоÑÐ°ÐµÑ Ð¿ÑоÑеÑÑ **ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±Ñаза**, **ÑазвеÑÑÑваниÑ** и **доÑÑÑпа** к API Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑми ÑÑилиÑми.
+
+Ðн пеÑеноÑÐ¸Ñ ÑÐ¾Ñ Ð¶Ðµ **опÑÑ ÑазÑабоÑÑика**, ÑÑо Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе пÑи Ñоздании пÑиложений на FastAPI, на иÑ
**ÑазвеÑÑÑвание** в облаке. ð
+
+Ðн Ñакже возÑмÑÑ Ð½Ð° ÑÐµÐ±Ñ Ð±Ð¾Ð»ÑÑинÑÑво веÑей, коÑоÑÑе ÑÑебÑÑÑÑÑ Ð¿Ñи ÑазвеÑÑÑвании пÑиложениÑ, напÑимеÑ:
+
+* HTTPS
+* РепликаÑÐ¸Ñ Ñ Ð°Ð²ÑомаÑиÑеÑким маÑÑÑабиÑованием на оÑнове запÑоÑов
+* и Ñ.д.
+
+FastAPI Cloud â оÑновной ÑпонÑÐ¾Ñ Ð¸ иÑÑоÑник ÑинанÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ open sourceâпÑоекÑов «FastAPI и дÑÑзÑÑ». â¨
+
+## РазвеÑÑÑвание Ñ Ð´ÑÑгиÑ
облаÑнÑÑ
пÑовайдеÑов { #deploy-to-other-cloud-providers }
+
+FastAPI â пÑÐ¾ÐµÐºÑ Ñ Ð¾ÑкÑÑÑÑм иÑÑ
однÑм кодом и оÑнован на ÑÑандаÑÑаÑ
. ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑазвеÑнÑÑÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI Ñ Ð»Ñбого облаÑного пÑовайдеÑа на Ð²Ð°Ñ Ð²ÑбоÑ.
+
+СледÑйÑе ÑÑководÑÑвам ваÑего облаÑного пÑовайдеÑа, ÑÑÐ¾Ð±Ñ ÑазвеÑнÑÑÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI Ñ Ð½Ð¸Ñ
. ð¤
+
+## РазвеÑÑÑвание на ÑобÑÑвенном ÑеÑвеÑе { #deploy-your-own-server }
+
+Ðозже в ÑÑом ÑÑководÑÑве по **ÑазвеÑÑÑваниÑ** Ñ Ñакже ÑаÑÑÐºÐ°Ð¶Ñ Ð²Ñе деÑали â ÑÑÐ¾Ð±Ñ Ð²Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð»Ð¸, ÑÑо пÑоиÑÑ
одиÑ, ÑÑо нÑжно ÑделаÑÑ Ð¸ как ÑазвеÑнÑÑÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI ÑамоÑÑоÑÑелÑно, в Ñом ÑиÑле на ÑобÑÑвеннÑÑ
ÑеÑвеÑаÑ
. ð¤
diff --git a/docs/ru/docs/deployment/index.md b/docs/ru/docs/deployment/index.md
index c85fa0d529..ffb77641dd 100644
--- a/docs/ru/docs/deployment/index.md
+++ b/docs/ru/docs/deployment/index.md
@@ -12,10 +12,12 @@
## СÑÑаÑегии ÑазвÑÑÑÑÐ²Ð°Ð½Ð¸Ñ { #deployment-strategies }
-РзавиÑимоÑÑи Ð¾Ñ Ð²Ð°Ñего конкÑеÑного ÑлÑÑаÑ, еÑÑÑ Ð½ÐµÑколÑко ÑпоÑобов ÑделаÑÑ ÑÑо.
+ÐÑÑÑ Ð½ÐµÑколÑко ÑпоÑобов ÑделаÑÑ ÑÑо, в завиÑимоÑÑи Ð¾Ñ Ð²Ð°Ñего конкÑеÑного ÑлÑÑÐ°Ñ Ð¸ иÑполÑзÑемÑÑ
вами инÑÑÑÑменÑов.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе **ÑазвеÑнÑÑÑ ÑеÑвеÑ** ÑамоÑÑоÑÑелÑно, иÑполÑзÑÑ ÑазлиÑнÑе инÑÑÑÑменÑÑ. ÐапÑимеÑ, можно иÑполÑзоваÑÑ **облаÑнÑй ÑеÑвиÑ**, коÑоÑÑй вÑÐ¿Ð¾Ð»Ð½Ð¸Ñ ÑаÑÑÑ ÑабоÑÑ Ð·Ð° ваÑ. Также Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ Ð¸ дÑÑгие ваÑианÑÑ.
+ÐапÑимеÑ, мÑ, команда, ÑÑоÑÑÐ°Ñ Ð·Ð° FastAPI, Ñоздали **FastAPI Cloud**, ÑÑÐ¾Ð±Ñ ÑделаÑÑ ÑазвÑÑÑÑвание пÑиложений FastAPI в облаке как можно более пÑоÑÑÑм и пÑÑмолинейнÑм, Ñ Ñем же ÑдобÑÑвом Ð´Ð»Ñ ÑазÑабоÑÑика, ÑÑо и пÑи ÑабоÑе Ñ FastAPI.
+
Ð ÑÑом блоке Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ Ð²Ð°Ð¼ некоÑоÑÑе из оÑновнÑÑ
конÑепÑий, коÑоÑÑе вÑ, веÑоÑÑно, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð² Ð²Ð¸Ð´Ñ Ð¿Ñи ÑазвеÑÑÑвании пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ **FastAPI** (Ñ
оÑÑ Ð±Ð¾Ð»ÑÑинÑÑво из ниÑ
пÑименимо к лÑÐ±Ð¾Ð¼Ñ Ð´ÑÑÐ³Ð¾Ð¼Ñ ÑÐ¸Ð¿Ñ Ð²ÐµÐ±-пÑиложений).
РпоÑледÑÑÑиÑ
ÑазделаÑ
Ð²Ñ ÑзнаеÑе болÑÑе деÑалей и меÑодов, необÑ
одимÑÑ
Ð´Ð»Ñ ÑÑого. â¨
diff --git a/docs/ru/docs/how-to/authentication-error-status-code.md b/docs/ru/docs/how-to/authentication-error-status-code.md
new file mode 100644
index 0000000000..5675cecc52
--- /dev/null
+++ b/docs/ru/docs/how-to/authentication-error-status-code.md
@@ -0,0 +1,17 @@
+# ÐÑполÑзование ÑÑаÑÑÑ
ÑÑаÑÑÑ-кодов оÑибок аÑÑенÑиÑикаÑии 403 { #use-old-403-authentication-error-status-codes }
+
+Ðо веÑÑии FastAPI `0.122.0`, когда вÑÑÑоеннÑе ÑÑилиÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи возвÑаÑали оÑÐ¸Ð±ÐºÑ ÐºÐ»Ð¸ÐµÐ½ÑÑ Ð¿Ð¾Ñле неÑдаÑной аÑÑенÑиÑикаÑии, они иÑполÑзовали HTTP ÑÑаÑÑÑ-код `403 Forbidden`.
+
+ÐаÑÐ¸Ð½Ð°Ñ Ñ Ð²ÐµÑÑии FastAPI `0.122.0`, иÑполÑзÑеÑÑÑ Ð±Ð¾Ð»ÐµÐµ подÑ
одÑÑий HTTP ÑÑаÑÑÑ-код `401 Unauthorized`, и в оÑвеÑе возвÑаÑаеÑÑÑ Ð¸Ð¼ÐµÑÑий ÑмÑÑл HTTP-заголовок `WWW-Authenticate` в ÑооÑвеÑÑÑвии Ñо ÑпеÑиÑикаÑиÑми HTTP, RFC 7235, RFC 9110.
+
+Ðо еÑли по какой-Ñо пÑиÑине ваÑи клиенÑÑ Ð·Ð°Ð²Ð¸ÑÑÑ Ð¾Ñ ÑÑаÑого поведениÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе веÑнÑÑÑ ÐµÐ³Ð¾, пеÑеопÑеделив меÑод `make_not_authenticated_error` в ваÑиÑ
Security-клаÑÑаÑ
.
+
+ÐапÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¿Ð¾Ð´ÐºÐ»Ð°ÑÑ `HTTPBearer`, коÑоÑÑй бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ `403 Forbidden` вмеÑÑо ÑÑандаÑÑной `401 Unauthorized`:
+
+{* ../../docs_src/authentication_error_status_code/tutorial001_an_py39.py hl[9:13] *}
+
+/// tip | СовеÑ
+
+ÐбÑаÑиÑе внимание, ÑÑо ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ ÑкземплÑÑ Ð¸ÑклÑÑениÑ, не вÑзÑÐ²Ð°ÐµÑ ÐµÐ³Ð¾. ÐÑбÑÐ¾Ñ Ð²ÑполнÑеÑÑÑ Ð¾ÑÑалÑнÑм внÑÑÑенним кодом.
+
+///
diff --git a/docs/ru/docs/how-to/configure-swagger-ui.md b/docs/ru/docs/how-to/configure-swagger-ui.md
index 4793cc9db3..9d104423d7 100644
--- a/docs/ru/docs/how-to/configure-swagger-ui.md
+++ b/docs/ru/docs/how-to/configure-swagger-ui.md
@@ -40,7 +40,7 @@ FastAPI вклÑÑÐ°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑе паÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑ
ÐÑо вклÑÑÐ°ÐµÑ ÑледÑÑÑие наÑÑÑойки по ÑмолÑаниÑ:
-{* ../../fastapi/openapi/docs.py ln[8:23] hl[17:23] *}
+{* ../../fastapi/openapi/docs.py ln[9:24] hl[18:24] *}
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пеÑеопÑеделиÑÑ Ð»ÑбÑÑ Ð¸Ð· ниÑ
, Ñказав дÑÑгое знаÑение в аÑгÑменÑе `swagger_ui_parameters`.
diff --git a/docs/ru/docs/how-to/custom-request-and-route.md b/docs/ru/docs/how-to/custom-request-and-route.md
index 1b8d7f7ed3..feef9670ad 100644
--- a/docs/ru/docs/how-to/custom-request-and-route.md
+++ b/docs/ru/docs/how-to/custom-request-and-route.md
@@ -42,7 +42,7 @@
Таким обÑазом, один и ÑÐ¾Ñ Ð¶Ðµ клаÑÑ Ð¼Ð°ÑÑÑÑÑа ÑÐ¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ ÐºÐ°Ðº gzip-ÑжаÑÑе, Ñак и неÑжаÑÑе запÑоÑÑ.
-{* ../../docs_src/custom_request_and_route/tutorial001.py hl[8:15] *}
+{* ../../docs_src/custom_request_and_route/tutorial001_an_py310.py hl[9:16] *}
### СоздаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий клаÑÑ `GzipRoute` { #create-a-custom-gziproute-class }
@@ -54,7 +54,7 @@
ÐдеÑÑ Ð¼Ñ Ð¸ÑполÑзÑем еÑ, ÑÑÐ¾Ð±Ñ ÑоздаÑÑ `GzipRequest` из иÑÑ
одного HTTP-запÑоÑа.
-{* ../../docs_src/custom_request_and_route/tutorial001.py hl[18:26] *}
+{* ../../docs_src/custom_request_and_route/tutorial001_an_py310.py hl[19:27] *}
/// note | ТеÑ
ниÑеÑкие деÑали
@@ -92,18 +92,18 @@
ÐÑжно лиÑÑ Ð¾Ð±ÑабоÑаÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð²Ð½ÑÑÑи блока `try`/`except`:
-{* ../../docs_src/custom_request_and_route/tutorial002.py hl[13,15] *}
+{* ../../docs_src/custom_request_and_route/tutorial002_an_py310.py hl[14,16] *}
ÐÑли пÑоизойдÑÑ Ð¸ÑклÑÑение, ÑкземплÑÑ `Request` вÑÑ ÐµÑÑ Ð±ÑÐ´ÐµÑ Ð² облаÑÑи видимоÑÑи, поÑÑÐ¾Ð¼Ñ Ð¼Ñ Ñможем пÑоÑиÑаÑÑ Ñело запÑоÑа и иÑполÑзоваÑÑ ÐµÐ³Ð¾ пÑи обÑабоÑке оÑибки:
-{* ../../docs_src/custom_request_and_route/tutorial002.py hl[16:18] *}
+{* ../../docs_src/custom_request_and_route/tutorial002_an_py310.py hl[17:19] *}
## ÐолÑзоваÑелÑÑкий клаÑÑ `APIRoute` в ÑоÑÑеÑе { #custom-apiroute-class-in-a-router }
ÐÑ Ñакже можеÑе задаÑÑ Ð¿Ð°ÑамеÑÑ `route_class` Ñ `APIRouter`:
-{* ../../docs_src/custom_request_and_route/tutorial003.py hl[26] *}
+{* ../../docs_src/custom_request_and_route/tutorial003_py310.py hl[26] *}
Ð ÑÑом пÑимеÑе *опеÑаÑии пÑÑи*, обÑÑвленнÑе в `router`, бÑдÑÑ Ð¸ÑполÑзоваÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий клаÑÑ `TimedRoute` и полÑÑÐ°Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй HTTP-заголовок `X-Response-Time` в оÑвеÑе Ñ Ð²Ñеменем, заÑÑаÑеннÑм на ÑоÑмиÑование оÑвеÑа:
-{* ../../docs_src/custom_request_and_route/tutorial003.py hl[13:20] *}
+{* ../../docs_src/custom_request_and_route/tutorial003_py310.py hl[13:20] *}
diff --git a/docs/ru/docs/index.md b/docs/ru/docs/index.md
index 75cd63223d..b562cbe5bc 100644
--- a/docs/ru/docs/index.md
+++ b/docs/ru/docs/index.md
@@ -52,14 +52,20 @@ FastAPI â ÑÑо ÑовÑеменнÑй, бÑÑÑÑÑй (вÑÑокопÑои
-{% if sponsors %}
+### ÐлÑÑевой-ÑпонÑÐ¾Ñ { #keystone-sponsor }
+
+{% for sponsor in sponsors.keystone -%}
+
+{% endfor -%}
+
+### ÐолоÑÑе и ÑеÑебÑÑнÑе ÑпонÑоÑÑ { #gold-and-silver-sponsors }
+
{% for sponsor in sponsors.gold -%}
{% endfor -%}
{%- for sponsor in sponsors.silver -%}
{% endfor %}
-{% endif %}
@@ -444,6 +450,58 @@ item: Item
* **ÑеÑÑии Ñ Ð¸ÑполÑзованием cookie**
* ...и многое дÑÑгое.
+### РазвеÑниÑе пÑиложение (опÑионалÑно) { #deploy-your-app-optional }
+
+ÐÑи желании Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑазвеÑнÑÑÑ ÑÐ²Ð¾Ñ Ð¿Ñиложение FastAPI в FastAPI Cloud, пÑиÑоединÑйÑеÑÑ Ðº ÑпиÑÐºÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ, еÑли еÑÑ Ð½Ðµ Ñделали ÑÑого. ð
+
+ÐÑли Ñ Ð²Ð°Ñ Ñже еÑÑÑ Ð°ÐºÐºÐ°ÑÐ½Ñ **FastAPI Cloud** (Ð¼Ñ Ð¿ÑиглаÑили Ð²Ð°Ñ Ð¸Ð· ÑпиÑка Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ð), Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑазвеÑнÑÑÑ Ð²Ð°Ñе пÑиложение одной командой.
+
+ÐеÑед ÑазвеÑÑÑванием ÑбедиÑеÑÑ, ÑÑо Ð²Ñ Ð²Ð¾Ñли в ÑиÑÑемÑ:
+
+
+
+```console
+$ fastapi login
+
+You are logged in to FastAPI Cloud ð
+```
+
+
+
+ÐаÑем ÑазвеÑниÑе пÑиложение:
+
+
+
+```console
+$ fastapi deploy
+
+Deploying to FastAPI Cloud...
+
+â
Deployment successful!
+
+ð Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev
+```
+
+
+
+ÐÐ¾Ñ Ð¸ вÑÑ! ТепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе оÑкÑÑÑÑ Ð²Ð°Ñе пÑиложение по ÑÑой ÑÑÑлке. â¨
+
+#### Ð FastAPI Cloud { #about-fastapi-cloud }
+
+**FastAPI Cloud** Ñоздан Ñем же авÑоÑом и командой, ÑÑо и **FastAPI**.
+
+Ðн ÑпÑоÑÐ°ÐµÑ Ð¿ÑоÑеÑÑ **ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±Ñаза**, **ÑазвеÑÑÑваниÑ** и **доÑÑÑпа** к API пÑи минималÑнÑÑ
ÑÑилиÑÑ
.
+
+Ðн пеÑеноÑÐ¸Ñ ÑÐ¾Ñ Ð¶Ðµ **опÑÑ ÑазÑабоÑÑика**, ÑÑо и пÑи Ñоздании пÑиложений на FastAPI, на иÑ
**ÑазвеÑÑÑвание** в облаке. ð
+
+FastAPI Cloud â оÑновной ÑпонÑÐ¾Ñ Ð¸ иÑÑоÑник ÑинанÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿ÑоекÑов Ñ Ð¾ÑкÑÑÑÑм иÑÑ
однÑм кодом из ÑкоÑиÑÑÐµÐ¼Ñ *FastAPI and friends*. â¨
+
+#### РазвеÑÑÑвание Ñ Ð´ÑÑгиÑ
облаÑнÑÑ
пÑовайдеÑов { #deploy-to-other-cloud-providers }
+
+FastAPI â ÑÑо open source и ÑÑандаÑÑизиÑованнÑй ÑÑеймвоÑк. ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑазвеÑнÑÑÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI Ñ Ð»Ñбого облаÑного пÑовайдеÑа на Ð²Ð°Ñ Ð²ÑбоÑ.
+
+СледÑйÑе ÑÑководÑÑвам ваÑего облаÑного пÑовайдеÑа по ÑазвеÑÑÑÐ²Ð°Ð½Ð¸Ñ Ð¿Ñиложений FastAPI. ð¤
+
## ÐÑоизводиÑелÑноÑÑÑ { #performance }
ÐезавиÑимÑе бенÑмаÑки TechEmpower показÑваÑÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ **FastAPI**, ÑабоÑаÑÑие под ÑпÑавлением Uvicorn, как один из ÑамÑÑ
бÑÑÑÑÑÑ
доÑÑÑпнÑÑ
ÑÑеймвоÑков Python, ÑÑÑÑпаÑÑий ÑолÑко Ñамим Starlette и Uvicorn (иÑполÑзÑÑÑÑÑ Ð²Ð½ÑÑÑи FastAPI). (*)
diff --git a/docs/ru/docs/project-generation.md b/docs/ru/docs/project-generation.md
index 8c5681115b..dbedf76fe3 100644
--- a/docs/ru/docs/project-generation.md
+++ b/docs/ru/docs/project-generation.md
@@ -13,8 +13,8 @@
- ð [Pydantic](https://docs.pydantic.dev), иÑполÑзÑеÑÑÑ FastAPI, Ð´Ð»Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñии даннÑÑ
и ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð°ÑÑÑойками.
- ð¾ [PostgreSQL](https://www.postgresql.org) в каÑеÑÑве SQLâÐ±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.
- ð [React](https://react.dev) Ð´Ð»Ñ ÑÑонÑенда.
- - ð ÐÑполÑзÑÑÑÑÑ TypeScript, Ñ
Ñки, [Vite](https://vitejs.dev) и дÑÑгие ÑаÑÑи ÑовÑеменного ÑÑонÑендâÑÑека.
- - ð¨ [Chakra UI](https://chakra-ui.com) Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñов ÑÑонÑенда.
+ - ð ÐÑполÑзÑÑÑÑÑ TypeScript, Ñ
Ñки, Vite и дÑÑгие ÑаÑÑи ÑовÑеменного ÑÑонÑендâÑÑека.
+ - ð¨ [Tailwind CSS](https://tailwindcss.com) и [shadcn/ui](https://ui.shadcn.com) Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñов ÑÑонÑенда.
- ð¤ ÐвÑомаÑиÑеÑки ÑгенеÑиÑованнÑй ÑÑонÑендâклиенÑ.
- 𧪠[Playwright](https://playwright.dev) Ð´Ð»Ñ EndâtoâEnd ÑеÑÑиÑованиÑ.
- ð¦ ÐоддеÑжка ÑÑмной ÑемÑ.
diff --git a/docs/ru/docs/resources/index.md b/docs/ru/docs/resources/index.md
index 54be4e5fd3..faf80f7f49 100644
--- a/docs/ru/docs/resources/index.md
+++ b/docs/ru/docs/resources/index.md
@@ -1,3 +1,3 @@
# РеÑÑÑÑÑ { #resources }
-ÐополниÑелÑнÑе ÑеÑÑÑÑÑ, внеÑние ÑÑÑлки, ÑÑаÑÑи и многое дÑÑгое. âï¸
+ÐополниÑелÑнÑе ÑеÑÑÑÑÑ, внеÑние ÑÑÑлки и многое дÑÑгое. âï¸
diff --git a/docs/ru/docs/tutorial/bigger-applications.md b/docs/ru/docs/tutorial/bigger-applications.md
index b832383cc9..5e5d6ada94 100644
--- a/docs/ru/docs/tutorial/bigger-applications.md
+++ b/docs/ru/docs/tutorial/bigger-applications.md
@@ -85,17 +85,13 @@ from app.routers import items
ТоÑно Ñакже, как и в ÑлÑÑае Ñ ÐºÐ»Ð°ÑÑом `FastAPI`, вам нÑжно импоÑÑиÑоваÑÑ Ð¸ ÑоздаÑÑ Ð¾Ð±ÑÐµÐºÑ ÐºÐ»Ð°ÑÑа `APIRouter`.
-```Python hl_lines="1 3" title="app/routers/users.py"
-{!../../docs_src/bigger_applications/app/routers/users.py!}
-```
+{* ../../docs_src/bigger_applications/app_an_py39/routers/users.py hl[1,3] title["app/routers/users.py"] *}
### Создание *ÑндпоинÑов* Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `APIRouter` { #path-operations-with-apirouter }
РдалÑнейÑем иÑполÑзÑйÑе `APIRouter` Ð´Ð»Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ *ÑндпоинÑов*, ÑоÑно Ñакже, как Ð²Ñ Ð¸ÑполÑзÑеÑе клаÑÑ `FastAPI`:
-```Python hl_lines="6 11 16" title="app/routers/users.py"
-{!../../docs_src/bigger_applications/app/routers/users.py!}
-```
+{* ../../docs_src/bigger_applications/app_an_py39/routers/users.py hl[6,11,16] title["app/routers/users.py"] *}
ÐÑ Ð¼Ð¾Ð¶ÐµÑе дÑмаÑÑ Ð¾Ð± `APIRouter` как об "ÑменÑÑенной веÑÑии" клаÑÑа FastAPI`.
@@ -119,35 +115,7 @@ from app.routers import items
ТепеÑÑ Ð¼Ñ Ð²Ð¾ÑполÑзÑемÑÑ Ð¿ÑоÑÑой завиÑимоÑÑÑÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑоÑиÑаÑÑ ÐºÐ°ÑÑомизиÑованнÑй `X-Token` из заголовка:
-//// tab | Python 3.9+
-
-```Python hl_lines="3 6-8" title="app/dependencies.py"
-{!> ../../docs_src/bigger_applications/app_an_py39/dependencies.py!}
-```
-
-////
-
-//// tab | Python 3.8+
-
-```Python hl_lines="1 5-7" title="app/dependencies.py"
-{!> ../../docs_src/bigger_applications/app_an/dependencies.py!}
-```
-
-////
-
-//// tab | Python 3.8+ non-Annotated
-
-/// tip | ÐодÑказка
-
-ÐÑ ÑекомендÑем иÑполÑзоваÑÑ Ð²ÐµÑÑÐ¸Ñ `Annotated`, когда ÑÑо возможно.
-
-///
-
-```Python hl_lines="1 4-6" title="app/dependencies.py"
-{!> ../../docs_src/bigger_applications/app/dependencies.py!}
-```
-
-////
+{* ../../docs_src/bigger_applications/app_an_py39/dependencies.py hl[3,6:8] title["app/dependencies.py"] *}
/// tip | ÐодÑказка
@@ -180,9 +148,7 @@ from app.routers import items
Таким обÑазом, вмеÑÑо Ñого ÑÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð²Ñе ÑÑи ÑвойÑÑва в ÑÑнкÑÐ¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ оÑделÑного *ÑндпоинÑа*,
Ð¼Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸Ð¼ иÑ
в `APIRouter`.
-```Python hl_lines="5-10 16 21" title="app/routers/items.py"
-{!../../docs_src/bigger_applications/app/routers/items.py!}
-```
+{* ../../docs_src/bigger_applications/app_an_py39/routers/items.py hl[5:10,16,21] title["app/routers/items.py"] *}
Так как каждÑй *ÑндпоинÑ* наÑинаеÑÑÑ Ñ Ñимвола `/`:
@@ -241,9 +207,7 @@ async def read_item(item_id: str):
ÐÑ Ð¸ÑполÑзÑем опеÑаÑÐ¸Ñ Ð¾ÑноÑиÑелÑного импоÑÑа `..` Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾ÑÑа завиÑимоÑÑи:
-```Python hl_lines="3" title="app/routers/items.py"
-{!../../docs_src/bigger_applications/app/routers/items.py!}
-```
+{* ../../docs_src/bigger_applications/app_an_py39/routers/items.py hl[3] title["app/routers/items.py"] *}
#### Ðак ÑабоÑÐ°ÐµÑ Ð¾ÑноÑиÑелÑнÑй импоÑÑ? { #how-relative-imports-work }
@@ -313,9 +277,7 @@ from ...dependencies import get_token_header
Ðо помимо ÑÑого Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ добавиÑÑ Ð½Ð¾Ð²Ñе Ñеги Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ оÑделÑного *ÑндпоинÑа*, а Ñакже некоÑоÑÑе дополниÑелÑнÑе оÑвеÑÑ (`responses`), Ñ
аÑакÑеÑнÑе Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ *ÑндпоинÑа*:
-```Python hl_lines="30-31" title="app/routers/items.py"
-{!../../docs_src/bigger_applications/app/routers/items.py!}
-```
+{* ../../docs_src/bigger_applications/app_an_py39/routers/items.py hl[30:31] title["app/routers/items.py"] *}
/// tip | ÐодÑказка
@@ -341,17 +303,13 @@ from ...dependencies import get_token_header
ÐÑ Ð´Ð°Ð¶Ðµ можем обÑÑвиÑÑ [глобалÑнÑе завиÑимоÑÑи](dependencies/global-dependencies.md){.internal-link target=_blank}, коÑоÑÑе бÑдÑÑ Ð¾Ð±ÑÐµÐ´Ð¸Ð½ÐµÐ½Ñ Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑми Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ оÑделÑного маÑÑÑÑÑизаÑоÑа:
-```Python hl_lines="1 3 7" title="app/main.py"
-{!../../docs_src/bigger_applications/app/main.py!}
-```
+{* ../../docs_src/bigger_applications/app_an_py39/main.py hl[1,3,7] title["app/main.py"] *}
### ÐмпоÑÑ `APIRouter` { #import-the-apirouter }
ТепеÑÑ Ð¼Ñ Ð¸Ð¼Ð¿Ð¾ÑÑиÑÑем дÑÑгие ÑÑб-модÑли, ÑодеÑжаÑие `APIRouter`:
-```Python hl_lines="4-5" title="app/main.py"
-{!../../docs_src/bigger_applications/app/main.py!}
-```
+{* ../../docs_src/bigger_applications/app_an_py39/main.py hl[4:5] title["app/main.py"] *}
Так как ÑÐ°Ð¹Ð»Ñ `app/routers/users.py` и `app/routers/items.py` ÑвлÑÑÑÑÑ ÑÑб-модÑлÑми одного и Ñого же Python-пакеÑа `app`, Ñо Ð¼Ñ Ñможем иÑ
импоÑÑиÑоваÑÑ, воÑполÑзовавÑиÑÑ Ð¾Ð¿ÐµÑаÑией оÑноÑиÑелÑного импоÑÑа `.`.
@@ -414,17 +372,13 @@ from .routers.users import router
ÐоÑÑомÑ, Ð´Ð»Ñ Ñого ÑÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ Ð¾Ð±Ðµ ÑÑи пеÑеменнÑе в одном Ñайле, Ð¼Ñ Ð¸Ð¼Ð¿Ð¾ÑÑиÑовали ÑооÑвеÑÑÑвÑÑÑие ÑÑб-модÑли:
-```Python hl_lines="5" title="app/main.py"
-{!../../docs_src/bigger_applications/app/main.py!}
-```
+{* ../../docs_src/bigger_applications/app_an_py39/main.py hl[5] title["app/main.py"] *}
### ÐодклÑÑение маÑÑÑÑÑизаÑоÑов (`APIRouter`) Ð´Ð»Ñ `users` и Ð´Ð»Ñ `items` { #include-the-apirouters-for-users-and-items }
ÐавайÑе подклÑÑим маÑÑÑÑÑизаÑоÑÑ (`router`) из ÑÑб-модÑлей `users` и `items`:
-```Python hl_lines="10-11" title="app/main.py"
-{!../../docs_src/bigger_applications/app/main.py!}
-```
+{* ../../docs_src/bigger_applications/app_an_py39/main.py hl[10:11] title["app/main.py"] *}
/// info | ÐÑимеÑание
@@ -465,17 +419,13 @@ from .routers.users import router
Рданном пÑимеÑе ÑÑо ÑделаÑÑ Ð¾ÑÐµÐ½Ñ Ð¿ÑоÑÑо. Ðо давайÑе пÑедположим, ÑÑо поÑколÑÐºÑ Ñайл иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð½ÐµÑколÑкиÑ
пÑоекÑов,
Ñо Ð¼Ñ Ð½Ðµ можем модиÑиÑиÑоваÑÑ ÐµÐ³Ð¾, добавлÑÑ Ð¿ÑеÑикÑÑ (`prefix`), завиÑимоÑÑи (`dependencies`), Ñеги (`tags`), и Ñ.д. непоÑÑедÑÑвенно в `APIRouter`:
-```Python hl_lines="3" title="app/internal/admin.py"
-{!../../docs_src/bigger_applications/app/internal/admin.py!}
-```
+{* ../../docs_src/bigger_applications/app_an_py39/internal/admin.py hl[3] title["app/internal/admin.py"] *}
Ðо, неÑмоÑÑÑ Ð½Ð° ÑÑо, Ð¼Ñ Ñ
оÑим иÑполÑзоваÑÑ ÐºÐ°ÑÑомнÑй пÑеÑÐ¸ÐºÑ (`prefix`) Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑенного маÑÑÑÑÑизаÑоÑа (`APIRouter`), в ÑезÑлÑÑаÑе Ñего, ÐºÐ°Ð¶Ð´Ð°Ñ *опеÑаÑÐ¸Ñ Ð¿ÑÑи* бÑÐ´ÐµÑ Ð½Ð°ÑинаÑÑÑÑ Ñ `/admin`. Также Ð¼Ñ Ñ
оÑим заÑиÑиÑÑ Ð½Ð°Ñ Ð¼Ð°ÑÑÑÑÑизаÑÐ¾Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑей, ÑозданнÑÑ
Ð´Ð»Ñ Ð½Ð°Ñего пÑоекÑа. РеÑÑ Ð¼Ñ Ñ
оÑим вклÑÑиÑÑ Ñеги (`tags`) и оÑвеÑÑ (`responses`).
ÐÑ Ð¼Ð¾Ð¶ÐµÐ¼ пÑимениÑÑ Ð²Ñе вÑÑепеÑеÑиÑленнÑе наÑÑÑойки, не изменÑÑ Ð½Ð°ÑалÑнÑй `APIRouter`. Ðам вÑего лиÑÑ Ð½Ñжно пеÑедаÑÑ Ð½ÑжнÑе паÑамеÑÑÑ Ð² `app.include_router()`.
-```Python hl_lines="14-17" title="app/main.py"
-{!../../docs_src/bigger_applications/app/main.py!}
-```
+{* ../../docs_src/bigger_applications/app_an_py39/main.py hl[14:17] title["app/main.py"] *}
Таким обÑазом, оÑигиналÑнÑй `APIRouter` не бÑÐ´ÐµÑ Ð¼Ð¾Ð´Ð¸ÑиÑиÑован, и Ð¼Ñ Ñможем иÑполÑзоваÑÑ Ñайл `app/internal/admin.py` ÑÑÐ°Ð·Ñ Ð² неÑколÑкиÑ
пÑоекÑаÑ
оÑганизаÑии.
@@ -496,9 +446,7 @@ from .routers.users import router
ÐдеÑÑ Ð¼Ñ ÑÑо делаем ... пÑоÑÑо, ÑÑÐ¾Ð±Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑ, ÑÑо ÑÑо возможно ð¤·:
-```Python hl_lines="21-23" title="app/main.py"
-{!../../docs_src/bigger_applications/app/main.py!}
-```
+{* ../../docs_src/bigger_applications/app_an_py39/main.py hl[21:23] title["app/main.py"] *}
и ÑÑо бÑÐ´ÐµÑ ÑабоÑаÑÑ ÐºÐ¾ÑÑекÑно вмеÑÑе Ñ Ð´ÑÑгими *ÑндпоинÑами*, добавленнÑми Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `app.include_router()`.
diff --git a/docs/ru/docs/tutorial/cookie-param-models.md b/docs/ru/docs/tutorial/cookie-param-models.md
index daac764e3f..182813afdf 100644
--- a/docs/ru/docs/tutorial/cookie-param-models.md
+++ b/docs/ru/docs/tutorial/cookie-param-models.md
@@ -50,7 +50,7 @@
ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑконÑигÑÑиÑоваÑÑ Pydantic-Ð¼Ð¾Ð´ÐµÐ»Ñ Ñак, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑеÑиÑÑ (`forbid`) лÑбÑе дополниÑелÑнÑе (`extra`) полÑ:
-{* ../../docs_src/cookie_param_models/tutorial002_an_py39.py hl[10] *}
+{* ../../docs_src/cookie_param_models/tutorial002_an_py310.py hl[10] *}
ÐÑли ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿Ð¾Ð¿ÑобÑÐµÑ Ð¾ÑпÑавиÑÑ **дополниÑелÑнÑе cookies**, Ñо в оÑÐ²ÐµÑ Ð¾Ð½ полÑÑÐ¸Ñ **оÑибкÑ**.
diff --git a/docs/ru/docs/tutorial/first-steps.md b/docs/ru/docs/tutorial/first-steps.md
index c82118cbe5..6f59d72054 100644
--- a/docs/ru/docs/tutorial/first-steps.md
+++ b/docs/ru/docs/tutorial/first-steps.md
@@ -143,6 +143,42 @@ OpenAPI опÑеделÑÐµÑ ÑÑ
ÐµÐ¼Ñ API Ð´Ð»Ñ Ð²Ð°Ñего API. Ð ÑÑа
ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ ÐµÑ Ð´Ð»Ñ Ð°Ð²ÑомаÑиÑеÑкой генеÑаÑии кода Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñов, коÑоÑÑе взаимодейÑÑвÑÑÑ Ñ Ð²Ð°Ñим API. ÐапÑимеÑ, Ð´Ð»Ñ ÑÑонÑенд-, мобилÑнÑÑ
или IoT-пÑиложений.
+### РазвеÑниÑе пÑиложение (необÑзаÑелÑно) { #deploy-your-app-optional }
+
+ÐÑи желании Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑазвеÑнÑÑÑ ÑÐ²Ð¾Ñ Ð¿Ñиложение FastAPI в FastAPI Cloud, пеÑейдиÑе и пÑиÑоединиÑеÑÑ Ðº ÑпиÑÐºÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ, еÑли еÑÑ Ð½Ðµ Ñделали ÑÑого. ð
+
+ÐÑли Ñ Ð²Ð°Ñ Ñже еÑÑÑ Ð°ÐºÐºÐ°ÑÐ½Ñ **FastAPI Cloud** (Ð¼Ñ Ð¿ÑиглаÑили Ð²Ð°Ñ Ð¸Ð· ÑпиÑка Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ð), Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑазвеÑнÑÑÑ Ð¿Ñиложение одной командой.
+
+ÐеÑед ÑазвеÑÑÑванием ÑбедиÑеÑÑ, ÑÑо Ð²Ñ Ð²Ð¾Ñли в ÑиÑÑемÑ:
+
+
+
+```console
+$ fastapi login
+
+You are logged in to FastAPI Cloud ð
+```
+
+
+
+ÐаÑем ÑазвеÑниÑе пÑиложение:
+
+
+
+```console
+$ fastapi deploy
+
+Deploying to FastAPI Cloud...
+
+â
Deployment successful!
+
+ð Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev
+```
+
+
+
+ÐоÑово! ТепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе оÑкÑÑÑÑ ÑÐ²Ð¾Ñ Ð¿Ñиложение по ÑÑÐ¾Ð¼Ñ URL. â¨
+
## РаÑÑмоÑÑим поÑÑапно { #recap-step-by-step }
### Шаг 1: импоÑÑиÑÑйÑе `FastAPI` { #step-1-import-fastapi }
@@ -314,6 +350,26 @@ https://example.com/items/foo
Ðногие дÑÑгие обÑекÑÑ Ð¸ модели бÑдÑÑ Ð°Ð²ÑомаÑиÑеÑки пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ Ð² JSON (вклÑÑÐ°Ñ ORM и Ñ. п.). ÐопÑобÑйÑе иÑполÑзоваÑÑ Ñе, ÑÑо вам пÑивÑÑнее, Ñ Ð²ÑÑокой веÑоÑÑноÑÑÑÑ Ð¾Ð½Ð¸ Ñже поддеÑживаÑÑÑÑ.
+### Шаг 6: ÑазвеÑниÑе пÑиложение { #step-6-deploy-it }
+
+РазвеÑниÑе пÑиложение в **FastAPI Cloud** одной командой: `fastapi deploy`. ð
+
+#### Ð FastAPI Cloud { #about-fastapi-cloud }
+
+**FastAPI Cloud** Ñоздан Ñем же авÑоÑом и командой, ÑÑо и **FastAPI**.
+
+Ðн ÑпÑоÑÐ°ÐµÑ Ð¿ÑоÑеÑÑ **ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±Ñаза**, **ÑазвеÑÑÑваниÑ** и **доÑÑÑпа** к API Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑми ÑÑилиÑми.
+
+Ðн пеÑеноÑÐ¸Ñ ÑÐ¾Ñ Ð¶Ðµ **опÑÑ ÑазÑабоÑÑика** пÑи Ñоздании пÑиложений Ñ FastAPI на иÑ
**ÑазвеÑÑÑвание** в облаке. ð
+
+FastAPI Cloud â оÑновной ÑпонÑÐ¾Ñ Ð¸ иÑÑоÑник ÑинанÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ open-source пÑоекÑов «FastAPI и дÑÑзÑÑ». â¨
+
+#### РазвеÑÑÑвание Ñ Ð´ÑÑгиÑ
облаÑнÑÑ
пÑовайдеÑов { #deploy-to-other-cloud-providers }
+
+FastAPI â open-source и оÑнован на ÑÑандаÑÑаÑ
. ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑазвеÑнÑÑÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI Ñ Ð»Ñбого облаÑного пÑовайдеÑа по ваÑÐµÐ¼Ñ Ð²ÑбоÑÑ.
+
+СледÑйÑе ÑÑководÑÑвам ваÑего облаÑного пÑовайдеÑа, ÑÑÐ¾Ð±Ñ ÑазвеÑнÑÑÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI Ñ Ð½Ð¸Ñ
. ð¤
+
## РезÑме { #recap }
* ÐмпоÑÑиÑÑйÑе `FastAPI`.
@@ -321,3 +377,4 @@ https://example.com/items/foo
* ÐапиÑиÑе **декоÑаÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑии пÑÑи**, напÑÐ¸Ð¼ÐµÑ `@app.get("/")`.
* ÐпÑеделиÑе **ÑÑнкÑÐ¸Ñ Ð¾Ð¿ÐµÑаÑии пÑÑи**; напÑимеÑ, `def root(): ...`.
* ÐапÑÑÑиÑе ÑеÑÐ²ÐµÑ ÑазÑабоÑки командой `fastapi dev`.
+* ÐÑи желании ÑазвеÑниÑе пÑиложение командой `fastapi deploy`.
diff --git a/docs/ru/docs/tutorial/handling-errors.md b/docs/ru/docs/tutorial/handling-errors.md
index 2378c8b04c..63ca8665ef 100644
--- a/docs/ru/docs/tutorial/handling-errors.md
+++ b/docs/ru/docs/tutorial/handling-errors.md
@@ -81,7 +81,7 @@
## УÑÑановка полÑзоваÑелÑÑкиÑ
обÑабоÑÑиков иÑклÑÑений { #install-custom-exception-handlers }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие обÑабоÑÑики иÑклÑÑений Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ñо же Ñамое иÑклÑÑение - ÑÑилиÑÑ Ð¾Ñ Starlette.
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие обÑабоÑÑики иÑклÑÑений Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑеÑ
же ÑÑÐ¸Ð»Ð¸Ñ Ð¾Ð±ÑабоÑки иÑклÑÑений из Starlette.
ÐопÑÑÑим, Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкое иÑклÑÑение `UnicornException`, коÑоÑое Ð²Ñ (или иÑполÑзÑÐµÐ¼Ð°Ñ Ð²Ð°Ð¼Ð¸ библиоÑека) можеÑе `вÑзваÑÑ`.
@@ -117,7 +117,7 @@
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пеÑеопÑеделиÑÑ ÑÑи обÑабоÑÑики иÑклÑÑений на Ñвои ÑобÑÑвеннÑе.
-### ÐеÑеопÑеделение иÑклÑÑений пÑовеÑки запÑоÑа { #override-request-validation-exceptions }
+### ÐеÑеопÑеделение обÑабоÑÑика иÑклÑÑений пÑовеÑки запÑоÑа { #override-request-validation-exceptions }
Ðогда запÑÐ¾Ñ ÑодеÑÐ¶Ð¸Ñ Ð½ÐµÐ´Ð¾Ð¿ÑÑÑимÑе даннÑе, **FastAPI** внÑÑÑенне вÑзÑÐ²Ð°ÐµÑ Ð¾ÑÐ¸Ð±ÐºÑ `RequestValidationError`.
@@ -127,7 +127,7 @@
ÐбÑабоÑÑик иÑклÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ Ð¾Ð±ÑÐµÐºÑ `Request` и иÑклÑÑение.
-{* ../../docs_src/handling_errors/tutorial004.py hl[2,14:16] *}
+{* ../../docs_src/handling_errors/tutorial004.py hl[2,14:19] *}
ТепеÑÑ, еÑли пеÑейÑи к `/items/foo`, Ñо вмеÑÑо ÑÑандаÑÑной JSON-оÑибки Ñ:
@@ -149,36 +149,17 @@
Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе ÑекÑÑовÑÑ Ð²ÐµÑÑиÑ:
```
-1 validation error
-path -> item_id
- value is not a valid integer (type=type_error.integer)
+Validation errors:
+Field: ('path', 'item_id'), Error: Input should be a valid integer, unable to parse string as an integer
```
-#### `RequestValidationError` или `ValidationError` { #requestvalidationerror-vs-validationerror }
-
-/// warning | Ðнимание
-
-ÐÑо ÑеÑ
ниÑеÑкие деÑали, коÑоÑÑе можно пÑопÑÑÑиÑÑ, еÑли они не Ð²Ð°Ð¶Ð½Ñ Ð´Ð»Ñ Ð²Ð°Ñ ÑейÑаÑ.
-
-///
-
-`RequestValidationError` ÑвлÑеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»Ð°ÑÑом Pydantic `ValidationError`.
-
-**FastAPI** иÑполÑзÑÐµÑ ÐµÐ³Ð¾ Ð´Ð»Ñ Ñого, ÑÑобÑ, еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе Pydantic-Ð¼Ð¾Ð´ÐµÐ»Ñ Ð² `response_model`, и ваÑи даннÑе ÑодеÑÐ¶Ð°Ñ Ð¾ÑибкÑ, Ð²Ñ Ñвидели оÑÐ¸Ð±ÐºÑ Ð² жÑÑнале.
-
-Ðо клиенÑ/полÑзоваÑÐµÐ»Ñ ÑÑого не ÑвидиÑ. ÐмеÑÑо ÑÑого ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ ÑообÑение "Internal Server Error" Ñ ÐºÐ¾Ð´Ð¾Ð¼ ÑоÑÑоÑÐ½Ð¸Ñ HTTP `500`.
-
-Так и должно бÑÑÑ, поÑÐ¾Ð¼Ñ ÑÑо еÑли в ваÑем *оÑвеÑе* или где-либо в ваÑем коде (не в *запÑоÑе* клиенÑа) Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Pydantic `ValidationError`, Ñо ÑÑо дейÑÑвиÑелÑно оÑибка в ваÑем коде.
-
-Рпока Ð²Ñ Ð½Ðµ ÑÑÑÑаниÑе оÑибкÑ, ваÑи клиенÑÑ/полÑзоваÑели не Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð´Ð¾ÑÑÑпа к внÑÑÑенней инÑоÑмаÑии о ней, Ñак как ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к ÑÑзвимоÑÑи в ÑиÑÑеме безопаÑноÑÑи.
-
### ÐеÑеопÑеделиÑе обÑабоÑÑик оÑибок `HTTPException` { #override-the-httpexception-error-handler }
ÐналогиÑнÑм обÑазом можно пеÑеопÑеделиÑÑ Ð¾Ð±ÑабоÑÑик `HTTPException`.
ÐапÑимеÑ, Ð´Ð»Ñ ÑÑиÑ
оÑибок можно веÑнÑÑÑ Ð¾Ð±ÑÑнÑй ÑекÑÑовÑй оÑÐ²ÐµÑ Ð²Ð¼ÐµÑÑо JSON:
-{* ../../docs_src/handling_errors/tutorial004.py hl[3:4,9:11,22] *}
+{* ../../docs_src/handling_errors/tutorial004.py hl[3:4,9:11,25] *}
/// note | ТеÑ
ниÑеÑкие деÑали
@@ -188,6 +169,14 @@ path -> item_id
///
+/// warning | Ðнимание
+
+ÐмейÑе в видÑ, ÑÑо `RequestValidationError` ÑодеÑÐ¶Ð¸Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± имени Ñайла и ÑÑÑоке, где пÑоизоÑла оÑибка валидаÑии, ÑÑÐ¾Ð±Ñ Ð²Ñ Ð¼Ð¾Ð³Ð»Ð¸ пÑи желании оÑобÑазиÑÑ ÐµÑ Ð² логаÑ
Ñ ÑелеванÑнÑми даннÑми.
+
+Ðо ÑÑо ознаÑаеÑ, ÑÑо еÑли Ð²Ñ Ð¿ÑоÑÑо пÑеобÑазÑеÑе ÐµÑ Ð² ÑÑÑÐ¾ÐºÑ Ð¸ веÑнÑÑе ÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð½Ð°Ð¿ÑÑмÑÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе допÑÑÑиÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑÑÑ ÑÑеÑÐºÑ Ð¸Ð½ÑоÑмаÑии о Ñвоей ÑиÑÑеме, поÑÑÐ¾Ð¼Ñ Ð·Ð´ÐµÑÑ ÐºÐ¾Ð´ Ð¸Ð·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¸ показÑÐ²Ð°ÐµÑ ÐºÐ°Ð¶Ð´ÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð¾ÑделÑно.
+
+///
+
### ÐÑполÑзÑйÑе Ñело `RequestValidationError` { #use-the-requestvalidationerror-body }
ÐÑибка `RequestValidationError` ÑодеÑÐ¶Ð¸Ñ Ð¿Ð¾Ð»ÑÑенное `Ñело` Ñ Ð½ÐµÐ´Ð¾Ð¿ÑÑÑимÑми даннÑми.
diff --git a/docs/ru/docs/tutorial/security/index.md b/docs/ru/docs/tutorial/security/index.md
index 8fb4bf24f2..ebac013b6c 100644
--- a/docs/ru/docs/tutorial/security/index.md
+++ b/docs/ru/docs/tutorial/security/index.md
@@ -1,4 +1,4 @@
-# ÐаÑÑÑойка авÑоÑизаÑии
+# ÐаÑÑÑойка авÑоÑизаÑии { #security }
СÑÑеÑÑвÑÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво ÑпоÑобов обеÑпеÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, аÑÑенÑиÑикаÑии и авÑоÑизаÑии.
@@ -10,11 +10,11 @@
Ðо ÑнаÑала давайÑе ÑаÑÑмоÑÑим некоÑоÑÑе неболÑÑие конÑепÑии.
-## ÐÑда-Ñо ÑоÑопиÑÑÑÑ?
+## ÐÑда-Ñо ÑоÑопиÑÑÑÑ? { #in-a-hurry }
ÐÑли вам не нÑжна инÑоÑмаÑÐ¸Ñ Ð¾ какиÑ
-либо из ÑледÑÑÑиÑ
ÑеÑминов и вам пÑоÑÑо нÑжно добавиÑÑ Ð·Ð°ÑиÑÑ Ñ Ð°ÑÑенÑиÑикаÑией на оÑнове логина и паÑÐ¾Ð»Ñ *пÑÑмо ÑейÑаÑ*, пеÑеÑ
одиÑе к ÑледÑÑÑим главам.
-## OAuth2
+## OAuth2 { #oauth2 }
OAuth2 - ÑÑо пÑоÑокол, коÑоÑÑй опÑеделÑÐµÑ Ð½ÐµÑколÑко ÑпоÑобов обÑабоÑки аÑÑенÑиÑикаÑии и авÑоÑизаÑии.
@@ -24,7 +24,7 @@ OAuth2 вклÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ ÑпоÑÐ¾Ð±Ñ Ð°ÑÑенÑиÑикаÑии
ÐÑо Ñо, ÑÑо иÑполÑзÑÑÑ Ð¿Ð¾Ð´ Ñобой вÑе кнопки "вÑ
од Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Facebook, Google, X (Twitter), GitHub" на ÑÑÑаниÑаÑ
авÑоÑизаÑии.
-### OAuth 1
+### OAuth 1 { #oauth-1 }
Ранее иÑполÑзовалÑÑ Ð¿ÑоÑокол OAuth 1, коÑоÑÑй ÑилÑно оÑлиÑаеÑÑÑ Ð¾Ñ OAuth2 и ÑвлÑеÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑложнÑм, поÑколÑÐºÑ Ð¾Ð½ вклÑÑал пÑÑмÑе опиÑÐ°Ð½Ð¸Ñ Ñого, как ÑиÑÑоваÑÑ ÑообÑение.
@@ -34,11 +34,11 @@ OAuth2 не ÑказÑваеÑ, как ÑиÑÑоваÑÑ ÑообÑение, о
/// tip | ÐодÑказка
-Ð Ñазделе **РазвеÑÑÑвание** Ð²Ñ ÑвидиÑе [как наÑÑÑоиÑÑ Ð¿ÑоÑокол HTTPS беÑплаÑно, иÑполÑзÑÑ Traefik и Let's Encrypt.](https://fastapi.tiangolo.com/ru/deployment/https/)
+Ð Ñазделе **РазвеÑÑÑвание** Ð²Ñ ÑвидиÑе как наÑÑÑоиÑÑ Ð¿ÑоÑокол HTTPS беÑплаÑно, иÑполÑзÑÑ Traefik и Let's Encrypt.
///
-## OpenID Connect
+## OpenID Connect { #openid-connect }
OpenID Connect - ÑÑо еÑе один пÑоÑокол, оÑнованнÑй на **OAuth2**.
@@ -48,7 +48,7 @@ OpenID Connect - ÑÑо еÑе один пÑоÑокол, оÑнованнÑй
Ðо вÑ
од в Facebook не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ OpenID Connect. У него еÑÑÑ ÑобÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð²Ð°ÑиаÑÐ¸Ñ OAuth2.
-### OpenID (не "OpenID Connect")
+### OpenID (не "OpenID Connect") { #openid-not-openid-connect }
Также Ñанее иÑполÑзовалÑÑ ÑÑандаÑÑ "OpenID", коÑоÑÑй пÑÑалÑÑ ÑеÑиÑÑ ÑÑ Ð¶Ðµ пÑоблемÑ, ÑÑо и **OpenID Connect**, но не бÑл оÑнован на OAuth2.
@@ -56,7 +56,7 @@ OpenID Connect - ÑÑо еÑе один пÑоÑокол, оÑнованнÑй
РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð½Ðµ оÑÐµÐ½Ñ Ð¿Ð¾Ð¿ÑлÑÑен и не иÑполÑзÑеÑÑÑ.
-## OpenAPI
+## OpenAPI { #openapi }
OpenAPI (Ñанее извеÑÑнÑй как Swagger) - ÑÑо оÑкÑÑÑÐ°Ñ ÑпеÑиÑикаÑÐ¸Ñ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ API (в наÑÑоÑÑее вÑÐµÐ¼Ñ ÑвлÑеÑÑÑ ÑаÑÑÑÑ Linux Foundation).
@@ -97,7 +97,7 @@ OpenAPI Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ ÑледÑÑÑие ÑÑ
ÐµÐ¼Ñ Ð°Ð²Ñ
///
-## ÐÑеимÑÑеÑÑва **FastAPI**
+## ÐÑеимÑÑеÑÑва **FastAPI** { #fastapi-utilities }
Fast API пÑедоÑÑавлÑÐµÑ Ð½ÐµÑколÑко инÑÑÑÑменÑов Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ из ÑÑиÑ
ÑÑ
ем безопаÑноÑÑи в модÑле `fastapi.security`, коÑоÑÑе ÑпÑоÑаÑÑ Ð¸ÑполÑзование ÑÑиÑ
меÑ
анизмов безопаÑноÑÑи.
diff --git a/docs/ru/docs/tutorial/sql-databases.md b/docs/ru/docs/tutorial/sql-databases.md
index c44f37b9ae..1d03465337 100644
--- a/docs/ru/docs/tutorial/sql-databases.md
+++ b/docs/ru/docs/tutorial/sql-databases.md
@@ -63,9 +63,9 @@ $ pip install sqlmodel
* `table=True` ÑообÑÐ°ÐµÑ SQLModel, ÑÑо ÑÑо *моделÑ-ÑаблиÑа*, она должна пÑедÑÑавлÑÑÑ **ÑаблиÑÑ** в SQL базе даннÑÑ
, ÑÑо не пÑоÑÑо *Ð¼Ð¾Ð´ÐµÐ»Ñ Ð´Ð°Ð½Ð½ÑÑ
* (как обÑÑнÑй клаÑÑ Pydantic).
-* `Field(primary_key=True)` ÑообÑÐ°ÐµÑ SQLModel, ÑÑо `id` â ÑÑо **пеÑвиÑнÑй клÑÑ** в SQL базе даннÑÑ
(подÑобнее о пеÑвиÑнÑÑ
клÑÑаÑ
можно ÑзнаÑÑ Ð² докÑменÑаÑии SQLModel).
+* `Field(primary_key=True)` ÑообÑÐ°ÐµÑ SQLModel, ÑÑо `id` â ÑÑо **пеÑвиÑнÑй клÑÑ** в SQL базе даннÑÑ
(подÑобнее о пеÑвиÑнÑÑ
клÑÑаÑ
SQL можно ÑзнаÑÑ Ð² докÑменÑаÑии SQLModel).
- ÐлагодаÑÑ ÑÐ¸Ð¿Ñ `int | None`, SQLModel бÑÐ´ÐµÑ Ð·Ð½Ð°ÑÑ, ÑÑо ÑÑÐ¾Ñ ÑÑÐ¾Ð»Ð±ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ `INTEGER` в SQL базе даннÑÑ
и должен допÑÑкаÑÑ Ð·Ð½Ð°Ñение `NULL`.
+ **ÐÑимеÑание:** ÐÑ Ð¸ÑполÑзÑем `int | None` Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ Ð¿ÐµÑвиÑного клÑÑа, ÑÑÐ¾Ð±Ñ Ð² Python-коде можно бÑло *ÑоздаÑÑ Ð¾Ð±ÑÐµÐºÑ Ð±ÐµÐ· `id`* (`id=None`), пÑедполагаÑ, ÑÑо база даннÑÑ
*ÑгенеÑиÑÑÐµÑ ÐµÐ³Ð¾ пÑи ÑоÑ
Ñанении*. SQLModel понимаеÑ, ÑÑо база даннÑÑ
пÑедоÑÑÐ°Ð²Ð¸Ñ `id`, и *опÑеделÑÐµÑ ÑÑÐ¾Ð»Ð±ÐµÑ ÐºÐ°Ðº `INTEGER` (не `NULL`)* в ÑÑ
еме Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. См. докÑменÑаÑÐ¸Ñ SQLModel о пеÑвиÑнÑÑ
клÑÑаÑ
Ð´Ð»Ñ Ð¿Ð¾Ð´ÑобноÑÑей.
* `Field(index=True)` ÑообÑÐ°ÐµÑ SQLModel, ÑÑо нÑжно ÑоздаÑÑ **SQL индекÑ** Ð´Ð»Ñ ÑÑого ÑÑолбÑа, ÑÑо Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð±ÑÑÑÑее вÑполнÑÑÑ Ð²ÑбоÑки пÑи ÑÑении даннÑÑ
, оÑÑилÑÑÑованнÑÑ
по ÑÑÐ¾Ð¼Ñ ÑÑолбÑÑ.
@@ -107,7 +107,7 @@ $ pip install sqlmodel
ÐдеÑÑ Ð¼Ñ ÑоздаÑм ÑаблиÑÑ Ð² обÑабоÑÑике ÑобÑÑÐ¸Ñ Ð·Ð°Ð¿ÑÑка пÑиложениÑ.
-ÐÐ»Ñ Ð¿ÑодакÑна вÑ, веÑоÑÑно, бÑдеÑе иÑполÑзоваÑÑ ÑкÑÐ¸Ð¿Ñ Ð¼Ð¸Ð³ÑаÑий, коÑоÑÑй вÑполнÑеÑÑÑ Ð´Ð¾ запÑÑка пÑиложениÑ. ð¤
+ÐÐ»Ñ Ð¿ÑодакÑн вÑ, веÑоÑÑно, бÑдеÑе иÑполÑзоваÑÑ ÑкÑÐ¸Ð¿Ñ Ð¼Ð¸Ð³ÑаÑий, коÑоÑÑй вÑполнÑеÑÑÑ Ð´Ð¾ запÑÑка пÑиложениÑ. ð¤
/// tip | ÐодÑказка
diff --git a/docs/ru/docs/tutorial/testing.md b/docs/ru/docs/tutorial/testing.md
index 0224798b1a..7354ed895f 100644
--- a/docs/ru/docs/tutorial/testing.md
+++ b/docs/ru/docs/tutorial/testing.md
@@ -121,63 +121,13 @@ $ pip install httpx
Ðбе *опеÑаÑии пÑÑи* ÑÑебÑÑÑ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ Ð² запÑоÑе заголовка `X-Token`.
-//// tab | Python 3.10+
-
-```Python
-{!> ../../docs_src/app_testing/app_b_an_py310/main.py!}
-```
-
-////
-
-//// tab | Python 3.9+
-
-```Python
-{!> ../../docs_src/app_testing/app_b_an_py39/main.py!}
-```
-
-////
-
-//// tab | Python 3.8+
-
-```Python
-{!> ../../docs_src/app_testing/app_b_an/main.py!}
-```
-
-////
-
-//// tab | Python 3.10+ без Annotated
-
-/// tip | ÐодÑказка
-
-Ðо возможноÑÑи иÑполÑзÑйÑе веÑÑÐ¸Ñ Ñ `Annotated`.
-
-///
-
-```Python
-{!> ../../docs_src/app_testing/app_b_py310/main.py!}
-```
-
-////
-
-//// tab | Python 3.8+ без Annotated
-
-/// tip | ÐодÑказка
-
-Ðо возможноÑÑи иÑполÑзÑйÑе веÑÑÐ¸Ñ Ñ `Annotated`.
-
-///
-
-```Python
-{!> ../../docs_src/app_testing/app_b/main.py!}
-```
-
-////
+{* ../../docs_src/app_testing/app_b_an_py310/main.py *}
### РаÑÑиÑеннÑй Ñайл ÑеÑÑов { #extended-testing-file }
ТепеÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ð¼ Ñайл `test_main.py`, добавив в него ÑеÑÑов:
-{* ../../docs_src/app_testing/app_b/test_main.py *}
+{* ../../docs_src/app_testing/app_b_an_py310/test_main.py *}
ÐÑли ÐÑ Ð½Ðµ знаеÑе, как пеÑедаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð² запÑоÑе, можеÑе воÑполÑзоваÑÑÑÑ Ð¿Ð¾Ð¸Ñковиком (погÑглиÑÑ) и задаÑÑ Ð²Ð¾Ð¿ÑоÑ: "Ðак пеÑедаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð² запÑоÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `httpx`", можно даже ÑпÑоÑиÑÑ: "Ðак пеÑедаÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð² запÑоÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `requests`", поÑколÑÐºÑ Ð´Ð¸Ð·Ð°Ð¹Ð½ HTTPX оÑнован на дизайне Requests.
diff --git a/docs/ru/docs/virtual-environments.md b/docs/ru/docs/virtual-environments.md
index 5153cd4864..43136298a3 100644
--- a/docs/ru/docs/virtual-environments.md
+++ b/docs/ru/docs/virtual-environments.md
@@ -242,6 +242,26 @@ $ python -m pip install --upgrade pip
+/// tip | ÐодÑказка
+
+Ðногда пÑи попÑÑке обновиÑÑ pip Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе полÑÑиÑÑ Ð¾ÑÐ¸Ð±ÐºÑ **`No module named pip`**.
+
+ÐÑли ÑÑо пÑоизоÑло, ÑÑÑановиÑе и обновиÑе pip Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð½Ð¸Ð¶Ðµ:
+
+
+
+```console
+$ python -m ensurepip --upgrade
+
+---> 100%
+```
+
+
+
+ÐÑа команда ÑÑÑÐ°Ð½Ð¾Ð²Ð¸Ñ pip, еÑли он еÑÑ Ð½Ðµ ÑÑÑановлен, а Ñакже гаÑанÑиÑÑеÑ, ÑÑо ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ pip бÑÐ´ÐµÑ Ð½Ðµ ÑÑаÑее, Ñем веÑÑиÑ, доÑÑÑÐ¿Ð½Ð°Ñ Ð² `ensurepip`.
+
+///
+
## Ðобавление `.gitignore` { #add-gitignore }
ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе **Git** (а вам ÑÑÐ¾Ð¸Ñ ÐµÐ³Ð¾ иÑполÑзоваÑÑ), добавÑÑе Ñайл `.gitignore`, ÑÑÐ¾Ð±Ñ Ð¸ÑклÑÑиÑÑ Ð¸Ð· Git вÑÑ, ÑÑо наÑ
одиÑÑÑ Ð² ваÑей `.venv`.
@@ -834,7 +854,7 @@ I solemnly swear ðº
* УпÑавлÑÑÑ **виÑÑÑалÑнÑм окÑÑжением** ваÑиÑ
пÑоекÑов
* УÑÑанавливаÑÑ **пакеÑÑ**
* УпÑавлÑÑÑ **завиÑимоÑÑÑми и веÑÑиÑми** пакеÑов ваÑего пÑоекÑа
-* ÐбеÑпеÑиваÑÑ Ð½Ð°Ð»Ð¸Ñие **ÑоÑного** набоÑа пакеÑов и веÑÑий к ÑÑÑановке, вклÑÑÐ°Ñ Ð¸Ñ
завиÑимоÑÑи, ÑÑÐ¾Ð±Ñ Ð²Ñ Ð±Ñли ÑвеÑенÑ, ÑÑо ÑможеÑе запÑÑкаÑÑ Ð¿ÑÐ¾ÐµÐºÑ Ð² пÑодакÑне ÑоÑно Ñак же, как и на компÑÑÑеÑе пÑи ÑазÑабоÑке â ÑÑо назÑваеÑÑÑ **locking**
+* ÐбеÑпеÑиваÑÑ Ð½Ð°Ð»Ð¸Ñие **ÑоÑного** набоÑа пакеÑов и веÑÑий к ÑÑÑановке, вклÑÑÐ°Ñ Ð¸Ñ
завиÑимоÑÑи, ÑÑÐ¾Ð±Ñ Ð²Ñ Ð±Ñли ÑвеÑенÑ, ÑÑо ÑможеÑе запÑÑкаÑÑ Ð¿ÑÐ¾ÐµÐºÑ Ð² пÑодакÑн ÑоÑно Ñак же, как и на компÑÑÑеÑе пÑи ÑазÑабоÑке â ÑÑо назÑваеÑÑÑ **locking**
* Рмногое дÑÑгое
## ÐаклÑÑение { #conclusion }