diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 58e6ca6be..59501b554 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -15,6 +15,7 @@ hide: ### Docs +* πŸ“ Fix typos in virtual environments documentation. PR [#13396](https://github.com/fastapi/fastapi/pull/13396) by [@bullet-ant](https://github.com/bullet-ant). * πŸ› Fix issue with Swagger theme change example in the official tutorial. PR [#13289](https://github.com/fastapi/fastapi/pull/13289) by [@Zerohertz](https://github.com/Zerohertz). * πŸ“ Add more precise description of HTTP status code range in docs. PR [#13347](https://github.com/fastapi/fastapi/pull/13347) by [@DanielYang59](https://github.com/DanielYang59). * πŸ”₯ Remove manual type annotations in JWT tutorial to avoid typing expectations (JWT doesn't provide more types). PR [#13378](https://github.com/fastapi/fastapi/pull/13378) by [@tiangolo](https://github.com/tiangolo). @@ -24,6 +25,8 @@ hide: ### Translations +* 🌐 Add Ukrainian translation for `docs/uk/docs/tutorial/request-form-models.md`. PR [#13384](https://github.com/fastapi/fastapi/pull/13384) by [@valentinDruzhinin](https://github.com/valentinDruzhinin). +* 🌐 Add Ukrainian translation for `docs/uk/docs/tutorial/request-forms-and-files.md`. PR [#13386](https://github.com/fastapi/fastapi/pull/13386) by [@valentinDruzhinin](https://github.com/valentinDruzhinin). * 🌐 Update Korean translation for `docs/ko/docs/help-fastapi.md`. PR [#13262](https://github.com/fastapi/fastapi/pull/13262) by [@Zerohertz](https://github.com/Zerohertz). * 🌐 Add Korean translation for `docs/ko/docs/advanced/custom-response.md`. PR [#13265](https://github.com/fastapi/fastapi/pull/13265) by [@11kkw](https://github.com/11kkw). * 🌐 Update Korean translation for `docs/ko/docs/tutorial/security/simple-oauth2.md`. PR [#13335](https://github.com/fastapi/fastapi/pull/13335) by [@yes0ng](https://github.com/yes0ng). diff --git a/docs/en/docs/virtual-environments.md b/docs/en/docs/virtual-environments.md index b75be18c3..4f65b3b80 100644 --- a/docs/en/docs/virtual-environments.md +++ b/docs/en/docs/virtual-environments.md @@ -668,7 +668,7 @@ After activating the virtual environment, the `PATH` variable would look somethi /home/user/code/awesome-project/.venv/bin:/usr/bin:/bin:/usr/sbin:/sbin ``` -That means that the system will now start looking first look for programs in: +That means that the system will now start looking first for programs in: ```plaintext /home/user/code/awesome-project/.venv/bin @@ -692,7 +692,7 @@ and use that one. C:\Users\user\code\awesome-project\.venv\Scripts;C:\Windows\System32 ``` -That means that the system will now start looking first look for programs in: +That means that the system will now start looking first for programs in: ```plaintext C:\Users\user\code\awesome-project\.venv\Scripts diff --git a/docs/uk/docs/tutorial/request-form-models.md b/docs/uk/docs/tutorial/request-form-models.md new file mode 100644 index 000000000..7f5759e79 --- /dev/null +++ b/docs/uk/docs/tutorial/request-form-models.md @@ -0,0 +1,78 @@ +# ΠœΠΎΠ΄Π΅Π»Ρ– Ρ„ΠΎΡ€ΠΌ (Form Models) + +Π£ FastAPI Π’ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ використовувати **Pydantic-ΠΌΠΎΠ΄Π΅Π»Ρ–** для оголошСння **ΠΏΠΎΠ»Ρ–Π² Ρ„ΠΎΡ€ΠΌΠΈ**. + +/// info | Інформація + +Π©ΠΎΠ± використовувати Ρ„ΠΎΡ€ΠΌΠΈ, спочатку Π²ΡΡ‚Π°Π½ΠΎΠ²Ρ–Ρ‚ΡŒ python-multipart. + +ΠŸΠ΅Ρ€Π΅ΠΊΠΎΠ½Π°ΠΉΡ‚Π΅ΡΡ, Ρ‰ΠΎ Π’ΠΈ створили [Π²Ρ–Ρ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π΅ сСрСдовищС](../virtual-environments.md){.internal-link target=_blank}, Π°ΠΊΡ‚ΠΈΠ²ΡƒΠ²Π°Π»ΠΈ ΠΉΠΎΠ³ΠΎ, Π° ΠΏΠΎΡ‚Ρ–ΠΌ встановили Π±Ρ–Π±Π»Ρ–ΠΎΡ‚Π΅ΠΊΡƒ, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄: + +```console +$ pip install python-multipart +``` + +/// + +/// note | ΠŸΡ–Π΄ΠΊΠ°Π·ΠΊΠ° + +Ця функція ΠΏΡ–Π΄Ρ‚Ρ€ΠΈΠΌΡƒΡ”Ρ‚ΡŒΡΡ, ΠΏΠΎΡ‡ΠΈΠ½Π°ΡŽΡ‡ΠΈ Π· FastAPI вСрсії `0.113.0`. πŸ€“ + +/// + +## Використання Pydantic-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ для Ρ„ΠΎΡ€ΠΌ + +Π’Π°ΠΌ просто ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ оголосити **Pydantic-модСль** Π· полями, які Π’ΠΈ Ρ…ΠΎΡ‡Π΅Ρ‚Π΅ ΠΎΡ‚Ρ€ΠΈΠΌΠ°Ρ‚ΠΈ як **поля Ρ„ΠΎΡ€ΠΌΠΈ**, Π° ΠΏΠΎΡ‚Ρ–ΠΌ оголосити ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ як `Form`: + +{* ../../docs_src/request_form_models/tutorial001_an_py39.py hl[9:11,15] *} + +**FastAPI** **витягнС** Π΄Π°Π½Ρ– для **ΠΊΠΎΠΆΠ½ΠΎΠ³ΠΎ поля** Π· **Ρ„ΠΎΡ€ΠΌΠΎΠ²ΠΈΡ… Π΄Π°Π½ΠΈΡ…** Ρƒ Π·Π°ΠΏΠΈΡ‚Ρ– Ρ‚Π° Π½Π°Π΄Π°ΡΡ‚ΡŒ Π²Π°ΠΌ Pydantic-модСль, яку Π’ΠΈ Π²ΠΈΠ·Π½Π°Ρ‡ΠΈΠ»ΠΈ. + +## ΠŸΠ΅Ρ€Π΅Π²Ρ–Ρ€ΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†Ρ–Ρ— + +Π’ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΠΈΡ‚ΠΈ Ρ†Π΅ Π² UI Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†Ρ–Ρ— Π·Π° `/docs`: + +
+ +
+ +## Π—Π°Π±ΠΎΡ€ΠΎΠ½Π° Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²ΠΈΡ… ΠΏΠΎΠ»Ρ–Π² Ρ„ΠΎΡ€ΠΌΠΈ + +Π£ дСяких особливих Π²ΠΈΠΏΠ°Π΄ΠΊΠ°Ρ… (ΠΉΠΌΠΎΠ²Ρ–Ρ€Π½ΠΎ, Ρ€Ρ–Π΄ΠΊΠΎ) Π’ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ **ΠΎΠ±ΠΌΠ΅ΠΆΠΈΡ‚ΠΈ** Ρ„ΠΎΡ€ΠΌΡƒ лишС Ρ‚ΠΈΠΌΠΈ полями, які Π±ΡƒΠ»ΠΈ ΠΎΠ³ΠΎΠ»ΠΎΡˆΠ΅Π½Ρ– Π² Pydantic-ΠΌΠΎΠ΄Π΅Π»Ρ–, Ρ– **Π·Π°Π±ΠΎΡ€ΠΎΠ½ΠΈΡ‚ΠΈ** Π±ΡƒΠ΄ΡŒ-які **Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²Ρ–** поля. + +/// note | ΠŸΡ–Π΄ΠΊΠ°Π·ΠΊΠ° + +Ця функція ΠΏΡ–Π΄Ρ‚Ρ€ΠΈΠΌΡƒΡ”Ρ‚ΡŒΡΡ, ΠΏΠΎΡ‡ΠΈΠ½Π°ΡŽΡ‡ΠΈ Π· FastAPI вСрсії `0.114.0`. πŸ€“ + +/// + +Π’ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ використати ΠΊΠΎΠ½Ρ„Ρ–Π³ΡƒΡ€Π°Ρ†Ρ–ΡŽ Pydantic-ΠΌΠΎΠ΄Π΅Π»Ρ–, Ρ‰ΠΎΠ± Π·Π°Π±ΠΎΡ€ΠΎΠ½ΠΈΡ‚ΠΈ `forbid` Π±ΡƒΠ΄ΡŒ-які Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²Ρ– `extra` поля: + +{* ../../docs_src/request_form_models/tutorial002_an_py39.py hl[12] *} + +Π―ΠΊΡ‰ΠΎ ΠΊΠ»Ρ–Ρ”Π½Ρ‚ спробує надіслати Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²Ρ– Π΄Π°Π½Ρ–, Π²Ρ–Π½ ΠΎΡ‚Ρ€ΠΈΠΌΠ°Ρ” **Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄ΡŒ Π· помилкою**. + +Наприклад, якщо ΠΊΠ»Ρ–Ρ”Π½Ρ‚ спробує надіслати наступні поля Ρ„ΠΎΡ€ΠΌΠΈ: + +* `username`: `Rick` +* `password`: `Portal Gun` +* `extra`: `Mr. Poopybutthole` + +Π’Ρ–Π½ ΠΎΡ‚Ρ€ΠΈΠΌΠ°Ρ” Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄ΡŒ Ρ–Π· помилкою, яка повідомляє, Ρ‰ΠΎ ΠΏΠΎΠ»Π΅ `extra` Π½Π΅ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½ΠΎ: + +```json +{ + "detail": [ + { + "type": "extra_forbidden", + "loc": ["body", "extra"], + "msg": "Extra inputs are not permitted", + "input": "Mr. Poopybutthole" + } + ] +} +``` + +## ΠŸΡ–Π΄ΡΡƒΠΌΠΎΠΊ + +Π’ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ використовувати Pydantic-ΠΌΠΎΠ΄Π΅Π»Ρ– для оголошСння ΠΏΠΎΠ»Ρ–Π² Ρ„ΠΎΡ€ΠΌΠΈ Ρƒ FastAPI. 😎 diff --git a/docs/uk/docs/tutorial/request-forms-and-files.md b/docs/uk/docs/tutorial/request-forms-and-files.md new file mode 100644 index 000000000..a089ef945 --- /dev/null +++ b/docs/uk/docs/tutorial/request-forms-and-files.md @@ -0,0 +1,41 @@ +# Π—Π°ΠΏΠΈΡ‚ΠΈ Π· Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ Ρ‚Π° Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ + +Π£ FastAPI Π’ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ одночасно ΠΎΡ‚Ρ€ΠΈΠΌΡƒΠ²Π°Ρ‚ΠΈ Ρ„Π°ΠΉΠ»ΠΈ Ρ‚Π° поля Ρ„ΠΎΡ€ΠΌΠΈ, Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‡ΠΈ `File` Ρ– `Form`. + +/// info | Інформація + +Π©ΠΎΠ± ΠΎΡ‚Ρ€ΠΈΠΌΡƒΠ²Π°Ρ‚ΠΈ Π·Π°Π²Π°Π½Ρ‚Π°ΠΆΠ΅Π½Ρ– Ρ„Π°ΠΉΠ»ΠΈ Ρ‚Π°/Π°Π±ΠΎ Π΄Π°Π½Ρ– Ρ„ΠΎΡ€ΠΌΠΈ, спочатку Π²ΡΡ‚Π°Π½ΠΎΠ²Ρ–Ρ‚ΡŒ python-multipart. + +ΠŸΠ΅Ρ€Π΅ΠΊΠΎΠ½Π°ΠΉΡ‚Π΅ΡΡ, Ρ‰ΠΎ Π’ΠΈ створили [Π²Ρ–Ρ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π΅ сСрСдовищС](../virtual-environments.md){.internal-link target=_blank}, Π°ΠΊΡ‚ΠΈΠ²ΡƒΠ²Π°Π»ΠΈ ΠΉΠΎΠ³ΠΎ, Π° ΠΏΠΎΡ‚Ρ–ΠΌ встановили Π±Ρ–Π±Π»Ρ–ΠΎΡ‚Π΅ΠΊΡƒ, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄: + +```console +$ pip install python-multipart +``` + +/// + +## Π†ΠΌΠΏΠΎΡ€Ρ‚ `File` Ρ‚Π° `Form` + +{* ../../docs_src/request_forms_and_files/tutorial001_an_py39.py hl[3] *} + +## ОголошСння ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ–Π² `File` Ρ‚Π° `Form` + +Π‘Ρ‚Π²ΠΎΡ€Ρ–Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»Ρ–Π² Ρ‚Π° Ρ„ΠΎΡ€ΠΌΠΈ Ρ‚Π°ΠΊ само як Ρ– для `Body` Π°Π±ΠΎ `Query`: + +{* ../../docs_src/request_forms_and_files/tutorial001_an_py39.py hl[10:12] *} + +Π€Π°ΠΉΠ»ΠΈ Ρ‚Π° поля Ρ„ΠΎΡ€ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ΡŒ Π·Π°Π²Π°Π½Ρ‚Π°ΠΆΠ΅Π½Ρ– як Ρ„ΠΎΡ€ΠΌΠΎΠ²Ρ– Π΄Π°Π½Ρ–, Ρ– Π’ΠΈ ΠΎΡ‚Ρ€ΠΈΠΌΠ°Ρ”Ρ‚Π΅ як Ρ„Π°ΠΉΠ»ΠΈ, Ρ‚Π°ΠΊ Ρ– Π²Π²Π΅Π΄Π΅Π½Ρ– користувачСм поля. + +Π’ΠΈ Ρ‚Π°ΠΊΠΎΠΆ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ оголосити дСякі Ρ„Π°ΠΉΠ»ΠΈ як `bytes`, Π° дСякі як `UploadFile`. + +/// warning | Π£Π²Π°Π³Π° + +Π’ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ оголосити ΠΊΡ–Π»ΡŒΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ–Π² `File` Ρ– `Form` Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†Ρ–Ρ— *ΡˆΠ»ΡΡ…Ρƒ*, Π°Π»Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ одночасно ΠΎΠ³ΠΎΠ»ΠΎΡˆΡƒΠ²Π°Ρ‚ΠΈ `Body`-поля, які ΠΎΡ‡Ρ–ΠΊΡƒΡ”Ρ‚Π΅ ΠΎΡ‚Ρ€ΠΈΠΌΠ°Ρ‚ΠΈ Ρƒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ– JSON, ΠΎΡΠΊΡ–Π»ΡŒΠΊΠΈ Π·Π°ΠΏΠΈΡ‚ ΠΌΠ°Ρ‚ΠΈΠΌΠ΅ Ρ‚Ρ–Π»ΠΎ, Π·Π°ΠΊΠΎΠ΄ΠΎΠ²Π°Π½Π΅ Π·Π° допомогою `multipart/form-data`, Π° Π½Π΅ `application/json`. + +Π¦Π΅ Π½Π΅ обмСТСння **FastAPI**, Π° частина ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ HTTP. + +/// + +## ΠŸΡ–Π΄ΡΡƒΠΌΠΎΠΊ + +ВикористовуйтС `File` Ρ‚Π° `Form` Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠ»ΠΈ Π²Π°ΠΌ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ ΠΎΡ‚Ρ€ΠΈΠΌΡƒΠ²Π°Ρ‚ΠΈ Π΄Π°Π½Ρ– Ρ„ΠΎΡ€ΠΌΠΈ Ρ‚Π° Ρ„Π°ΠΉΠ»ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌΡƒ Π·Π°ΠΏΠΈΡ‚Ρ–.