Моделі форм (Form Models)¶
У FastAPI Ви можете використовувати Pydantic-моделі для оголошення полів форми.
Інформація
Щоб використовувати форми, спочатку встановіть python-multipart.
Переконайтеся, що Ви створили віртуальне середовище, активували його, а потім встановили бібліотеку, наприклад:
$ pip install python-multipart
Підказка
Ця функція підтримується, починаючи з FastAPI версії 0.113.0
. 🤓
Використання Pydantic-моделей для форм¶
Вам просто потрібно оголосити Pydantic-модель з полями, які Ви хочете отримати як поля форми, а потім оголосити параметр як Form
:
from typing import Annotated
from fastapi import FastAPI, Form
from pydantic import BaseModel
app = FastAPI()
class FormData(BaseModel):
username: str
password: str
@app.post("/login/")
async def login(data: Annotated[FormData, Form()]):
return data
🤓 Other versions and variants
from fastapi import FastAPI, Form
from pydantic import BaseModel
from typing_extensions import Annotated
app = FastAPI()
class FormData(BaseModel):
username: str
password: str
@app.post("/login/")
async def login(data: Annotated[FormData, Form()]):
return data
Tip
Prefer to use the Annotated
version if possible.
from fastapi import FastAPI, Form
from pydantic import BaseModel
app = FastAPI()
class FormData(BaseModel):
username: str
password: str
@app.post("/login/")
async def login(data: FormData = Form()):
return data
FastAPI витягне дані для кожного поля з формових даних у запиті та надасть вам Pydantic-модель, яку Ви визначили.
Перевірка документації¶
Ви можете перевірити це в UI документації за /docs
:

Заборона додаткових полів форми¶
У деяких особливих випадках (ймовірно, рідко) Ви можете обмежити форму лише тими полями, які були оголошені в Pydantic-моделі, і заборонити будь-які додаткові поля.
Підказка
Ця функція підтримується, починаючи з FastAPI версії 0.114.0
. 🤓
Ви можете використати конфігурацію Pydantic-моделі, щоб заборонити forbid
будь-які додаткові extra
поля:
from typing import Annotated
from fastapi import FastAPI, Form
from pydantic import BaseModel
app = FastAPI()
class FormData(BaseModel):
username: str
password: str
model_config = {"extra": "forbid"}
@app.post("/login/")
async def login(data: Annotated[FormData, Form()]):
return data
🤓 Other versions and variants
from fastapi import FastAPI, Form
from pydantic import BaseModel
from typing_extensions import Annotated
app = FastAPI()
class FormData(BaseModel):
username: str
password: str
model_config = {"extra": "forbid"}
@app.post("/login/")
async def login(data: Annotated[FormData, Form()]):
return data
Tip
Prefer to use the Annotated
version if possible.
from fastapi import FastAPI, Form
from pydantic import BaseModel
app = FastAPI()
class FormData(BaseModel):
username: str
password: str
model_config = {"extra": "forbid"}
@app.post("/login/")
async def login(data: FormData = Form()):
return data
Якщо клієнт спробує надіслати додаткові дані, він отримає відповідь з помилкою.
Наприклад, якщо клієнт спробує надіслати наступні поля форми:
username
:Rick
password
:Portal Gun
extra
:Mr. Poopybutthole
Він отримає відповідь із помилкою, яка повідомляє, що поле extra
не дозволено:
{
"detail": [
{
"type": "extra_forbidden",
"loc": ["body", "extra"],
"msg": "Extra inputs are not permitted",
"input": "Mr. Poopybutthole"
}
]
}
Підсумок¶
Ви можете використовувати Pydantic-моделі для оголошення полів форми у FastAPI. 😎