注目キーワード

【FastAPI】空欄のINPUTをPOSTするとエラーになる

こんにちは、Tamagoです。

最近、FastAPIでWeb画面を作成していたのですが、空欄のINPUTをPOSTすると以下のようなエラーが発生して、結構ハマったので備忘録として残します。

{"detail":[{"loc":["body","user_name"],"msg":"field required","type":"value_error.missing"}]}

エラーのコード

以下のようなソースの場合、POSTすると必須項目が設定されていないよと怒られます。

from fastapi import ( APIRouter, Form,)router = APIRouter()@router.post("/ng")async def ng_function(  user_name: str = Form(...)): print(user_name)

受け取るFormが空欄の許容してくれればいいのだけれど、正式ドキュメントを見てもうまく見つけられなかった。。。

うまくいったコード

最終的にこんな感じに修正したら、うまく受け取れた、

受け取るパラメータ(user_name)は、空欄を許容しているので『 Optional 』に変更する。

 Formのところは『Form(…)』ではなく、『Form(None)』にする。

Formから値を受け取る場合、Form指定しないと、 クエリパラメータもしくはボディパラメータとして認識されてしまうようで、

追加の引数が不要な場合でも 『Form』 を使わなければいけないみたいです。

(…) は 必須かつ初期値を設定しないという意味なので、初期値をNoneにしてあげればよいということみたいです。

ちなみに””(空欄)を入れてもOKみたいです。

スポンサーリンク

from typing import Optionalfrom fastapi import ( APIRouter, Form,)router = APIRouter()@router.post("/ok")async def ok_function(  user_name: Optional[str] = Form(None)): print(user_name)