注目キーワード

【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 Optional

from fastapi import (
    APIRouter,
    Form,
)

router = APIRouter()
@router.post("/ok")
async def ok_function(
        user_name: Optional[str] = Form(None)
):
    print(user_name)
最新情報をチェックしよう!

FastAPIの最新記事8件