committed by
GitHub
1 changed files with 139 additions and 0 deletions
@ -0,0 +1,139 @@ |
|||||
|
# Зависимости в декораторах операции пути |
||||
|
|
||||
|
В некоторых случаях, возвращаемое значение зависимости не используется внутри *функции операции пути*. |
||||
|
|
||||
|
Или же зависимость не возвращает никакого значения. |
||||
|
|
||||
|
Но вам всё-таки нужно, чтобы она выполнилась. |
||||
|
|
||||
|
Для таких ситуаций, вместо объявления *функции операции пути* с параметром `Depends`, вы можете добавить список зависимостей `dependencies` в *декоратор операции пути*. |
||||
|
|
||||
|
## Добавление `dependencies` в *декоратор операции пути* |
||||
|
|
||||
|
*Декоратор операции пути* получает необязательный аргумент `dependencies`. |
||||
|
|
||||
|
Это должен быть `list` состоящий из `Depends()`: |
||||
|
|
||||
|
=== "Python 3.9+" |
||||
|
|
||||
|
```Python hl_lines="19" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an_py39.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8+" |
||||
|
|
||||
|
```Python hl_lines="18" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8 без Annotated" |
||||
|
|
||||
|
!!! Подсказка |
||||
|
Рекомендуется использовать версию с Annotated, если возможно. |
||||
|
|
||||
|
```Python hl_lines="17" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006.py!} |
||||
|
``` |
||||
|
|
||||
|
Зависимости из dependencies выполнятся так же, как и обычные зависимости. Но их значения (если они были) не будут переданы в *функцию операции пути*. |
||||
|
|
||||
|
!!! Подсказка |
||||
|
Некоторые редакторы кода определяют неиспользуемые параметры функций и подсвечивают их как ошибку. |
||||
|
|
||||
|
Использование `dependencies` в *декораторе операции пути* гарантирует выполнение зависимостей, избегая при этом предупреждений редактора кода и других инструментов. |
||||
|
|
||||
|
Это также должно помочь предотвратить путаницу у начинающих разработчиков, которые видят неиспользуемые параметры в коде и могут подумать что в них нет необходимости. |
||||
|
|
||||
|
!!! Дополнительная информация |
||||
|
В этом примере мы используем выдуманные пользовательские заголовки `X-Key` и `X-Token`. |
||||
|
|
||||
|
Но в реальных проектах, при внедрении системы безопасности, вы получите больше пользы используя интегрированные [средства защиты (следующая глава)](../security/index.md){.internal-link target=_blank}. |
||||
|
|
||||
|
## Исключения в dependencies и возвращаемые значения |
||||
|
|
||||
|
Вы можете использовать те же *функции* зависимостей, что и обычно. |
||||
|
|
||||
|
### Требования к зависимостям |
||||
|
|
||||
|
Они могут объявлять требования к запросу (например заголовки) или другие подзависимости: |
||||
|
|
||||
|
=== "Python 3.9+" |
||||
|
|
||||
|
```Python hl_lines="8 13" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an_py39.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8+" |
||||
|
|
||||
|
```Python hl_lines="7 12" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8 без Annotated" |
||||
|
|
||||
|
!!! Подсказка |
||||
|
Рекомендуется использовать версию с Annotated, если возможно. |
||||
|
|
||||
|
```Python hl_lines="6 11" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006.py!} |
||||
|
``` |
||||
|
|
||||
|
### Вызов исключений |
||||
|
|
||||
|
Зависимости из dependencies могут вызывать исключения с помощью `raise`, как и обычные зависимости: |
||||
|
|
||||
|
=== "Python 3.9+" |
||||
|
|
||||
|
```Python hl_lines="10 15" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an_py39.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8+" |
||||
|
|
||||
|
```Python hl_lines="9 14" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8 без Annotated" |
||||
|
|
||||
|
!!! Подсказка |
||||
|
Рекомендуется использовать версию с Annotated, если возможно. |
||||
|
|
||||
|
```Python hl_lines="8 13" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006.py!} |
||||
|
``` |
||||
|
|
||||
|
### Возвращаемые значения |
||||
|
|
||||
|
И они могут возвращать значения или нет, эти значения использоваться не будут. |
||||
|
|
||||
|
Таким образом, вы можете переиспользовать обычную зависимость (возвращающую значение), которую вы уже используете где-то в другом месте, и хотя значение не будет использоваться, зависимость будет выполнена: |
||||
|
|
||||
|
=== "Python 3.9+" |
||||
|
|
||||
|
```Python hl_lines="11 16" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an_py39.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8+" |
||||
|
|
||||
|
```Python hl_lines="10 15" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8 без Annotated" |
||||
|
|
||||
|
!!! Подсказка |
||||
|
Рекомендуется использовать версию с Annotated, если возможно. |
||||
|
|
||||
|
```Python hl_lines="9 14" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006.py!} |
||||
|
``` |
||||
|
|
||||
|
## Dependencies для группы *операций путей* |
||||
|
|
||||
|
Позже, читая о том как структурировать большие приложения ([Bigger Applications - Multiple Files](../../tutorial/bigger-applications.md){.internal-link target=_blank}), возможно, многофайловые, вы узнаете как объявить единый параметр `dependencies` для всей группы *операций путей*. |
||||
|
|
||||
|
## Глобальный Dependencies |
||||
|
|
||||
|
Далее мы увидим, как можно добавить dependencies для всего `FastAPI` приложения, так чтобы они применялись к каждой *операции пути*. |
Loading…
Reference in new issue