Дані форми¶
🌐 Translation by AI and humans
This translation was made by AI guided by humans. 🤝
It could have mistakes of misunderstanding the original meaning, or looking unnatural, etc. 🤖
You can improve this translation by helping us guide the AI LLM better.
Якщо вам потрібно отримувати поля форми замість JSON, ви можете використовувати Form.
Інформація
Щоб використовувати форми, спочатку встановіть python-multipart.
Переконайтеся, що ви створили віртуальне середовище, активували його, і потім встановили бібліотеку, наприклад:
$ pip install python-multipart
Імпорт Form¶
Імпортуйте Form з fastapi:
from typing import Annotated
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):
return {"username": username}
🤓 Other versions and variants
Tip
Prefer to use the Annotated version if possible.
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):
return {"username": username}
Оголошення параметрів Form¶
Створюйте параметри форми так само як ви б створювали Body або Query:
from typing import Annotated
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):
return {"username": username}
🤓 Other versions and variants
Tip
Prefer to use the Annotated version if possible.
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):
return {"username": username}
Наприклад, один зі способів використання специфікації OAuth2 (так званий "password flow") вимагає надсилати username та password як поля форми.
spec вимагає, щоб ці поля мали точні назви username і password та надсилалися у вигляді полів форми, а не JSON.
З Form ви можете оголошувати ті ж конфігурації, що і з Body (та Query, Path, Cookie), включаючи валідацію, приклади, псевдоніми (наприклад, user-name замість username) тощо.
Інформація
Form — це клас, який безпосередньо наслідується від Body.
Порада
Щоб оголосити тіло форми, потрібно явно використовувати Form, оскільки без нього параметри будуть інтерпретуватися як параметри запиту або тіла (JSON).
Про "поля форми"¶
HTML-форми (<form></form>) надсилають дані на сервер у "спеціальному" кодуванні, яке відрізняється від JSON.
FastAPI подбає про те, щоб зчитати ці дані з правильного місця, а не з JSON.
Технічні деталі
Дані з форм зазвичай кодуються за допомогою "типу медіа" application/x-www-form-urlencoded.
Але якщо форма містить файли, вона кодується як multipart/form-data. Ви дізнаєтеся про обробку файлів у наступному розділі.
Якщо ви хочете дізнатися більше про ці кодування та поля форм, зверніться до MDN вебдокументації для POST.
Попередження
Ви можете оголосити кілька параметрів Form в операції шляху, але не можете одночасно оголосити поля Body, які ви очікуєте отримати у форматі JSON, оскільки запит матиме тіло, закодоване як application/x-www-form-urlencoded, а не application/json.
Це не обмеження FastAPI, а частина HTTP-протоколу.
Підсумок¶
Використовуйте Form для оголошення вхідних параметрів у вигляді даних форми.