|
| 1 | +# Query Параметри |
| 2 | + |
| 3 | +Коли Ви оголошуєте інші параметри функції, які не є частиною параметрів шляху, вони автоматично інтерпретуються як "query" параметри. |
| 4 | + |
| 5 | +{* ../../docs_src/query_params/tutorial001.py hl[9] *} |
| 6 | + |
| 7 | +Query параметри — це набір пар ключ-значення, що йдуть після символу `?` в URL, розділені символами `&`. |
| 8 | + |
| 9 | +Наприклад, в URL: |
| 10 | + |
| 11 | +``` |
| 12 | +http://127.0.0.1:8000/items/?skip=0&limit=10 |
| 13 | +``` |
| 14 | + |
| 15 | +...query параметрами є: |
| 16 | + |
| 17 | +* `skip`: зі значенням `0` |
| 18 | +* `limit`: зі значенням `10` |
| 19 | + |
| 20 | +Оскільки вони є частиною URL, вони "за замовчуванням" є рядками. |
| 21 | + |
| 22 | +Але коли Ви оголошуєте їх із типами Python (у наведеному прикладі як `int`), вони перетворюються на цей тип і проходять перевірку відповідності. |
| 23 | + |
| 24 | +Увесь той самий процес, який застосовується до параметрів шляху, також застосовується до query параметрів: |
| 25 | + |
| 26 | +* Підтримка в редакторі (автодоповнення, перевірка помилок) |
| 27 | +* <abbr title="перетворення рядка, що надходить з HTTP-запиту, у типи даних Python">"Парсинг"</abbr> даних |
| 28 | +* Валідація даних |
| 29 | +* Автоматична документація |
| 30 | + |
| 31 | + |
| 32 | +## Значення за замовчуванням |
| 33 | + |
| 34 | +Оскільки query параметри не є фіксованою частиною шляху, вони можуть бути необов’язковими та мати значення за замовчуванням. |
| 35 | + |
| 36 | +У наведеному вище прикладі вони мають значення за замовчуванням: `skip=0` і `limit=10`. |
| 37 | + |
| 38 | +Отже, результат переходу за URL: |
| 39 | + |
| 40 | +``` |
| 41 | +http://127.0.0.1:8000/items/ |
| 42 | +``` |
| 43 | +буде таким самим, як і перехід за посиланням: |
| 44 | + |
| 45 | +``` |
| 46 | +http://127.0.0.1:8000/items/?skip=0&limit=10 |
| 47 | +``` |
| 48 | + |
| 49 | +Але якщо Ви перейдете, наприклад, за посиланням: |
| 50 | + |
| 51 | +``` |
| 52 | +http://127.0.0.1:8000/items/?skip=20 |
| 53 | +``` |
| 54 | + |
| 55 | +Значення параметрів у вашій функції будуть такими: |
| 56 | + |
| 57 | +* `skip=20`: оскільки Ви вказали його в URL |
| 58 | +* `limit=10`: оскільки це значення за замовчуванням |
| 59 | + |
| 60 | +## Необов'язкові параметри |
| 61 | + |
| 62 | +Аналогічно, Ви можете оголосити необов’язкові query параметри, встановивши для них значення за замовчуванням `None`: |
| 63 | + |
| 64 | +{* ../../docs_src/query_params/tutorial002_py310.py hl[7] *} |
| 65 | + |
| 66 | +У цьому випадку параметр функції `q` буде необов’язковим і за замовчуванням матиме значення `None`. |
| 67 | + |
| 68 | +/// check | Примітка |
| 69 | + |
| 70 | +Також зверніть увагу, що **FastAPI** достатньо розумний, щоб визначити, що параметр шляху `item_id` є параметром шляху, а `q` — ні, отже, це query параметр. |
| 71 | + |
| 72 | +/// |
| 73 | + |
| 74 | +## Перетворення типу Query параметра |
| 75 | + |
| 76 | +Ви також можете оголошувати параметри типу `bool`, і вони будуть автоматично конвертовані: |
| 77 | + |
| 78 | +{* ../../docs_src/query_params/tutorial003_py310.py hl[7] *} |
| 79 | + |
| 80 | +У цьому випадку, якщо Ви звернетесь до: |
| 81 | + |
| 82 | + |
| 83 | +``` |
| 84 | +http://127.0.0.1:8000/items/foo?short=1 |
| 85 | +``` |
| 86 | + |
| 87 | +або |
| 88 | + |
| 89 | +``` |
| 90 | +http://127.0.0.1:8000/items/foo?short=True |
| 91 | +``` |
| 92 | + |
| 93 | +або |
| 94 | + |
| 95 | +``` |
| 96 | +http://127.0.0.1:8000/items/foo?short=true |
| 97 | +``` |
| 98 | + |
| 99 | +або |
| 100 | + |
| 101 | +``` |
| 102 | +http://127.0.0.1:8000/items/foo?short=on |
| 103 | +``` |
| 104 | + |
| 105 | +або |
| 106 | + |
| 107 | +``` |
| 108 | +http://127.0.0.1:8000/items/foo?short=yes |
| 109 | +``` |
| 110 | + |
| 111 | +або будь-який інший варіант написання (великі літери, перша літера велика тощо), ваша функція побачить параметр `short` зі значенням `True` з типом даних `bool`. В іншому випадку – `False`. |
| 112 | + |
| 113 | +## Кілька path і query параметрів |
| 114 | + |
| 115 | +Ви можете одночасно оголошувати кілька path і query параметрів, і **FastAPI** автоматично визначить, який з них до чого належить. |
| 116 | + |
| 117 | + |
| 118 | +Не потрібно дотримуватись певного порядку їх оголошення. |
| 119 | + |
| 120 | +Вони визначаються за назвою: |
| 121 | + |
| 122 | +{* ../../docs_src/query_params/tutorial004_py310.py hl[6,8] *} |
| 123 | + |
| 124 | +## Обов’язкові Query параметри |
| 125 | + |
| 126 | +Якщо Ви оголошуєте значення за замовчуванням для параметрів, які не є path-параметрами (у цьому розділі ми бачили поки що лише path параметри), тоді вони стають необов’язковими. |
| 127 | + |
| 128 | +Якщо Ви не хочете вказувати конкретні значення, але хочете зробити параметр опціональним, задайте `None` як значення за замовчуванням. |
| 129 | + |
| 130 | +Але якщо Ви хочете зробити query параметр обов’язковим, просто не вказуйте для нього значення за замовчуванням: |
| 131 | + |
| 132 | +{* ../../docs_src/query_params/tutorial005.py hl[6:7] *} |
| 133 | + |
| 134 | +Тут `needy` – обов’язковий query параметр типу `str`. |
| 135 | + |
| 136 | +Якщо Ви відкриєте у браузері URL-адресу: |
| 137 | + |
| 138 | +``` |
| 139 | +http://127.0.0.1:8000/items/foo-item |
| 140 | +``` |
| 141 | + |
| 142 | +...без додавання обов’язкового параметра `needy`, Ви побачите помилку: |
| 143 | + |
| 144 | +```JSON |
| 145 | +{ |
| 146 | + "detail": [ |
| 147 | + { |
| 148 | + "type": "missing", |
| 149 | + "loc": [ |
| 150 | + "query", |
| 151 | + "needy" |
| 152 | + ], |
| 153 | + "msg": "Field required", |
| 154 | + "input": null, |
| 155 | + "url": "https://errors.pydantic.dev/2.1/v/missing" |
| 156 | + } |
| 157 | + ] |
| 158 | +} |
| 159 | +``` |
| 160 | + |
| 161 | +Оскільки `needy` є обов’язковим параметром, вам потрібно вказати його в URL: |
| 162 | + |
| 163 | +``` |
| 164 | +http://127.0.0.1:8000/items/foo-item?needy=sooooneedy |
| 165 | +``` |
| 166 | + |
| 167 | +...цей запит поверне: |
| 168 | + |
| 169 | +```JSON |
| 170 | +{ |
| 171 | + "item_id": "foo-item", |
| 172 | + "needy": "sooooneedy" |
| 173 | +} |
| 174 | +``` |
| 175 | + |
| 176 | + |
| 177 | +Звичайно, Ви можете визначити деякі параметри як обов’язкові, інші зі значенням за замовчуванням, а ще деякі — повністю опціональні: |
| 178 | + |
| 179 | +{* ../../docs_src/query_params/tutorial006_py310.py hl[8] *} |
| 180 | + |
| 181 | +У цьому випадку є 3 query параметри: |
| 182 | + |
| 183 | +* `needy`, обов’язковий `str`. |
| 184 | +* `skip`, `int` зі значенням за замовчуванням `0`. |
| 185 | +* `limit`, опціональний `int`. |
| 186 | + |
| 187 | + |
| 188 | +/// tip | Підказка |
| 189 | + |
| 190 | +Ви також можете використовувати `Enum`-и, так само як і з [Path Parameters](path-params.md#predefined-values){.internal-link target=_blank}. |
| 191 | + |
| 192 | +/// |
0 commit comments