フォームモデル¶
🌐 AI と人間による翻訳
この翻訳は、人間のガイドに基づいて AI によって作成されました。🤝
原文の意図を取り違えていたり、不自然な表現になっている可能性があります。🤖
AI LLM をより適切に誘導するのを手伝う ことで、この翻訳を改善できます。
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
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 モデルとして渡します。
ドキュメントで確認¶
/docs のドキュメント UI で確認できます:
追加のフォームフィールドを禁止¶
一部の特殊なユースケース(おそらくあまり一般的ではありません)では、フォームフィールドを Pydantic モデルで宣言したもののみに制限し、追加のフィールドを禁止したい場合があります。
備考
これは FastAPI バージョン 0.114.0 以降でサポートされています。🤓
Pydantic のモデル設定で、extra フィールドを forbid にできます:
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
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:Rickpassword:Portal Gunextra:Mr. Poopybutthole
フィールド extra は許可されていない旨のエラーレスポンスが返されます:
{
"detail": [
{
"type": "extra_forbidden",
"loc": ["body", "extra"],
"msg": "Extra inputs are not permitted",
"input": "Mr. Poopybutthole"
}
]
}
まとめ¶
FastAPI でフォームフィールドを宣言するために Pydantic モデルを使用できます。😎