diff --git a/docs/ru/docs/advanced/additional-responses.md b/docs/ru/docs/advanced/additional-responses.md index f7e8d9dec..ef9d3f223 100644 --- a/docs/ru/docs/advanced/additional-responses.md +++ b/docs/ru/docs/advanced/additional-responses.md @@ -34,7 +34,7 @@ /// -/// info | Информация +/// note | Примечание Ключ `model` не является частью OpenAPI. @@ -183,7 +183,7 @@ /// -/// info | Информация +/// note | Примечание Если вы явно не укажете другой тип содержимого в параметре `responses`, FastAPI будет считать, что ответ имеет тот же тип содержимого, что и основной класс ответа (по умолчанию `application/json`). diff --git a/docs/ru/docs/advanced/advanced-dependencies.md b/docs/ru/docs/advanced/advanced-dependencies.md index fe37a79c1..fb6cb7ca8 100644 --- a/docs/ru/docs/advanced/advanced-dependencies.md +++ b/docs/ru/docs/advanced/advanced-dependencies.md @@ -98,7 +98,7 @@ checker(q="somequery") В версии 0.118.0 это поведение было возвращено к тому, что код после `yield` выполняется после отправки ответа. -/// info | Информация +/// note | Примечание Как вы увидите ниже, это очень похоже на поведение до версии 0.106.0, но с несколькими улучшениями и исправлениями краевых случаев. diff --git a/docs/ru/docs/advanced/custom-response.md b/docs/ru/docs/advanced/custom-response.md index fdfe2c549..695506223 100644 --- a/docs/ru/docs/advanced/custom-response.md +++ b/docs/ru/docs/advanced/custom-response.md @@ -41,7 +41,7 @@ {* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *} -/// info | Информация +/// note | Примечание Параметр `response_class` также используется для указания «типа содержимого» ответа. @@ -65,7 +65,7 @@ /// -/// info | Информация +/// note | Примечание Разумеется, фактический заголовок `Content-Type`, статус-код и т.д. возьмутся из объекта `Response`, который вы вернули. diff --git a/docs/ru/docs/advanced/dataclasses.md b/docs/ru/docs/advanced/dataclasses.md index f9f8689b0..aa927cef1 100644 --- a/docs/ru/docs/advanced/dataclasses.md +++ b/docs/ru/docs/advanced/dataclasses.md @@ -18,7 +18,7 @@ FastAPI построен поверх **Pydantic**, и я показывал в Это работает так же, как с Pydantic-моделями. И на самом деле под капотом это достигается тем же образом, с использованием Pydantic. -/// info | Информация +/// note | Примечание Помните, что dataclasses не умеют всего того, что умеют Pydantic-модели. diff --git a/docs/ru/docs/advanced/events.md b/docs/ru/docs/advanced/events.md index 464bba93e..69ebe4ffc 100644 --- a/docs/ru/docs/advanced/events.md +++ b/docs/ru/docs/advanced/events.md @@ -120,7 +120,7 @@ async with lifespan(app): Здесь функция-обработчик события `shutdown` запишет строку текста `"Application shutdown"` в файл `log.txt`. -/// info | Информация +/// note | Примечание В функции `open()` параметр `mode="a"` означает «добавление» (append), то есть строка будет добавлена в конец файла, без перезаписи предыдущего содержимого. @@ -152,7 +152,7 @@ async with lifespan(app): Под капотом, в ASGI-технической спецификации, это часть [Протокола Lifespan](https://asgi.readthedocs.io/en/latest/specs/lifespan.html), и он определяет события `startup` и `shutdown`. -/// info | Информация +/// note | Примечание Вы можете прочитать больше про обработчики `lifespan` в Starlette в [документации Starlette по Lifespan](https://www.starlette.dev/lifespan/). diff --git a/docs/ru/docs/advanced/generate-clients.md b/docs/ru/docs/advanced/generate-clients.md index dfedc5dc0..f05454d9c 100644 --- a/docs/ru/docs/advanced/generate-clients.md +++ b/docs/ru/docs/advanced/generate-clients.md @@ -31,7 +31,6 @@ FastAPI автоматически генерирует спецификации Например, вы можете попробовать: * [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral) -* [liblab](https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi) Некоторые из этих решений также могут быть open source или иметь бесплатные тарифы, так что вы сможете попробовать их без финансовых затрат. Другие коммерческие генераторы SDK доступны и их можно найти онлайн. 🤓 @@ -83,7 +82,7 @@ npx @hey-api/openapi-ts -i http://localhost:8000/openapi.json -o src/client /// -Вы получите ошибки прямо в редакторе для отправляемых данных: +Вы получите ошибки прямо в редакторе кода для отправляемых данных: @@ -186,7 +185,7 @@ FastAPI использует **уникальный ID** для каждой *о npx @hey-api/openapi-ts -i ./openapi.json -o src/client ``` -После генерации нового клиента у вас будут **чистые имена методов**, со всем **автозавершением**, **ошибками прямо в редакторе** и т.д.: +После генерации нового клиента у вас будут **чистые имена методов**, со всем **автозавершением**, **ошибками прямо в редакторе кода** и т.д.: @@ -198,7 +197,7 @@ npx @hey-api/openapi-ts -i ./openapi.json -o src/client * Данных запроса — в теле запроса, query‑параметрах и т.д. * Данных ответа. -У вас также будут **ошибки прямо в редакторе** для всего. +У вас также будут **ошибки прямо в редакторе кода** для всего. И каждый раз, когда вы обновляете код бэкенда и **перегенерируете** фронтенд, в нём появятся новые *операции пути* как методы, старые будут удалены, а любые другие изменения отразятся в сгенерированном коде. 🤓 diff --git a/docs/ru/docs/advanced/openapi-callbacks.md b/docs/ru/docs/advanced/openapi-callbacks.md index 3d791de2c..c9cb73d18 100644 --- a/docs/ru/docs/advanced/openapi-callbacks.md +++ b/docs/ru/docs/advanced/openapi-callbacks.md @@ -167,13 +167,13 @@ https://www.external.org/events/invoices/2expen51ve К этому моменту у вас есть необходимые *операции пути* обратного вызова (те, которые *внешний разработчик* должен реализовать во *внешнем API*) в созданном выше маршрутизаторе обратных вызовов. -Теперь используйте параметр `callbacks` в *декораторе операции пути вашего API*, чтобы передать атрибут `.routes` (это, по сути, просто `list` маршрутов/*операций пути*) из этого маршрутизатора обратных вызовов: +Теперь используйте параметр `callbacks` в *декораторе операции пути вашего API*, чтобы передать атрибут `.routes` из этого маршрутизатора обратных вызовов: {* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[33] *} /// tip | Совет -Обратите внимание, что вы передаёте не сам маршрутизатор (`invoices_callback_router`) в `callback=`, а его атрибут `.routes`, то есть `invoices_callback_router.routes`. +Обратите внимание, что вы передаёте не сам маршрутизатор (`invoices_callback_router`) в `callback=`, а его атрибут `.routes`, то есть `invoices_callback_router.routes`. FastAPI будет использовать эти маршруты для генерации документации OpenAPI для обратных вызовов. /// diff --git a/docs/ru/docs/advanced/openapi-webhooks.md b/docs/ru/docs/advanced/openapi-webhooks.md index 9b1988ff3..cd4d23e7e 100644 --- a/docs/ru/docs/advanced/openapi-webhooks.md +++ b/docs/ru/docs/advanced/openapi-webhooks.md @@ -22,7 +22,7 @@ Это значительно упростит вашим пользователям реализацию их API для приема ваших вебхук-запросов; возможно, они даже смогут автоматически сгенерировать часть кода своего API. -/// info | Информация +/// note | Примечание Вебхуки доступны в OpenAPI 3.1.0 и выше, поддерживаются в FastAPI `0.99.0` и новее. @@ -36,7 +36,7 @@ Определенные вами вебхуки попадут в схему **OpenAPI** и в автоматический **интерфейс документации**. -/// info | Информация +/// note | Примечание Объект `app.webhooks` на самом деле — это обычный `APIRouter`, тот же тип, который вы используете при структурировании приложения по нескольким файлам. diff --git a/docs/ru/docs/advanced/path-operation-advanced-configuration.md b/docs/ru/docs/advanced/path-operation-advanced-configuration.md index fe2996362..e3bd78d50 100644 --- a/docs/ru/docs/advanced/path-operation-advanced-configuration.md +++ b/docs/ru/docs/advanced/path-operation-advanced-configuration.md @@ -16,17 +16,11 @@ ### Использование имени *функции-обработчика пути* как operationId { #using-the-path-operation-function-name-as-the-operationid } -Если вы хотите использовать имена функций ваших API в качестве `operationId`, вы можете пройти по всем из них и переопределить `operation_id` каждой *операции пути* с помощью их `APIRoute.name`. +Если вы хотите использовать имена функций ваших API в качестве `operationId`, вы можете передать пользовательскую `generate_unique_id_function` в `FastAPI`. -Делать это следует после добавления всех *операций пути*. +Эта функция получает каждый `APIRoute` и возвращает `operationId`, который нужно использовать для этой операции пути. -{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2, 12:21, 24] *} - -/// tip | Совет - -Если вы вызываете `app.openapi()` вручную, обновите `operationId` до этого. - -/// +{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2,5:6,9] *} /// warning | Предупреждение diff --git a/docs/ru/docs/advanced/response-directly.md b/docs/ru/docs/advanced/response-directly.md index fcb8d533d..c9a229018 100644 --- a/docs/ru/docs/advanced/response-directly.md +++ b/docs/ru/docs/advanced/response-directly.md @@ -18,7 +18,7 @@ Вы можете возвращать `Response` или любой его подкласс. -/// info | Информация +/// note | Примечание `JSONResponse` сам по себе является подклассом `Response`. diff --git a/docs/ru/docs/advanced/security/oauth2-scopes.md b/docs/ru/docs/advanced/security/oauth2-scopes.md index 944baeeeb..a0b7a185c 100644 --- a/docs/ru/docs/advanced/security/oauth2-scopes.md +++ b/docs/ru/docs/advanced/security/oauth2-scopes.md @@ -46,7 +46,7 @@ OAuth2 со scopes — это механизм, который использу - `instagram_basic` используется Facebook / Instagram. - `https://www.googleapis.com/auth/drive` используется Google. -/// info | Информация +/// note | Примечание В OAuth2 «scope» — это просто строка, объявляющая требуемое конкретное разрешение. @@ -126,7 +126,7 @@ OAuth2 со scopes — это механизм, который использу {* ../../docs_src/security/tutorial005_an_py310.py hl[5,141,172] *} -/// info | Технические детали +/// note | Технические детали `Security` на самом деле является подклассом `Depends` и имеет всего один дополнительный параметр, который мы рассмотрим позже. diff --git a/docs/ru/docs/advanced/stream-data.md b/docs/ru/docs/advanced/stream-data.md index 4c373db1a..9ae6890a5 100644 --- a/docs/ru/docs/advanced/stream-data.md +++ b/docs/ru/docs/advanced/stream-data.md @@ -4,7 +4,7 @@ Но если вы хотите передавать в потоке чистые бинарные данные или строки, ниже показано, как это сделать. -/// info | Информация +/// note | Примечание Добавлено в FastAPI 0.134.0. @@ -90,7 +90,7 @@ FastAPI будет передавать каждый чанк данных в `S И во многих случаях чтение таких объектов будет блокирующей операцией (которая может заблокировать цикл событий), потому что данные читаются с диска или из сети. -/// info | Информация +/// note | Примечание Приведённый выше пример — исключение, потому что объект `io.BytesIO` уже находится в памяти, поэтому чтение ничего не блокирует. diff --git a/docs/ru/docs/advanced/strict-content-type.md b/docs/ru/docs/advanced/strict-content-type.md index 1a0cbbc31..1d732421c 100644 --- a/docs/ru/docs/advanced/strict-content-type.md +++ b/docs/ru/docs/advanced/strict-content-type.md @@ -81,7 +81,7 @@ http://localhost:8000/v1/agents/multivac С этой настройкой запросы без заголовка `Content-Type` будут иметь тело запроса, обработанное как JSON — это такое же поведение, как в более старых версиях FastAPI. -/// info | Информация +/// note | Примечание Это поведение и настройка были добавлены в FastAPI 0.132.0. diff --git a/docs/ru/docs/advanced/websockets.md b/docs/ru/docs/advanced/websockets.md index abfd789a4..0f69f57b3 100644 --- a/docs/ru/docs/advanced/websockets.md +++ b/docs/ru/docs/advanced/websockets.md @@ -111,7 +111,7 @@ $ fastapi dev {* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *} -/// info | Примечание +/// note | Примечание В веб-сокете вызывать `HTTPException` не имеет смысла. Вместо этого нужно использовать `WebSocketException`. diff --git a/docs/ru/docs/advanced/wsgi.md b/docs/ru/docs/advanced/wsgi.md index 3ed85d0e9..d62133c73 100644 --- a/docs/ru/docs/advanced/wsgi.md +++ b/docs/ru/docs/advanced/wsgi.md @@ -6,7 +6,7 @@ ## Использование `WSGIMiddleware` { #using-wsgimiddleware } -/// info | Информация +/// note | Примечание Для этого требуется установить `a2wsgi`, например с помощью `pip install a2wsgi`. diff --git a/docs/ru/docs/deployment/docker.md b/docs/ru/docs/deployment/docker.md index 3b16d7798..50147750e 100644 --- a/docs/ru/docs/deployment/docker.md +++ b/docs/ru/docs/deployment/docker.md @@ -132,7 +132,7 @@ Successfully installed fastapi pydantic -/// info | Информация +/// note | Заметка Существуют и другие форматы и инструменты для описания и установки зависимостей. @@ -556,7 +556,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"] Если у вас **несколько контейнеров**, и, вероятно, каждый запускает **один процесс** (например, в кластере **Kubernetes**), то вы, скорее всего, захотите иметь **отдельный контейнер**, выполняющий **предварительные шаги** в одном контейнере и одном процессе **до** запуска реплицированных контейнеров-воркеров. -/// info | Информация +/// note | Заметка Если вы используете Kubernetes, это, вероятно, будет [Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/). diff --git a/docs/ru/docs/deployment/fastapicloud.md b/docs/ru/docs/deployment/fastapicloud.md index 95db3387f..fa3160519 100644 --- a/docs/ru/docs/deployment/fastapicloud.md +++ b/docs/ru/docs/deployment/fastapicloud.md @@ -1,26 +1,6 @@ # FastAPI Cloud { #fastapi-cloud } -Вы можете развернуть своё приложение FastAPI в [FastAPI Cloud](https://fastapicloud.com) одной командой, присоединяйтесь к списку ожидания, если ещё не сделали этого. 🚀 - -## Вход { #login } - -Убедитесь, что у вас уже есть аккаунт **FastAPI Cloud** (мы пригласили вас из списка ожидания 😉). - -Затем выполните вход: - -
- -```console -$ fastapi login - -You are logged in to FastAPI Cloud 🚀 -``` - -
- -## Деплой { #deploy } - -Теперь разверните приложение одной командой: +Вы можете развернуть своё приложение FastAPI в [FastAPI Cloud](https://fastapicloud.com) всего **одной командой**. 🚀
@@ -36,6 +16,8 @@ Deploying to FastAPI Cloud...
+CLI автоматически определит ваше приложение FastAPI и развернёт его в облаке. Если вы не вошли в аккаунт, откроется браузер для завершения процесса аутентификации. + Вот и всё! Теперь вы можете открыть своё приложение по этому URL. ✨ ## О FastAPI Cloud { #about-fastapi-cloud } diff --git a/docs/ru/docs/deployment/manually.md b/docs/ru/docs/deployment/manually.md index 3169f3189..db5581ae5 100644 --- a/docs/ru/docs/deployment/manually.md +++ b/docs/ru/docs/deployment/manually.md @@ -46,7 +46,7 @@ $ fastapi run ASGI. FastAPI — ASGI-веб‑фреймворк. +FastAPI использует стандарт для построения Python‑веб‑фреймворков и серверов под названием ASGI. FastAPI — ASGI-веб‑фреймворк. Главное, что вам нужно, чтобы запустить приложение **FastAPI** (или любое другое ASGI‑приложение) на удалённой серверной машине, — это программа ASGI‑сервера, такая как **Uvicorn**; именно он используется по умолчанию в команде `fastapi`. @@ -56,7 +56,6 @@ FastAPI использует стандарт для построения Python * [Hypercorn](https://hypercorn.readthedocs.io/): ASGI‑сервер, среди прочего совместимый с HTTP/2 и Trio. * [Daphne](https://github.com/django/daphne): ASGI‑сервер, созданный для Django Channels. * [Granian](https://github.com/emmett-framework/granian): HTTP‑сервер на Rust для Python‑приложений. -* [NGINX Unit](https://unit.nginx.org/howto/fastapi/): NGINX Unit — лёгкая и многофункциональная среда выполнения веб‑приложений. ## Сервер как машина и сервер как программа { #server-machine-and-server-program } diff --git a/docs/ru/docs/deployment/server-workers.md b/docs/ru/docs/deployment/server-workers.md index 2caf79f7d..8d4bd33ef 100644 --- a/docs/ru/docs/deployment/server-workers.md +++ b/docs/ru/docs/deployment/server-workers.md @@ -17,7 +17,7 @@ Здесь я покажу, как использовать **Uvicorn** с **воркер-процессами** через команду `fastapi` или напрямую через команду `uvicorn`. -/// info | Информация +/// note | Примечание Если вы используете контейнеры, например Docker или Kubernetes, я расскажу об этом подробнее в следующей главе: [FastAPI в контейнерах — Docker](docker.md). diff --git a/docs/ru/docs/how-to/extending-openapi.md b/docs/ru/docs/how-to/extending-openapi.md index c1e369f5e..4a0a91b1c 100644 --- a/docs/ru/docs/how-to/extending-openapi.md +++ b/docs/ru/docs/how-to/extending-openapi.md @@ -25,11 +25,19 @@ * `openapi_version`: Версия используемой спецификации OpenAPI. По умолчанию — последняя: `3.1.0`. * `summary`: Краткое описание API. * `description`: Описание вашего API; может включать Markdown и будет отображаться в документации. -* `routes`: Список маршрутов — это каждая зарегистрированная *операция пути*. Берутся из `app.routes`. +* `routes`: Список маршрутов — это каждая зарегистрированная *операция пути*. Берутся из `app.routes`. FastAPI использует их, чтобы собрать зарегистрированные *операции пути*, включая те из подключённых роутеров. -/// info | Информация +/// tip | Технические детали -Параметр `summary` доступен в OpenAPI 3.1.0 и выше, поддерживается FastAPI версии 0.99.0 и выше. +`app.routes` — это более низкоуровневое дерево маршрутов. Оно может включать кандидаты маршрутов, которые FastAPI использует внутренне для подключённых роутеров, а не только конечные объекты `APIRoute`. + +Вы всё равно можете передать `app.routes` в `get_openapi()`. FastAPI обойдёт это дерево маршрутов, чтобы собрать фактические операции пути. + +/// + +/// note | Примечание + +Параметр `summary` доступен в OpenAPI 3.1.0 и выше, поддерживается FastAPI 0.99.0 и выше. /// diff --git a/docs/ru/docs/how-to/separate-openapi-schemas.md b/docs/ru/docs/how-to/separate-openapi-schemas.md index 8f6c83e7e..3e0830891 100644 --- a/docs/ru/docs/how-to/separate-openapi-schemas.md +++ b/docs/ru/docs/how-to/separate-openapi-schemas.md @@ -85,7 +85,7 @@ В таком случае вы можете отключить эту функциональность в **FastAPI** с помощью параметра `separate_input_output_schemas=False`. -/// info | Информация +/// note | Примечание Поддержка `separate_input_output_schemas` появилась в FastAPI `0.102.0`. 🤓 diff --git a/docs/ru/docs/index.md b/docs/ru/docs/index.md index 015b9769e..1b6f3d40a 100644 --- a/docs/ru/docs/index.md +++ b/docs/ru/docs/index.md @@ -492,9 +492,7 @@ item: Item ### Разверните приложение (опционально) { #deploy-your-app-optional } -При желании вы можете развернуть своё приложение FastAPI в [FastAPI Cloud](https://fastapicloud.com), присоединяйтесь к списку ожидания, если ещё не сделали этого. 🚀 - -Если у вас уже есть аккаунт **FastAPI Cloud** (мы пригласили вас из списка ожидания 😉), вы можете развернуть ваше приложение одной командой. +При желании вы можете развернуть своё приложение FastAPI в [FastAPI Cloud](https://fastapicloud.com) одной командой. 🚀
@@ -510,6 +508,8 @@ Deploying to FastAPI Cloud...
+CLI автоматически определит ваше приложение FastAPI и развернёт его в облаке. Если вы не вошли в систему, откроется браузер для завершения процесса аутентификации. + Вот и всё! Теперь вы можете открыть ваше приложение по этой ссылке. ✨ #### О FastAPI Cloud { #about-fastapi-cloud } diff --git a/docs/ru/docs/tutorial/bigger-applications.md b/docs/ru/docs/tutorial/bigger-applications.md index 453851d34..2c7784f22 100644 --- a/docs/ru/docs/tutorial/bigger-applications.md +++ b/docs/ru/docs/tutorial/bigger-applications.md @@ -396,9 +396,9 @@ from .routers.users import router /// note | Технические детали -Фактически, внутри он создаст *операцию пути* для каждой *операции пути*, объявленной в `APIRouter`. +FastAPI сохраняет исходный `APIRouter` и его `APIRoute` активными, когда маршрутизатор включается в основное приложение. -Так что под капотом всё будет работать так, как будто всё было одним приложением. +Это означает, что пользовательские подклассы `APIRouter` и `APIRoute` по-прежнему участвуют после подключения маршрутизатора. /// @@ -406,7 +406,7 @@ from .routers.users import router При подключении маршрутизаторов не нужно беспокоиться о производительности. -Это займёт микросекунды и произойдёт только при старте. +Это сделано максимально лёгким и не добавляет накладных расходов на каждый запрос. Так что это не повлияет на производительность. ⚡ @@ -459,9 +459,9 @@ from .routers.users import router `APIRouter` не «монтируются», они не изолированы от остального приложения. -Это потому, что мы хотим включить их *операции пути* в OpenAPI-схему и пользовательские интерфейсы. +Это потому, что мы хотим включить их *операции пути* в схему OpenAPI и пользовательские интерфейсы. -Так как мы не можем просто изолировать их и «смонтировать» независимо от остального, *операции пути* «клонируются» (пересоздаются), а не включаются напрямую. +FastAPI сохраняет исходные маршрутизаторы и операции пути активными и комбинирует префиксы маршрутизаторов, зависимости, теги, ответы и другие метаданные при обработке запросов и генерации OpenAPI. /// @@ -524,7 +524,7 @@ $ fastapi dev Это продвинутое использование, которое вам может и не понадобиться, но оно есть на случай, если понадобится. -## Подключение `APIRouter` в другой `APIRouter` { #include-an-apirouter-in-another } +## Подключение `APIRouter` в другой `APIRouter` { #include-an-apirouter-in-another } Точно так же, как вы можете подключить `APIRouter` к приложению `FastAPI`, вы можете подключить `APIRouter` к другому `APIRouter`, используя: @@ -532,4 +532,16 @@ $ fastapi dev router.include_router(other_router) ``` -Убедитесь, что вы сделали это до подключения `router` к приложению `FastAPI`, чтобы *операции пути* из `other_router` также были подключены. +Вы можете сделать это до или после подключения `router` к приложению `FastAPI`. FastAPI всё равно включит *операции пути* из `other_router` в маршрутизацию и OpenAPI. + +То же относится к *операциям пути*, добавленным позже в маршрутизаторы. Они также будут видны через более раннее включение. + +/// warning | Технические детали + +Избегайте прямой мутации `router.routes` после включения маршрутизатора. FastAPI рассматривает включение маршрутизатора как «живое», поэтому исходный маршрутизатор и его маршруты остаются частью маршрутизации и генерации OpenAPI. + +Используйте документированные API, такие как декораторы операций пути и `.include_router()`, чтобы добавлять маршруты и маршрутизаторы. + +Считайте `router.routes` низкоуровневым деревом маршрутов, которое может содержать определения маршрутов и включённые маршрутизаторы, и избегайте воспринимать его как плоский список итоговых операций пути. + +/// diff --git a/docs/ru/docs/tutorial/body-multiple-params.md b/docs/ru/docs/tutorial/body-multiple-params.md index ddd9c6fdd..cd9c56012 100644 --- a/docs/ru/docs/tutorial/body-multiple-params.md +++ b/docs/ru/docs/tutorial/body-multiple-params.md @@ -108,7 +108,7 @@ q: str | None = None {* ../../docs_src/body_multiple_params/tutorial004_an_py310.py hl[28] *} -/// info | Информация +/// note | Заметка `Body` также имеет все те же дополнительные параметры валидации и метаданных, как у `Query`, `Path` и других, которые вы увидите позже. @@ -123,7 +123,7 @@ q: str | None = None Но если вы хотите чтобы он ожидал JSON с ключом `item` с содержимым модели внутри, также как это происходит при объявлении дополнительных body-параметров, вы можете использовать специальный параметр `embed` у типа `Body`: ```Python -item: Item = Body(embed=True) +item: Annotated[Item, Body(embed=True)] ``` так же, как в этом примере: diff --git a/docs/ru/docs/tutorial/body-nested-models.md b/docs/ru/docs/tutorial/body-nested-models.md index fab025dbc..d4baf8230 100644 --- a/docs/ru/docs/tutorial/body-nested-models.md +++ b/docs/ru/docs/tutorial/body-nested-models.md @@ -16,7 +16,8 @@ ### Объявите `list` с параметром типа { #declare-a-list-with-a-type-parameter } -Для объявления типов, у которых есть параметры типа (внутренние типы), таких как `list`, `dict`, `tuple`, передайте внутренний(ие) тип(ы) как «параметры типа», используя квадратные скобки: `[` и `]` +Для объявления типов, у которых есть параметры типа (внутренние типы), таких как `list`, `dict`, `tuple`, +передайте внутренний(ие) тип(ы) как «параметры типа», используя квадратные скобки: `[` и `]` ```Python my_list: list[str] @@ -135,7 +136,7 @@ my_list: list[str] } ``` -/// info | Информация +/// note | Примечание Заметьте, что теперь у ключа `images` есть список объектов изображений. @@ -147,7 +148,7 @@ my_list: list[str] {* ../../docs_src/body_nested_models/tutorial007_py310.py hl[7,12,18,21,25] *} -/// info | Информация +/// note | Примечание Заметьте, что у объекта `Offer` есть список объектов `Item`, которые, в свою очередь, могут содержать необязательный список объектов `Image` diff --git a/docs/ru/docs/tutorial/body.md b/docs/ru/docs/tutorial/body.md index 8a67c8f51..7b3ab22d3 100644 --- a/docs/ru/docs/tutorial/body.md +++ b/docs/ru/docs/tutorial/body.md @@ -8,7 +8,7 @@ Чтобы объявить тело **запроса**, используйте модели [Pydantic](https://docs.pydantic.dev/), со всей их мощью и преимуществами. -/// info | Информация +/// note | Заметка Чтобы отправить данные, используйте один из методов: `POST` (чаще всего), `PUT`, `DELETE` или `PATCH`. diff --git a/docs/ru/docs/tutorial/cookie-param-models.md b/docs/ru/docs/tutorial/cookie-param-models.md index 9b34cf030..2b9681433 100644 --- a/docs/ru/docs/tutorial/cookie-param-models.md +++ b/docs/ru/docs/tutorial/cookie-param-models.md @@ -32,7 +32,7 @@ -/// info | Дополнительная информация +/// note | Заметка Имейте в виду, что, поскольку **браузеры обрабатывают cookies** особым образом и под капотом, они **не** позволят **JavaScript** легко получить доступ к ним. diff --git a/docs/ru/docs/tutorial/cookie-params.md b/docs/ru/docs/tutorial/cookie-params.md index 8dad3873e..f801c4ac4 100644 --- a/docs/ru/docs/tutorial/cookie-params.md +++ b/docs/ru/docs/tutorial/cookie-params.md @@ -24,13 +24,13 @@ /// -/// info | Дополнительная информация +/// note | Примечание Для объявления cookies, вам нужно использовать `Cookie`, иначе параметры будут интерпретированы как параметры запроса. /// -/// info | Дополнительная информация +/// note | Примечание Имейте в виду, что, поскольку **браузеры обрабатывают cookies** особым образом и «за кулисами», они **не** позволяют **JavaScript** просто так получать к ним доступ. diff --git a/docs/ru/docs/tutorial/debugging.md b/docs/ru/docs/tutorial/debugging.md index 330055be4..deb92f1b9 100644 --- a/docs/ru/docs/tutorial/debugging.md +++ b/docs/ru/docs/tutorial/debugging.md @@ -72,7 +72,7 @@ from myapp import app не будет выполнена. -/// info | Информация +/// note | Примечание Для получения дополнительной информации, ознакомьтесь с [официальной документацией Python](https://docs.python.org/3/library/__main__.html). 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 b4b7ce631..2193343e6 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 @@ -28,7 +28,7 @@ /// -/// info | Примечание +/// note | Примечание В этом примере мы используем выдуманные пользовательские HTTP-заголовки `X-Key` и `X-Token`. diff --git a/docs/ru/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/ru/docs/tutorial/dependencies/dependencies-with-yield.md index 04c2c2da4..61ab8f44d 100644 --- a/docs/ru/docs/tutorial/dependencies/dependencies-with-yield.md +++ b/docs/ru/docs/tutorial/dependencies/dependencies-with-yield.md @@ -170,7 +170,7 @@ participant tasks as Background tasks end ``` -/// info | Дополнительная информация +/// note | Примечание Клиенту будет отправлен только **один ответ**. Это может быть один из ответов об ошибке или ответ от *операции пути*. @@ -219,7 +219,7 @@ participant operation as Функция-обработчик пути Note over dep_req: Выполнить код до yield dep_req ->> dep_func: Передать значение Note over dep_func: Выполнить код до yield - dep_func ->> operation: Выполнить функцию-обработчик пути + dep_func ->> operation: Выполнить функцию-обработчика пути operation ->> dep_func: Выход из функции-обработчика пути Note over dep_func: Выполнить код после yield Note over dep_func: ✅ Зависимость закрыта diff --git a/docs/ru/docs/tutorial/dependencies/index.md b/docs/ru/docs/tutorial/dependencies/index.md index 4aed03554..6efd023e2 100644 --- a/docs/ru/docs/tutorial/dependencies/index.md +++ b/docs/ru/docs/tutorial/dependencies/index.md @@ -51,7 +51,7 @@ А затем просто возвращает `dict`, содержащий эти значения. -/// info | Информация +/// note | Примечание FastAPI добавил поддержку `Annotated` (и начал рекомендовать его использование) в версии 0.95.0. @@ -106,7 +106,7 @@ common_parameters --> read_users Таким образом, вы пишете общий код один раз, а **FastAPI** позаботится о его вызове для ваших *операций пути*. -/// check | Проверка +/// tip | Подсказка Обратите внимание, что вам не нужно создавать специальный класс и передавать его куда-то в **FastAPI**, чтобы «зарегистрировать» его или что-то подобное. diff --git a/docs/ru/docs/tutorial/dependencies/sub-dependencies.md b/docs/ru/docs/tutorial/dependencies/sub-dependencies.md index 3c71defd8..b36adf486 100644 --- a/docs/ru/docs/tutorial/dependencies/sub-dependencies.md +++ b/docs/ru/docs/tutorial/dependencies/sub-dependencies.md @@ -6,9 +6,9 @@ **FastAPI** сам займётся их управлением. -## Первая зависимость { #first-dependency-dependable } +## Первая «зависимость» { #first-dependency-dependable } -Можно создать первую зависимость следующим образом: +Можно создать первую «зависимость» следующим образом: {* ../../docs_src/dependencies/tutorial005_an_py310.py hl[8:9] *} @@ -35,7 +35,7 @@ {* ../../docs_src/dependencies/tutorial005_an_py310.py hl[23] *} -/// info | Дополнительная информация +/// note | Примечание Обратите внимание, что мы объявляем только одну зависимость в *функции операции пути* - `query_or_cookie_extractor`. diff --git a/docs/ru/docs/tutorial/first-steps.md b/docs/ru/docs/tutorial/first-steps.md index 7216d4cb7..ce743b369 100644 --- a/docs/ru/docs/tutorial/first-steps.md +++ b/docs/ru/docs/tutorial/first-steps.md @@ -180,7 +180,7 @@ entrypoint = "backend.main:app" from backend.main import app ``` -### `fastapi dev` с путём { #fastapi-dev-with-path } +### `fastapi dev` с путём или с опцией CLI `--entrypoint` { #fastapi-dev-with-path-or-with-entrypoint-cli-option } Вы также можете передать путь к файлу в команду `fastapi dev`, и она попытается определить объект приложения FastAPI для использования: @@ -188,29 +188,19 @@ from backend.main import app $ fastapi dev main.py ``` -Но в этом случае вам придётся каждый раз помнить о передаче корректного пути при вызове команды `fastapi`. +Или вы можете передать опцию `--entrypoint` команде `fastapi dev`: + +```console +$ fastapi dev --entrypoint main:app +``` + +Но в этом случае вам придётся каждый раз помнить о передаче корректного пути/entrypoint при вызове команды `fastapi`. Кроме того, другие инструменты могут его не найти, например [Расширение VS Code](../editor-support.md) или [FastAPI Cloud](https://fastapicloud.com), поэтому рекомендуется использовать `entrypoint` в `pyproject.toml`. ### Разверните приложение (необязательно) { #deploy-your-app-optional } -При желании вы можете развернуть своё приложение FastAPI в [FastAPI Cloud](https://fastapicloud.com), перейдите и присоединитесь к списку ожидания, если ещё не сделали этого. 🚀 - -Если у вас уже есть аккаунт **FastAPI Cloud** (мы пригласили вас из списка ожидания 😉), вы можете развернуть приложение одной командой. - -Перед развертыванием убедитесь, что вы вошли в систему: - -
- -```console -$ fastapi login - -You are logged in to FastAPI Cloud 🚀 -``` - -
- -Затем разверните приложение: +При желании вы можете развернуть своё приложение FastAPI в [FastAPI Cloud](https://fastapicloud.com) одной командой. 🚀
@@ -226,6 +216,8 @@ Deploying to FastAPI Cloud...
+CLI автоматически определит ваше приложение FastAPI и развернёт его в облаке. Если вы не вошли в систему, откроется браузер для завершения процесса аутентификации. + Готово! Теперь вы можете открыть своё приложение по этому URL. ✨ ## Рассмотрим поэтапно { #recap-step-by-step } @@ -270,7 +262,7 @@ https://example.com/items/foo /items/foo ``` -/// info | Информация +/// note | Примечание «Путь» также часто называют «эндпоинт» или «маршрут». @@ -322,7 +314,7 @@ https://example.com/items/foo * по пути `/` * с использованием get операции -/// info | Информация о `@decorator` +/// note | Информация о `@decorator` Синтаксис `@something` в Python называется «декоратор». diff --git a/docs/ru/docs/tutorial/metadata.md b/docs/ru/docs/tutorial/metadata.md index 261cc43f5..b1335f668 100644 --- a/docs/ru/docs/tutorial/metadata.md +++ b/docs/ru/docs/tutorial/metadata.md @@ -74,7 +74,7 @@ {* ../../docs_src/metadata/tutorial004_py310.py hl[21,26] *} -/// info | Дополнительная информация +/// note | Примечание Узнайте больше о тегах в [Конфигурации операции пути](path-operation-configuration.md#tags). diff --git a/docs/ru/docs/tutorial/path-operation-configuration.md b/docs/ru/docs/tutorial/path-operation-configuration.md index 965f2a1ba..c1264d9dd 100644 --- a/docs/ru/docs/tutorial/path-operation-configuration.md +++ b/docs/ru/docs/tutorial/path-operation-configuration.md @@ -72,13 +72,13 @@ {* ../../docs_src/path_operation_configuration/tutorial005_py310.py hl[18] *} -/// info | Дополнительная информация +/// note | Примечание Помните, что `response_description` относится конкретно к ответу, а `description` относится к *операции пути* в целом. /// -/// check | Проверка +/// tip | Совет OpenAPI указывает, что каждой *операции пути* необходимо описание ответа. diff --git a/docs/ru/docs/tutorial/path-params-numeric-validations.md b/docs/ru/docs/tutorial/path-params-numeric-validations.md index 34eeb80cb..dbbc025f1 100644 --- a/docs/ru/docs/tutorial/path-params-numeric-validations.md +++ b/docs/ru/docs/tutorial/path-params-numeric-validations.md @@ -8,7 +8,7 @@ {* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[1,3] *} -/// info | Информация +/// note | Примечание Поддержка `Annotated` была добавлена в FastAPI начиная с версии 0.95.0 (и с этой версии рекомендуется использовать этот подход). @@ -131,7 +131,7 @@ Python не будет ничего делать с `*`, но он будет з * `lt`: меньше (`l`ess `t`han) * `le`: меньше или равно (`l`ess than or `e`qual) -/// info | Информация +/// note | Примечание `Query`, `Path` и другие классы, которые вы разберёте позже, являются наследниками общего класса `Param`. diff --git a/docs/ru/docs/tutorial/path-params.md b/docs/ru/docs/tutorial/path-params.md index 79343a158..cfc96189c 100644 --- a/docs/ru/docs/tutorial/path-params.md +++ b/docs/ru/docs/tutorial/path-params.md @@ -20,7 +20,7 @@ Здесь, `item_id` объявлен типом `int`. -/// check | Заметка +/// tip | Подсказка Это обеспечит поддержку редактора кода внутри функции (проверка ошибок, автозавершение и т.п.). @@ -34,7 +34,7 @@ {"item_id":3} ``` -/// check | Заметка +/// tip | Подсказка Обратите внимание на значение `3`, которое получила (и вернула) функция. Это целочисленный Python `int`, а не строка `"3"`. @@ -66,7 +66,7 @@ Та же ошибка возникнет, если вместо `int` передать `float`, например: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2) -/// check | Заметка +/// tip | Подсказка **FastAPI** обеспечивает валидацию данных, используя всё те же определения типов. @@ -82,7 +82,7 @@ -/// check | Заметка +/// tip | Подсказка Ещё раз, просто используя определения типов, **FastAPI** обеспечивает автоматическую интерактивную документацию (с интеграцией Swagger UI). diff --git a/docs/ru/docs/tutorial/query-params-str-validations.md b/docs/ru/docs/tutorial/query-params-str-validations.md index 08a5e11a5..7af7ccfa0 100644 --- a/docs/ru/docs/tutorial/query-params-str-validations.md +++ b/docs/ru/docs/tutorial/query-params-str-validations.md @@ -29,7 +29,7 @@ FastAPI поймёт, что значение `q` не обязательно, {* ../../docs_src/query_params_str_validations/tutorial002_an_py310.py hl[1,3] *} -/// info | Дополнительная информация +/// note | Примечание Поддержка `Annotated` (и рекомендация использовать его) появилась в FastAPI версии 0.95.0. @@ -381,7 +381,7 @@ http://127.0.0.1:8000/items/?item-query=foobaritems {* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py hl[5,16:19,24] *} -/// info | Дополнительная информация +/// note | Примечание Это доступно в Pydantic версии 2 и выше. 😎 diff --git a/docs/ru/docs/tutorial/query-params.md b/docs/ru/docs/tutorial/query-params.md index 99f2a98ae..524b53945 100644 --- a/docs/ru/docs/tutorial/query-params.md +++ b/docs/ru/docs/tutorial/query-params.md @@ -65,7 +65,7 @@ http://127.0.0.1:8000/items/?skip=20 В этом случае, параметр `q` будет не обязательным и будет иметь значение `None` по умолчанию. -/// check | Важно +/// tip | Подсказка Также обратите внимание, что **FastAPI** достаточно умён чтобы заметить, что параметр `item_id` является path-параметром, а `q` нет, поэтому, это параметр запроса. diff --git a/docs/ru/docs/tutorial/request-files.md b/docs/ru/docs/tutorial/request-files.md index e8500adba..29a7f5ec1 100644 --- a/docs/ru/docs/tutorial/request-files.md +++ b/docs/ru/docs/tutorial/request-files.md @@ -2,7 +2,7 @@ Используя класс `File`, мы можем позволить клиентам загружать файлы. -/// info | Дополнительная информация +/// note | Примечание Чтобы получать загруженные файлы, сначала установите [`python-multipart`](https://github.com/Kludex/python-multipart). @@ -28,7 +28,7 @@ $ pip install python-multipart {* ../../docs_src/request_files/tutorial001_an_py310.py hl[9] *} -/// info | Дополнительная информация +/// note | Примечание `File` - это класс, который наследуется непосредственно от `Form`. diff --git a/docs/ru/docs/tutorial/request-form-models.md b/docs/ru/docs/tutorial/request-form-models.md index c7f37c2ba..3852e3a03 100644 --- a/docs/ru/docs/tutorial/request-form-models.md +++ b/docs/ru/docs/tutorial/request-form-models.md @@ -2,7 +2,7 @@ Вы можете использовать **Pydantic-модели** для объявления **полей формы** в FastAPI. -/// info | Дополнительная информация +/// note | Заметка Чтобы использовать формы, сначала установите [`python-multipart`](https://github.com/Kludex/python-multipart). diff --git a/docs/ru/docs/tutorial/request-forms-and-files.md b/docs/ru/docs/tutorial/request-forms-and-files.md index f291d5347..347818ae3 100644 --- a/docs/ru/docs/tutorial/request-forms-and-files.md +++ b/docs/ru/docs/tutorial/request-forms-and-files.md @@ -2,7 +2,7 @@ Вы можете определять файлы и поля формы одновременно, используя `File` и `Form`. -/// info | Информация +/// note | Примечание Чтобы получать загруженные файлы и/или данные форм, сначала установите [`python-multipart`](https://github.com/Kludex/python-multipart). diff --git a/docs/ru/docs/tutorial/request-forms.md b/docs/ru/docs/tutorial/request-forms.md index 3760a8a3b..3108c933e 100644 --- a/docs/ru/docs/tutorial/request-forms.md +++ b/docs/ru/docs/tutorial/request-forms.md @@ -2,7 +2,7 @@ Когда вам нужно получить поля формы вместо JSON, вы можете использовать `Form`. -/// info | Дополнительная информация +/// note | Примечание Чтобы использовать формы, сначала установите [`python-multipart`](https://github.com/Kludex/python-multipart). @@ -32,7 +32,7 @@ $ pip install python-multipart С помощью `Form` вы можете объявить те же настройки, что и с `Body` (и `Query`, `Path`, `Cookie`), включая валидацию, примеры, псевдоним (например, `user-name` вместо `username`) и т.д. -/// info | Дополнительная информация +/// note | Примечание `Form` — это класс, который наследуется непосредственно от `Body`. diff --git a/docs/ru/docs/tutorial/response-model.md b/docs/ru/docs/tutorial/response-model.md index 510143d7b..bf0a6fc0a 100644 --- a/docs/ru/docs/tutorial/response-model.md +++ b/docs/ru/docs/tutorial/response-model.md @@ -72,11 +72,11 @@ FastAPI будет использовать этот `response_model` для д {* ../../docs_src/response_model/tutorial002_py310.py hl[7,9] *} -/// info | Информация +/// note | Примечание Чтобы использовать `EmailStr`, сначала установите [`email-validator`](https://github.com/JoshData/python-email-validator). -Убедитесь, что вы создали [виртуальное окружение](../virtual-environments.md), активировали его, а затем установите пакет, например: +Убедитесь, что вы создали [виртуальное окружение](../virtual-environments.md), активировали его, а затем установили пакет, например: ```console $ pip install email-validator @@ -178,7 +178,7 @@ FastAPI делает несколько вещей внутри вместе с ## Другие аннотации возвращаемых типов { #other-return-type-annotations } -Бывают случаи, когда вы возвращаете что-то, что не является валидным полем Pydantic, и аннотируете это в функции только ради поддержки инструментов (редактор кода, mypy и т.д.). +Бывают случаи, когда вы возвращаете что-то, что не является валидным полем Pydantic, и аннотируете это в функции только ради поддержки инструментов (редактор коды, mypy и т.д.). ### Возврат Response напрямую { #return-a-response-directly } @@ -251,7 +251,7 @@ FastAPI делает несколько вещей внутри вместе с } ``` -/// info | Информация +/// note | Примечание Вы также можете использовать: diff --git a/docs/ru/docs/tutorial/response-status-code.md b/docs/ru/docs/tutorial/response-status-code.md index f3144a33a..ef190a341 100644 --- a/docs/ru/docs/tutorial/response-status-code.md +++ b/docs/ru/docs/tutorial/response-status-code.md @@ -18,7 +18,7 @@ Параметр `status_code` принимает число, обозначающее HTTP статус-код. -/// info | Информация +/// note | Примечание В качестве значения параметра `status_code` также может использоваться `IntEnum`, например, из библиотеки [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus) в Python. diff --git a/docs/ru/docs/tutorial/schema-extra-example.md b/docs/ru/docs/tutorial/schema-extra-example.md index ee2f5b991..435b34460 100644 --- a/docs/ru/docs/tutorial/schema-extra-example.md +++ b/docs/ru/docs/tutorial/schema-extra-example.md @@ -24,7 +24,7 @@ /// -/// info | Информация +/// note | Примечание OpenAPI 3.1.0 (используется начиная с FastAPI 0.99.0) добавил поддержку `examples`, который является частью стандарта **JSON Schema**. @@ -155,7 +155,7 @@ OpenAPI также добавила поля `example` и `examples` в друг * `File()` * `Form()` -/// info | Информация +/// note | Примечание Этот старый специфичный для OpenAPI параметр `examples` теперь называется `openapi_examples`, начиная с FastAPI `0.103.0`. @@ -171,7 +171,7 @@ OpenAPI также добавила поля `example` и `examples` в друг Это новое поле `examples` в JSON Schema — это **просто `list`** примеров, а не dict с дополнительными метаданными, как в других местах OpenAPI (описанных выше). -/// info | Информация +/// note | Примечание Даже после того как OpenAPI 3.1.0 была выпущена с этой новой, более простой интеграцией с JSON Schema, какое‑то время Swagger UI, инструмент, предоставляющий автоматическую документацию, не поддерживал OpenAPI 3.1.0 (поддержка появилась начиная с версии 5.0.0 🎉). diff --git a/docs/ru/docs/tutorial/security/first-steps.md b/docs/ru/docs/tutorial/security/first-steps.md index c55e832f4..e702dfadb 100644 --- a/docs/ru/docs/tutorial/security/first-steps.md +++ b/docs/ru/docs/tutorial/security/first-steps.md @@ -24,7 +24,7 @@ ## Запуск { #run-it } -/// info | Дополнительная информация +/// note | Примечание Пакет [`python-multipart`](https://github.com/Kludex/python-multipart) автоматически устанавливается вместе с **FastAPI**, если вы запускаете команду `pip install "fastapi[standard]"`. @@ -60,7 +60,7 @@ $ fastapi dev -/// check | Кнопка авторизации! +/// tip | Кнопка авторизации! У вас уже появилась новая кнопка «Authorize». @@ -118,7 +118,7 @@ OAuth2 был спроектирован так, чтобы бэкенд или В этом примере мы будем использовать **OAuth2**, с потоком **Password**, используя токен **Bearer**. Для этого мы используем класс `OAuth2PasswordBearer`. -/// info | Дополнительная информация +/// note | Примечание Токен «bearer» — не единственный вариант. @@ -148,7 +148,7 @@ OAuth2 был спроектирован так, чтобы бэкенд или Скоро мы также создадим и саму операцию пути. -/// info | Дополнительная информация +/// note | Примечание Если вы очень строгий «питонист», вам может не понравиться стиль имени параметра `tokenUrl` вместо `token_url`. @@ -176,7 +176,7 @@ oauth2_scheme(some, parameters) **FastAPI** будет знать, что может использовать эту зависимость для определения «схемы безопасности» в схеме OpenAPI (и в автоматической документации по API). -/// info | Технические детали +/// note | Технические детали **FastAPI** будет знать, что может использовать класс `OAuth2PasswordBearer` (объявленный в зависимости) для определения схемы безопасности в OpenAPI, потому что он наследуется от `fastapi.security.oauth2.OAuth2`, который, в свою очередь, наследуется от `fastapi.security.base.SecurityBase`. @@ -186,7 +186,7 @@ oauth2_scheme(some, parameters) ## Что он делает { #what-it-does } -Он будет искать в запросе заголовок `Authorization`, проверять, что его значение — это `Bearer ` плюс некоторый токен, и вернет токен как `str`. +Он будет искать в запросе HTTP-заголовок `Authorization`, проверять, что его значение — это `Bearer ` плюс некоторый токен, и вернет токен как `str`. Если заголовок `Authorization` отсутствует или его значение не содержит токен `Bearer `, он сразу ответит ошибкой со статус-кодом 401 (`UNAUTHORIZED`). diff --git a/docs/ru/docs/tutorial/security/get-current-user.md b/docs/ru/docs/tutorial/security/get-current-user.md index 8388b672c..7bd48a9a0 100644 --- a/docs/ru/docs/tutorial/security/get-current-user.md +++ b/docs/ru/docs/tutorial/security/get-current-user.md @@ -30,7 +30,7 @@ ## Получить пользователя { #get-the-user } -`get_current_user` будет использовать созданную нами (ненастоящую) служебную функцию, которая принимает токен типа `str` и возвращает нашу Pydantic-модель `User`: +`get_current_user` будет использовать созданную нами (ненастоящую) вспомогательную функцию, которая принимает токен типа `str` и возвращает нашу Pydantic-модель `User`: {* ../../docs_src/security/tutorial002_an_py310.py hl[19:22,26:27] *} @@ -52,7 +52,7 @@ /// -/// check | Заметка +/// tip | Подсказка То, как устроена эта система зависимостей, позволяет иметь разные зависимости, которые возвращают модель `User`. @@ -78,7 +78,7 @@ ## Размер кода { #code-size } -Этот пример может показаться многословным. Имейте в виду, что в одном файле мы смешиваем безопасность, модели данных, служебные функции и *операции пути*. +Этот пример может показаться многословным. Имейте в виду, что в одном файле мы смешиваем безопасность, модели данных, вспомогательные функции и *операции пути*. Но вот ключевой момент. diff --git a/docs/ru/docs/tutorial/security/oauth2-jwt.md b/docs/ru/docs/tutorial/security/oauth2-jwt.md index e3729dfc8..0409cd0a9 100644 --- a/docs/ru/docs/tutorial/security/oauth2-jwt.md +++ b/docs/ru/docs/tutorial/security/oauth2-jwt.md @@ -42,7 +42,7 @@ $ pip install pyjwt -/// info | Дополнительная информация +/// note | Дополнительная информация Если вы планируете использовать алгоритмы цифровой подписи, такие как RSA или ECDSA, вам следует установить зависимость библиотеки криптографии `pyjwt[crypto]`. @@ -213,7 +213,7 @@ JWT может использоваться и для других целей, Username: `johndoe` Password: `secret` -/// check | Проверка +/// tip | Подсказка Обратите внимание, что нигде в коде не используется открытый текст пароля "`secret`", мы используем только его хэшированную версию. diff --git a/docs/ru/docs/tutorial/security/simple-oauth2.md b/docs/ru/docs/tutorial/security/simple-oauth2.md index 4ef5109e4..415ef017b 100644 --- a/docs/ru/docs/tutorial/security/simple-oauth2.md +++ b/docs/ru/docs/tutorial/security/simple-oauth2.md @@ -32,7 +32,7 @@ OAuth2 определяет, что при использовании "password * `instagram_basic` используется Facebook / Instagram. * `https://www.googleapis.com/auth/drive` используется Google. -/// info | Дополнительная информация +/// note | Примечание В OAuth2 "scope" — это просто строка, которая указывает требуемое конкретное разрешение. Не имеет значения, содержит ли она другие символы, например `:`, или является ли это URL. @@ -68,7 +68,7 @@ OAuth2 определяет, что при использовании "password * Необязательное поле `client_id` (в нашем примере оно не нужно). * Необязательное поле `client_secret` (в нашем примере оно не нужно). -/// info | Дополнительная информация +/// note | Примечание `OAuth2PasswordRequestForm` — это не специальный класс для **FastAPI**, как `OAuth2PasswordBearer`. `OAuth2PasswordBearer` сообщает **FastAPI**, что это схема безопасности. Поэтому она добавляется в OpenAPI соответствующим образом. @@ -136,7 +136,7 @@ UserInDB( ) ``` -/// info | Дополнительная информация +/// note | Примечание Более полное объяснение `**user_dict` можно найти в [документации к **Дополнительным моделям**](../extra-models.md#about-user-in-dict). /// @@ -182,7 +182,7 @@ UserInDB( {* ../../docs_src/security/tutorial003_an_py310.py hl[58:66,69:74,94] *} -/// info | Дополнительная информация +/// note | Примечание Дополнительный HTTP-заголовок `WWW-Authenticate` со значением `Bearer`, который мы здесь возвращаем, также является частью спецификации. Любой HTTP статус-код 401 "UNAUTHORIZED" должен также возвращать заголовок `WWW-Authenticate`. diff --git a/docs/ru/docs/tutorial/server-sent-events.md b/docs/ru/docs/tutorial/server-sent-events.md index be6bd2366..ea49f85c8 100644 --- a/docs/ru/docs/tutorial/server-sent-events.md +++ b/docs/ru/docs/tutorial/server-sent-events.md @@ -4,7 +4,7 @@ Это похоже на [Стриминг JSON Lines](stream-json-lines.md), но использует формат `text/event-stream`, который нативно поддерживается браузерами через [`EventSource` API](https://developer.mozilla.org/en-US/docs/Web/API/EventSource). -/// info | Информация +/// note | Примечание Добавлено в FastAPI 0.135.0. @@ -29,7 +29,7 @@ SSE часто используют для стриминга ответов И /// tip | Совет -Если вам нужно стримить бинарные данные, например видео или аудио, посмотрите расширенное руководство: [Stream Data](../advanced/stream-data.md). +Если вам нужно стримить бинарные данные, например видео или аудио, посмотрите расширенное руководство: [Потоковая передача данных](../advanced/stream-data.md). /// @@ -113,7 +113,7 @@ SSE работает с любым HTTP-методом, не только с `GE FastAPI из коробки реализует некоторые лучшие практики для SSE. -- Отправлять комментарий «ping» для поддержания соединения («keep alive») каждые 15 секунд, когда нет сообщений, чтобы предотвратить закрытие соединения некоторыми прокси, как рекомендовано в [HTML specification: Server-Sent Events](https://html.spec.whatwg.org/multipage/server-sent-events.html#authoring-notes). +- Отправлять комментарий «ping» для поддержания соединения («keep alive») каждые 15 секунд, когда нет сообщений, чтобы предотвратить закрытие соединения некоторыми прокси, как рекомендовано в [Спецификация HTML: Server-Sent Events](https://html.spec.whatwg.org/multipage/server-sent-events.html#authoring-notes). - Устанавливать заголовок `Cache-Control: no-cache`, чтобы предотвратить кэширование потока. - Устанавливать специальный заголовок `X-Accel-Buffering: no`, чтобы предотвратить буферизацию в некоторых прокси, например Nginx. diff --git a/docs/ru/docs/tutorial/stream-json-lines.md b/docs/ru/docs/tutorial/stream-json-lines.md index d8bb9132b..a9390685e 100644 --- a/docs/ru/docs/tutorial/stream-json-lines.md +++ b/docs/ru/docs/tutorial/stream-json-lines.md @@ -2,7 +2,7 @@ У вас может быть последовательность данных, которую вы хотите отправлять в «**потоке**». Это можно сделать с помощью **JSON Lines**. -/// info | Информация +/// note | Примечание Добавлено в FastAPI 0.134.0. @@ -48,7 +48,7 @@ sequenceDiagram Это очень похоже на JSON-массив (эквивалент списка Python), но вместо того чтобы быть обернутым в `[]` и иметь `,` между элементами, здесь **один JSON-объект на строку**, они разделены символом новой строки. -/// info | Информация +/// note | Примечание Важный момент в том, что ваше приложение сможет по очереди производить каждую строку, пока клиент потребляет предыдущие строки. diff --git a/docs/ru/docs/tutorial/testing.md b/docs/ru/docs/tutorial/testing.md index aef7b86de..f7367bcba 100644 --- a/docs/ru/docs/tutorial/testing.md +++ b/docs/ru/docs/tutorial/testing.md @@ -8,7 +8,7 @@ ## Использование класса `TestClient` { #using-testclient } -/// info | Информация +/// note | Примечание Для использования класса `TestClient` сначала установите [`httpx`](https://www.python-httpx.org). @@ -144,7 +144,7 @@ $ pip install httpx Для получения дополнительной информации о передаче данных на бэкенд с помощью `httpx` или `TestClient` ознакомьтесь с [документацией HTTPX](https://www.python-httpx.org). -/// info | Информация +/// note | Примечание Обратите внимание, что `TestClient` принимает данные, которые можно конвертировать в JSON, но не модели Pydantic.