Browse Source
Co-authored-by: Valentyn Druzhynin <[email protected]> Co-authored-by: Alejandra <[email protected]> Co-authored-by: Sofie Van Landeghem <[email protected]>pull/13432/head
committed by
GitHub
1 changed files with 192 additions and 0 deletions
@ -0,0 +1,192 @@ |
|||||
|
# Query Параметри |
||||
|
|
||||
|
Коли Ви оголошуєте інші параметри функції, які не є частиною параметрів шляху, вони автоматично інтерпретуються як "query" параметри. |
||||
|
|
||||
|
{* ../../docs_src/query_params/tutorial001.py hl[9] *} |
||||
|
|
||||
|
Query параметри — це набір пар ключ-значення, що йдуть після символу `?` в URL, розділені символами `&`. |
||||
|
|
||||
|
Наприклад, в URL: |
||||
|
|
||||
|
``` |
||||
|
http://127.0.0.1:8000/items/?skip=0&limit=10 |
||||
|
``` |
||||
|
|
||||
|
...query параметрами є: |
||||
|
|
||||
|
* `skip`: зі значенням `0` |
||||
|
* `limit`: зі значенням `10` |
||||
|
|
||||
|
Оскільки вони є частиною URL, вони "за замовчуванням" є рядками. |
||||
|
|
||||
|
Але коли Ви оголошуєте їх із типами Python (у наведеному прикладі як `int`), вони перетворюються на цей тип і проходять перевірку відповідності. |
||||
|
|
||||
|
Увесь той самий процес, який застосовується до параметрів шляху, також застосовується до query параметрів: |
||||
|
|
||||
|
* Підтримка в редакторі (автодоповнення, перевірка помилок) |
||||
|
* <abbr title="перетворення рядка, що надходить з HTTP-запиту, у типи даних Python">"Парсинг"</abbr> даних |
||||
|
* Валідація даних |
||||
|
* Автоматична документація |
||||
|
|
||||
|
|
||||
|
## Значення за замовчуванням |
||||
|
|
||||
|
Оскільки query параметри не є фіксованою частиною шляху, вони можуть бути необов’язковими та мати значення за замовчуванням. |
||||
|
|
||||
|
У наведеному вище прикладі вони мають значення за замовчуванням: `skip=0` і `limit=10`. |
||||
|
|
||||
|
Отже, результат переходу за URL: |
||||
|
|
||||
|
``` |
||||
|
http://127.0.0.1:8000/items/ |
||||
|
``` |
||||
|
буде таким самим, як і перехід за посиланням: |
||||
|
|
||||
|
``` |
||||
|
http://127.0.0.1:8000/items/?skip=0&limit=10 |
||||
|
``` |
||||
|
|
||||
|
Але якщо Ви перейдете, наприклад, за посиланням: |
||||
|
|
||||
|
``` |
||||
|
http://127.0.0.1:8000/items/?skip=20 |
||||
|
``` |
||||
|
|
||||
|
Значення параметрів у вашій функції будуть такими: |
||||
|
|
||||
|
* `skip=20`: оскільки Ви вказали його в URL |
||||
|
* `limit=10`: оскільки це значення за замовчуванням |
||||
|
|
||||
|
## Необов'язкові параметри |
||||
|
|
||||
|
Аналогічно, Ви можете оголосити необов’язкові query параметри, встановивши для них значення за замовчуванням `None`: |
||||
|
|
||||
|
{* ../../docs_src/query_params/tutorial002_py310.py hl[7] *} |
||||
|
|
||||
|
У цьому випадку параметр функції `q` буде необов’язковим і за замовчуванням матиме значення `None`. |
||||
|
|
||||
|
/// check | Примітка |
||||
|
|
||||
|
Також зверніть увагу, що **FastAPI** достатньо розумний, щоб визначити, що параметр шляху `item_id` є параметром шляху, а `q` — ні, отже, це query параметр. |
||||
|
|
||||
|
/// |
||||
|
|
||||
|
## Перетворення типу Query параметра |
||||
|
|
||||
|
Ви також можете оголошувати параметри типу `bool`, і вони будуть автоматично конвертовані: |
||||
|
|
||||
|
{* ../../docs_src/query_params/tutorial003_py310.py hl[7] *} |
||||
|
|
||||
|
У цьому випадку, якщо Ви звернетесь до: |
||||
|
|
||||
|
|
||||
|
``` |
||||
|
http://127.0.0.1:8000/items/foo?short=1 |
||||
|
``` |
||||
|
|
||||
|
або |
||||
|
|
||||
|
``` |
||||
|
http://127.0.0.1:8000/items/foo?short=True |
||||
|
``` |
||||
|
|
||||
|
або |
||||
|
|
||||
|
``` |
||||
|
http://127.0.0.1:8000/items/foo?short=true |
||||
|
``` |
||||
|
|
||||
|
або |
||||
|
|
||||
|
``` |
||||
|
http://127.0.0.1:8000/items/foo?short=on |
||||
|
``` |
||||
|
|
||||
|
або |
||||
|
|
||||
|
``` |
||||
|
http://127.0.0.1:8000/items/foo?short=yes |
||||
|
``` |
||||
|
|
||||
|
або будь-який інший варіант написання (великі літери, перша літера велика тощо), ваша функція побачить параметр `short` зі значенням `True` з типом даних `bool`. В іншому випадку – `False`. |
||||
|
|
||||
|
## Кілька path і query параметрів |
||||
|
|
||||
|
Ви можете одночасно оголошувати кілька path і query параметрів, і **FastAPI** автоматично визначить, який з них до чого належить. |
||||
|
|
||||
|
|
||||
|
Не потрібно дотримуватись певного порядку їх оголошення. |
||||
|
|
||||
|
Вони визначаються за назвою: |
||||
|
|
||||
|
{* ../../docs_src/query_params/tutorial004_py310.py hl[6,8] *} |
||||
|
|
||||
|
## Обов’язкові Query параметри |
||||
|
|
||||
|
Якщо Ви оголошуєте значення за замовчуванням для параметрів, які не є path-параметрами (у цьому розділі ми бачили поки що лише path параметри), тоді вони стають необов’язковими. |
||||
|
|
||||
|
Якщо Ви не хочете вказувати конкретні значення, але хочете зробити параметр опціональним, задайте `None` як значення за замовчуванням. |
||||
|
|
||||
|
Але якщо Ви хочете зробити query параметр обов’язковим, просто не вказуйте для нього значення за замовчуванням: |
||||
|
|
||||
|
{* ../../docs_src/query_params/tutorial005.py hl[6:7] *} |
||||
|
|
||||
|
Тут `needy` – обов’язковий query параметр типу `str`. |
||||
|
|
||||
|
Якщо Ви відкриєте у браузері URL-адресу: |
||||
|
|
||||
|
``` |
||||
|
http://127.0.0.1:8000/items/foo-item |
||||
|
``` |
||||
|
|
||||
|
...без додавання обов’язкового параметра `needy`, Ви побачите помилку: |
||||
|
|
||||
|
```JSON |
||||
|
{ |
||||
|
"detail": [ |
||||
|
{ |
||||
|
"type": "missing", |
||||
|
"loc": [ |
||||
|
"query", |
||||
|
"needy" |
||||
|
], |
||||
|
"msg": "Field required", |
||||
|
"input": null, |
||||
|
"url": "https://errors.pydantic.dev/2.1/v/missing" |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
Оскільки `needy` є обов’язковим параметром, вам потрібно вказати його в URL: |
||||
|
|
||||
|
``` |
||||
|
http://127.0.0.1:8000/items/foo-item?needy=sooooneedy |
||||
|
``` |
||||
|
|
||||
|
...цей запит поверне: |
||||
|
|
||||
|
```JSON |
||||
|
{ |
||||
|
"item_id": "foo-item", |
||||
|
"needy": "sooooneedy" |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
|
||||
|
Звичайно, Ви можете визначити деякі параметри як обов’язкові, інші зі значенням за замовчуванням, а ще деякі — повністю опціональні: |
||||
|
|
||||
|
{* ../../docs_src/query_params/tutorial006_py310.py hl[8] *} |
||||
|
|
||||
|
У цьому випадку є 3 query параметри: |
||||
|
|
||||
|
* `needy`, обов’язковий `str`. |
||||
|
* `skip`, `int` зі значенням за замовчуванням `0`. |
||||
|
* `limit`, опціональний `int`. |
||||
|
|
||||
|
|
||||
|
/// tip | Підказка |
||||
|
|
||||
|
Ви також можете використовувати `Enum`-и, так само як і з [Path Parameters](path-params.md#predefined-values){.internal-link target=_blank}. |
||||
|
|
||||
|
/// |
Loading…
Reference in new issue