mirror of
https://github.com/fastapi/fastapi.git
synced 2026-05-11 09:08:49 -04:00
🌐 Sync Russian docs (#14331)
Update outdated\missing pages in Rus translations
This commit is contained in:
@@ -184,6 +184,51 @@ participant tasks as Background tasks
|
||||
|
||||
///
|
||||
|
||||
## Ранний выход и `scope` { #early-exit-and-scope }
|
||||
|
||||
Обычно «код выхода» зависимостей с `yield` выполняется **после того, как ответ** отправлен клиенту.
|
||||
|
||||
Но если вы знаете, что не будете использовать зависимость после возврата из *функции-обработчика пути*, вы можете использовать `Depends(scope="function")`, чтобы сообщить FastAPI, что он должен закрыть зависимость после возврата из *функции-обработчика пути*, но **до того**, как **ответ будет отправлен**.
|
||||
|
||||
{* ../../docs_src/dependencies/tutorial008e_an_py39.py hl[12,16] *}
|
||||
|
||||
`Depends()` принимает параметр `scope`, который может быть:
|
||||
|
||||
* `"function"`: начать зависимость до *функции-обработчика пути*, которая обрабатывает запрос, завершить зависимость после окончания *функции-обработчика пути*, но **до того**, как ответ будет отправлен обратно клиенту. То есть функция зависимости будет выполнена **вокруг** *функции-обработчика пути*.
|
||||
* `"request"`: начать зависимость до *функции-обработчика пути*, которая обрабатывает запрос (как и при использовании `"function"`), но завершить **после** того, как ответ будет отправлен обратно клиенту. То есть функция зависимости будет выполнена **вокруг** цикла запроса (**request**) и ответа.
|
||||
|
||||
Если не указано и в зависимости есть `yield`, по умолчанию будет `scope` со значением `"request"`.
|
||||
|
||||
### `scope` для подзависимостей { #scope-for-sub-dependencies }
|
||||
|
||||
Когда вы объявляете зависимость с `scope="request"` (значение по умолчанию), любая подзависимость также должна иметь `scope` равный `"request"`.
|
||||
|
||||
Но зависимость со `scope` равным `"function"` может иметь зависимости со `scope` `"function"` и со `scope` `"request"`.
|
||||
|
||||
Это потому, что любая зависимость должна иметь возможность выполнить свой код выхода раньше подзависимостей, так как ей может понадобиться использовать их во время своего кода выхода.
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
|
||||
participant client as Client
|
||||
participant dep_req as Зависимость scope="request"
|
||||
participant dep_func as Зависимость scope="function"
|
||||
participant operation as Функция-обработчик пути
|
||||
|
||||
client ->> dep_req: Запрос
|
||||
Note over dep_req: Выполнить код до yield
|
||||
dep_req ->> dep_func: Передать значение
|
||||
Note over dep_func: Выполнить код до yield
|
||||
dep_func ->> operation: Выполнить функцию-обработчик пути
|
||||
operation ->> dep_func: Выход из функции-обработчика пути
|
||||
Note over dep_func: Выполнить код после yield
|
||||
Note over dep_func: ✅ Зависимость закрыта
|
||||
dep_func ->> client: Отправить ответ клиенту
|
||||
Note over client: Ответ отправлен
|
||||
Note over dep_req: Выполнить код после yield
|
||||
Note over dep_req: ✅ Зависимость закрыта
|
||||
```
|
||||
|
||||
## Зависимости с `yield`, `HTTPException`, `except` и фоновыми задачами { #dependencies-with-yield-httpexception-except-and-background-tasks }
|
||||
|
||||
Зависимости с `yield` со временем эволюционировали, чтобы покрыть разные сценарии и исправить некоторые проблемы.
|
||||
|
||||
Reference in New Issue
Block a user