-
-
Notifications
You must be signed in to change notification settings - Fork 9.5k
🌐 Add Russian translation for docs/ru/docs/tutorial/dependencies/sub-dependencies.md
#10515
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
alejsdev
merged 6 commits into
fastapi:master
from
AlertRED:sub-dependencies-russian-translation
Jul 27, 2024
Merged
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
f7d8d0a
🌐 Add Russian translation for docs/ru/docs/tutorial/dependencies/sub-…
AlertRED 2abf130
Apply suggestions from code review
AlertRED 4d77dfd
Apply suggestions from code review
AlertRED fcd2d35
Apply suggestions from code review
AlertRED 7767a5e
Update docs/ru/docs/tutorial/dependencies/sub-dependencies.md
AlertRED 8885c97
Merge branch 'master' into sub-dependencies-russian-translation
alejsdev File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,194 @@ | ||
| # Подзависимости | ||
|
|
||
| Вы можете создавать зависимости, которые имеют **подзависимости**. | ||
|
|
||
| Их **вложенность** может быть любой глубины. | ||
|
|
||
| **FastAPI** сам займётся их управлением. | ||
|
|
||
| ## Провайдер зависимости | ||
|
|
||
| Можно создать первую зависимость следующим образом: | ||
|
|
||
| === "Python 3.10+" | ||
|
|
||
| ```Python hl_lines="8-9" | ||
| {!> ../../../docs_src/dependencies/tutorial005_an_py310.py!} | ||
| ``` | ||
|
|
||
| === "Python 3.9+" | ||
|
|
||
| ```Python hl_lines="8-9" | ||
| {!> ../../../docs_src/dependencies/tutorial005_an_py39.py!} | ||
| ``` | ||
|
|
||
| === "Python 3.6+" | ||
|
|
||
| ```Python hl_lines="9-10" | ||
| {!> ../../../docs_src/dependencies/tutorial005_an.py!} | ||
| ``` | ||
|
|
||
| === "Python 3.10 без Annotated" | ||
|
|
||
| !!! tip "Подсказка" | ||
| Предпочтительнее использовать версию с аннотацией, если это возможно. | ||
|
|
||
| ```Python hl_lines="6-7" | ||
| {!> ../../../docs_src/dependencies/tutorial005_py310.py!} | ||
| ``` | ||
|
|
||
| === "Python 3.6 без Annotated" | ||
|
|
||
| !!! tip "Подсказка" | ||
| Предпочтительнее использовать версию с аннотацией, если это возможно. | ||
|
|
||
| ```Python hl_lines="8-9" | ||
| {!> ../../../docs_src/dependencies/tutorial005.py!} | ||
| ``` | ||
|
|
||
| Она объявляет необязательный параметр запроса `q` как строку, а затем возвращает его. | ||
|
|
||
| Это довольно просто (хотя и не очень полезно), но поможет нам сосредоточиться на том, как работают подзависимости. | ||
|
|
||
| ## Вторая зависимость | ||
|
|
||
| Затем можно создать еще одну функцию зависимости, которая в то же время содержит внутри себя первую зависимость (таким образом, она тоже является "зависимой"): | ||
|
|
||
| === "Python 3.10+" | ||
|
|
||
| ```Python hl_lines="13" | ||
| {!> ../../../docs_src/dependencies/tutorial005_an_py310.py!} | ||
| ``` | ||
|
|
||
| === "Python 3.9+" | ||
|
|
||
| ```Python hl_lines="13" | ||
| {!> ../../../docs_src/dependencies/tutorial005_an_py39.py!} | ||
| ``` | ||
|
|
||
| === "Python 3.6+" | ||
|
|
||
| ```Python hl_lines="14" | ||
| {!> ../../../docs_src/dependencies/tutorial005_an.py!} | ||
| ``` | ||
|
|
||
| === "Python 3.10 без Annotated" | ||
|
|
||
| !!! tip "Подсказка" | ||
| Предпочтительнее использовать версию с аннотацией, если это возможно. | ||
|
|
||
| ```Python hl_lines="11" | ||
| {!> ../../../docs_src/dependencies/tutorial005_py310.py!} | ||
| ``` | ||
|
|
||
| === "Python 3.6 без Annotated" | ||
|
|
||
| !!! tip "Подсказка" | ||
| Предпочтительнее использовать версию с аннотацией, если это возможно. | ||
|
|
||
| ```Python hl_lines="13" | ||
| {!> ../../../docs_src/dependencies/tutorial005.py!} | ||
| ``` | ||
|
|
||
| Остановимся на объявленных параметрах: | ||
|
|
||
| * Несмотря на то, что эта функция сама является зависимостью, она также является зависимой от чего-то другого. | ||
| * Она зависит от `query_extractor` и присваивает возвращаемое ей значение параметру `q`. | ||
| * Она также объявляет необязательный куки-параметр `last_query` в виде строки. | ||
| * Если пользователь не указал параметр `q` в запросе, то мы используем последний использованный запрос, который мы ранее сохранили в куки-параметре `last_query`. | ||
|
|
||
| ## Использование зависимости | ||
|
|
||
| Затем мы можем использовать зависимость вместе с: | ||
|
|
||
| === "Python 3.10+" | ||
|
|
||
| ```Python hl_lines="23" | ||
| {!> ../../../docs_src/dependencies/tutorial005_an_py310.py!} | ||
| ``` | ||
|
|
||
| === "Python 3.9+" | ||
|
|
||
| ```Python hl_lines="23" | ||
| {!> ../../../docs_src/dependencies/tutorial005_an_py39.py!} | ||
| ``` | ||
|
|
||
| === "Python 3.6+" | ||
|
|
||
| ```Python hl_lines="24" | ||
| {!> ../../../docs_src/dependencies/tutorial005_an.py!} | ||
| ``` | ||
|
|
||
| === "Python 3.10 без Annotated" | ||
|
|
||
| !!! tip "Подсказка" | ||
| Предпочтительнее использовать версию с аннотацией, если это возможно. | ||
|
|
||
| ```Python hl_lines="19" | ||
| {!> ../../../docs_src/dependencies/tutorial005_py310.py!} | ||
| ``` | ||
|
|
||
| === "Python 3.6 без Annotated" | ||
|
|
||
| !!! tip "Подсказка" | ||
| Предпочтительнее использовать версию с аннотацией, если это возможно. | ||
|
|
||
| ```Python hl_lines="22" | ||
| {!> ../../../docs_src/dependencies/tutorial005.py!} | ||
| ``` | ||
|
|
||
| !!! info "Дополнительная информация" | ||
| Обратите внимание, что мы объявляем только одну зависимость в *функции операции пути* - `query_or_cookie_extractor`. | ||
|
|
||
| Но **FastAPI** будет знать, что сначала он должен выполнить `query_extractor`, чтобы передать результаты этого в `query_or_cookie_extractor` при его вызове. | ||
|
|
||
| ```mermaid | ||
| graph TB | ||
|
|
||
| query_extractor(["query_extractor"]) | ||
| query_or_cookie_extractor(["query_or_cookie_extractor"]) | ||
|
|
||
| read_query["/items/"] | ||
|
|
||
| query_extractor --> query_or_cookie_extractor --> read_query | ||
| ``` | ||
|
|
||
| ## Использование одной и той же зависимости несколько раз | ||
|
|
||
| Если одна из ваших зависимостей объявлена несколько раз для одной и той же *функции операции пути*, например, несколько зависимостей имеют общую подзависимость, **FastAPI** будет знать, что вызывать эту подзависимость нужно только один раз за запрос. | ||
|
|
||
| При этом возвращаемое значение будет сохранено в <abbr title="Система для хранения значений, сгенерированных компьютером, для их повторного использования вместо повторного вычисления.">"кэш"</abbr> и будет передано всем "зависимым" функциям, которые нуждаются в нем внутри этого конкретного запроса, вместо того, чтобы вызывать зависимость несколько раз для одного и того же запроса. | ||
|
|
||
| В расширенном сценарии, когда вы знаете, что вам нужно, чтобы зависимость вызывалась на каждом шаге (возможно, несколько раз) в одном и том же запросе, вместо использования "кэшированного" значения, вы можете установить параметр `use_cache=False` при использовании `Depends`: | ||
|
|
||
| === "Python 3.6+" | ||
|
|
||
| ```Python hl_lines="1" | ||
| async def needy_dependency(fresh_value: Annotated[str, Depends(get_value, use_cache=False)]): | ||
| return {"fresh_value": fresh_value} | ||
| ``` | ||
|
|
||
| === "Python 3.6+ без Annotated" | ||
|
|
||
| !!! tip "Подсказка" | ||
| Предпочтительнее использовать версию с аннотацией, если это возможно. | ||
|
|
||
| ```Python hl_lines="1" | ||
| async def needy_dependency(fresh_value: str = Depends(get_value, use_cache=False)): | ||
| return {"fresh_value": fresh_value} | ||
| ``` | ||
|
|
||
| ## Резюме | ||
|
|
||
| Помимо всех этих умных слов, используемых здесь, система внедрения зависимостей довольно проста. | ||
|
|
||
| Это просто функции, которые выглядят так же, как *функции операций путей*. | ||
|
|
||
| Но, тем не менее, эта система очень мощная и позволяет вам объявлять вложенные графы (деревья) зависимостей сколь угодно глубоко. | ||
|
|
||
| !!! tip "Подсказка" | ||
| Все это может показаться не столь полезным на этих простых примерах. | ||
|
|
||
| Но вы увидите как это пригодится в главах посвященных безопасности. | ||
|
|
||
| И вы также увидите, сколько кода это вам сэкономит. | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.