🌐 Update translations for ru (update-outdated) (#15758)

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com>
This commit is contained in:
Sebastián Ramírez
2026-06-15 20:36:31 +02:00
committed by GitHub
parent 1b284435ee
commit 864c29f075
54 changed files with 147 additions and 160 deletions

View File

@@ -34,7 +34,7 @@
///
/// info | Информация
/// note | Примечание
Ключ `model` не является частью OpenAPI.
@@ -183,7 +183,7 @@
///
/// info | Информация
/// note | Примечание
Если вы явно не укажете другой тип содержимого в параметре `responses`, FastAPI будет считать, что ответ имеет тот же тип содержимого, что и основной класс ответа (по умолчанию `application/json`).

View File

@@ -98,7 +98,7 @@ checker(q="somequery")
В версии 0.118.0 это поведение было возвращено к тому, что код после `yield` выполняется после отправки ответа.
/// info | Информация
/// note | Примечание
Как вы увидите ниже, это очень похоже на поведение до версии 0.106.0, но с несколькими улучшениями и исправлениями краевых случаев.

View File

@@ -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`, который вы вернули.

View File

@@ -18,7 +18,7 @@ FastAPI построен поверх **Pydantic**, и я показывал в
Это работает так же, как с Pydantic-моделями. И на самом деле под капотом это достигается тем же образом, с использованием Pydantic.
/// info | Информация
/// note | Примечание
Помните, что dataclasses не умеют всего того, что умеют Pydantic-модели.

View File

@@ -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/).

View File

@@ -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
///
Вы получите ошибки прямо в редакторе для отправляемых данных:
Вы получите ошибки прямо в редакторе кода для отправляемых данных:
<img src="/img/tutorial/generate-clients/image04.png">
@@ -186,7 +185,7 @@ FastAPI использует **уникальный ID** для каждой *о
npx @hey-api/openapi-ts -i ./openapi.json -o src/client
```
После генерации нового клиента у вас будут **чистые имена методов**, со всем **автозавершением**, **ошибками прямо в редакторе** и т.д.:
После генерации нового клиента у вас будут **чистые имена методов**, со всем **автозавершением**, **ошибками прямо в редакторе кода** и т.д.:
<img src="/img/tutorial/generate-clients/image08.png">
@@ -198,7 +197,7 @@ npx @hey-api/openapi-ts -i ./openapi.json -o src/client
* Данных запроса — в теле запроса, queryпараметрах и т.д.
* Данных ответа.
У вас также будут **ошибки прямо в редакторе** для всего.
У вас также будут **ошибки прямо в редакторе кода** для всего.
И каждый раз, когда вы обновляете код бэкенда и **перегенерируете** фронтенд, в нём появятся новые *операции пути* как методы, старые будут удалены, а любые другие изменения отразятся в сгенерированном коде. 🤓

View File

@@ -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 для обратных вызовов.
///

View File

@@ -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`, тот же тип, который вы используете при структурировании приложения по нескольким файлам.

View File

@@ -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 | Предупреждение

View File

@@ -18,7 +18,7 @@
Вы можете возвращать `Response` или любой его подкласс.
/// info | Информация
/// note | Примечание
`JSONResponse` сам по себе является подклассом `Response`.

View File

@@ -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` и имеет всего один дополнительный параметр, который мы рассмотрим позже.

View File

@@ -4,7 +4,7 @@
Но если вы хотите передавать в потоке чистые бинарные данные или строки, ниже показано, как это сделать.
/// info | Информация
/// note | Примечание
Добавлено в FastAPI 0.134.0.
@@ -90,7 +90,7 @@ FastAPI будет передавать каждый чанк данных в `S
И во многих случаях чтение таких объектов будет блокирующей операцией (которая может заблокировать цикл событий), потому что данные читаются с диска или из сети.
/// info | Информация
/// note | Примечание
Приведённый выше пример — исключение, потому что объект `io.BytesIO` уже находится в памяти, поэтому чтение ничего не блокирует.

View File

@@ -81,7 +81,7 @@ http://localhost:8000/v1/agents/multivac
С этой настройкой запросы без заголовка `Content-Type` будут иметь тело запроса, обработанное как JSON — это такое же поведение, как в более старых версиях FastAPI.
/// info | Информация
/// note | Примечание
Это поведение и настройка были добавлены в FastAPI 0.132.0.

View File

@@ -111,7 +111,7 @@ $ fastapi dev
{* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *}
/// info | Примечание
/// note | Примечание
В веб-сокете вызывать `HTTPException` не имеет смысла. Вместо этого нужно использовать `WebSocketException`.

View File

@@ -6,7 +6,7 @@
## Использование `WSGIMiddleware` { #using-wsgimiddleware }
/// info | Информация
/// note | Примечание
Для этого требуется установить `a2wsgi`, например с помощью `pip install a2wsgi`.

View File

@@ -132,7 +132,7 @@ Successfully installed fastapi pydantic
</div>
/// 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/).

View File

@@ -1,26 +1,6 @@
# FastAPI Cloud { #fastapi-cloud }
Вы можете развернуть своё приложение FastAPI в [FastAPI Cloud](https://fastapicloud.com) одной командой, присоединяйтесь к списку ожидания, если ещё не сделали этого. 🚀
## Вход { #login }
Убедитесь, что у вас уже есть аккаунт **FastAPI Cloud** (мы пригласили вас из списка ожидания 😉).
Затем выполните вход:
<div class="termy">
```console
$ fastapi login
You are logged in to FastAPI Cloud 🚀
```
</div>
## Деплой { #deploy }
Теперь разверните приложение одной командой:
Вы можете развернуть своё приложение FastAPI в [FastAPI Cloud](https://fastapicloud.com) всего **одной командой**. 🚀
<div class="termy">
@@ -36,6 +16,8 @@ Deploying to FastAPI Cloud...
</div>
CLI автоматически определит ваше приложение FastAPI и развернёт его в облаке. Если вы не вошли в аккаунт, откроется браузер для завершения процесса аутентификации.
Вот и всё! Теперь вы можете открыть своё приложение по этому URL. ✨
## О FastAPI Cloud { #about-fastapi-cloud }

View File

@@ -46,7 +46,7 @@ $ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid
Давайте немного углубимся в детали.
FastAPI использует стандарт для построения Pythonвебфреймворков и серверов под названием <abbr title="Asynchronous Server Gateway Interface Асинхронный шлюзовый интерфейс сервера">ASGI</abbr>. FastAPI — ASGI-веб‑фреймворк.
FastAPI использует стандарт для построения Pythonвебфреймворков и серверов под названием <abbr title="Asynchronous Server Gateway Interface - Асинхронный шлюзовый интерфейс сервера">ASGI</abbr>. 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 }

View File

@@ -17,7 +17,7 @@
Здесь я покажу, как использовать **Uvicorn** с **воркер-процессами** через команду `fastapi` или напрямую через команду `uvicorn`.
/// info | Информация
/// note | Примечание
Если вы используете контейнеры, например Docker или Kubernetes, я расскажу об этом подробнее в следующей главе: [FastAPI в контейнерах — Docker](docker.md).

View File

@@ -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 и выше.
///

View File

@@ -85,7 +85,7 @@
В таком случае вы можете отключить эту функциональность в **FastAPI** с помощью параметра `separate_input_output_schemas=False`.
/// info | Информация
/// note | Примечание
Поддержка `separate_input_output_schemas` появилась в FastAPI `0.102.0`. 🤓

View File

@@ -492,9 +492,7 @@ item: Item
### Разверните приложение (опционально) { #deploy-your-app-optional }
При желании вы можете развернуть своё приложение FastAPI в [FastAPI Cloud](https://fastapicloud.com), присоединяйтесь к списку ожидания, если ещё не сделали этого. 🚀
Если у вас уже есть аккаунт **FastAPI Cloud** (мы пригласили вас из списка ожидания 😉), вы можете развернуть ваше приложение одной командой.
При желании вы можете развернуть своё приложение FastAPI в [FastAPI Cloud](https://fastapicloud.com) одной командой. 🚀
<div class="termy">
@@ -510,6 +508,8 @@ Deploying to FastAPI Cloud...
</div>
CLI автоматически определит ваше приложение FastAPI и развернёт его в облаке. Если вы не вошли в систему, откроется браузер для завершения процесса аутентификации.
Вот и всё! Теперь вы можете открыть ваше приложение по этой ссылке. ✨
#### О FastAPI Cloud { #about-fastapi-cloud }

View File

@@ -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` низкоуровневым деревом маршрутов, которое может содержать определения маршрутов и включённые маршрутизаторы, и избегайте воспринимать его как плоский список итоговых операций пути.
///

View File

@@ -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)]
```
так же, как в этом примере:

View File

@@ -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`

View File

@@ -8,7 +8,7 @@
Чтобы объявить тело **запроса**, используйте модели [Pydantic](https://docs.pydantic.dev/), со всей их мощью и преимуществами.
/// info | Информация
/// note | Заметка
Чтобы отправить данные, используйте один из методов: `POST` (чаще всего), `PUT`, `DELETE` или `PATCH`.

View File

@@ -32,7 +32,7 @@
<img src="/img/tutorial/cookie-param-models/image01.png">
</div>
/// info | Дополнительная информация
/// note | Заметка
Имейте в виду, что, поскольку **браузеры обрабатывают cookies** особым образом и под капотом, они **не** позволят **JavaScript** легко получить доступ к ним.

View File

@@ -24,13 +24,13 @@
///
/// info | Дополнительная информация
/// note | Примечание
Для объявления cookies, вам нужно использовать `Cookie`, иначе параметры будут интерпретированы как параметры запроса.
///
/// info | Дополнительная информация
/// note | Примечание
Имейте в виду, что, поскольку **браузеры обрабатывают cookies** особым образом и «за кулисами», они **не** позволяют **JavaScript** просто так получать к ним доступ.

View File

@@ -72,7 +72,7 @@ from myapp import app
не будет выполнена.
/// info | Информация
/// note | Примечание
Для получения дополнительной информации, ознакомьтесь с [официальной документацией Python](https://docs.python.org/3/library/__main__.html).

View File

@@ -28,7 +28,7 @@
///
/// info | Примечание
/// note | Примечание
В этом примере мы используем выдуманные пользовательские HTTP-заголовки `X-Key` и `X-Token`.

View File

@@ -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: ✅ Зависимость закрыта

View File

@@ -51,7 +51,7 @@
А затем просто возвращает `dict`, содержащий эти значения.
/// info | Информация
/// note | Примечание
FastAPI добавил поддержку `Annotated` (и начал рекомендовать его использование) в версии 0.95.0.
@@ -106,7 +106,7 @@ common_parameters --> read_users
Таким образом, вы пишете общий код один раз, а **FastAPI** позаботится о его вызове для ваших *операций пути*.
/// check | Проверка
/// tip | Подсказка
Обратите внимание, что вам не нужно создавать специальный класс и передавать его куда-то в **FastAPI**, чтобы «зарегистрировать» его или что-то подобное.

View File

@@ -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`.

View File

@@ -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** (мы пригласили вас из списка ожидания 😉), вы можете развернуть приложение одной командой.
Перед развертыванием убедитесь, что вы вошли в систему:
<div class="termy">
```console
$ fastapi login
You are logged in to FastAPI Cloud 🚀
```
</div>
Затем разверните приложение:
При желании вы можете развернуть своё приложение FastAPI в [FastAPI Cloud](https://fastapicloud.com) одной командой. 🚀
<div class="termy">
@@ -226,6 +216,8 @@ Deploying to FastAPI Cloud...
</div>
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
* по пути `/`
* с использованием <dfn title="метод HTTP GET"><code>get</code> операции</dfn>
/// info | Информация о `@decorator`
/// note | Информация о `@decorator`
Синтаксис `@something` в Python называется «декоратор».

View File

@@ -74,7 +74,7 @@
{* ../../docs_src/metadata/tutorial004_py310.py hl[21,26] *}
/// info | Дополнительная информация
/// note | Примечание
Узнайте больше о тегах в [Конфигурации операции пути](path-operation-configuration.md#tags).

View File

@@ -72,13 +72,13 @@
{* ../../docs_src/path_operation_configuration/tutorial005_py310.py hl[18] *}
/// info | Дополнительная информация
/// note | Примечание
Помните, что `response_description` относится конкретно к ответу, а `description` относится к *операции пути* в целом.
///
/// check | Проверка
/// tip | Совет
OpenAPI указывает, что каждой *операции пути* необходимо описание ответа.

View File

@@ -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`.

View File

@@ -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 @@
<img src="/img/tutorial/path-params/image01.png">
/// check | Заметка
/// tip | Подсказка
Ещё раз, просто используя определения типов, **FastAPI** обеспечивает автоматическую интерактивную документацию (с интеграцией Swagger UI).

View File

@@ -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 и выше. 😎

View File

@@ -65,7 +65,7 @@ http://127.0.0.1:8000/items/?skip=20
В этом случае, параметр `q` будет не обязательным и будет иметь значение `None` по умолчанию.
/// check | Важно
/// tip | Подсказка
Также обратите внимание, что **FastAPI** достаточно умён чтобы заметить, что параметр `item_id` является path-параметром, а `q` нет, поэтому, это параметр запроса.

View File

@@ -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`.

View File

@@ -2,7 +2,7 @@
Вы можете использовать **Pydantic-модели** для объявления **полей формы** в FastAPI.
/// info | Дополнительная информация
/// note | Заметка
Чтобы использовать формы, сначала установите [`python-multipart`](https://github.com/Kludex/python-multipart).

View File

@@ -2,7 +2,7 @@
Вы можете определять файлы и поля формы одновременно, используя `File` и `Form`.
/// info | Информация
/// note | Примечание
Чтобы получать загруженные файлы и/или данные форм, сначала установите [`python-multipart`](https://github.com/Kludex/python-multipart).

View File

@@ -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`.

View File

@@ -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 | Примечание
Вы также можете использовать:

View File

@@ -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.

View File

@@ -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 🎉).

View File

@@ -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
<img src="/img/tutorial/security/image01.png">
/// 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`).

View File

@@ -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 }
Этот пример может показаться многословным. Имейте в виду, что в одном файле мы смешиваем безопасность, модели данных, служебные функции и *операции пути*.
Этот пример может показаться многословным. Имейте в виду, что в одном файле мы смешиваем безопасность, модели данных, вспомогательные функции и *операции пути*.
Но вот ключевой момент.

View File

@@ -42,7 +42,7 @@ $ pip install pyjwt
</div>
/// info | Дополнительная информация
/// note | Дополнительная информация
Если вы планируете использовать алгоритмы цифровой подписи, такие как RSA или ECDSA, вам следует установить зависимость библиотеки криптографии `pyjwt[crypto]`.
@@ -213,7 +213,7 @@ JWT может использоваться и для других целей,
Username: `johndoe`
Password: `secret`
/// check | Проверка
/// tip | Подсказка
Обратите внимание, что нигде в коде не используется открытый текст пароля "`secret`", мы используем только его хэшированную версию.

View File

@@ -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`.

View File

@@ -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.

View File

@@ -2,7 +2,7 @@
У вас может быть последовательность данных, которую вы хотите отправлять в «**потоке**». Это можно сделать с помощью **JSON Lines**.
/// info | Информация
/// note | Примечание
Добавлено в FastAPI 0.134.0.
@@ -48,7 +48,7 @@ sequenceDiagram
Это очень похоже на JSON-массив (эквивалент списка Python), но вместо того чтобы быть обернутым в `[]` и иметь `,` между элементами, здесь **один JSON-объект на строку**, они разделены символом новой строки.
/// info | Информация
/// note | Примечание
Важный момент в том, что ваше приложение сможет по очереди производить каждую строку, пока клиент потребляет предыдущие строки.

View File

@@ -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.