こんにちは、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)