Files
fastapi/docs/ja/docs/tutorial/request-forms.md
Sebastián Ramírez b0e99d66e8 🌐 Update translations for ja (update-outdated) (#14588)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Yurii Motov <yurii.motov.monte@gmail.com>
Co-authored-by: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
Co-authored-by: Maruo.S <raspi-maru2004@outlook.jp>
2026-02-04 17:44:21 +01:00

3.7 KiB
Raw Blame History

フォームデータ

JSONの代わりにフィールドを受け取る場合は、Formを使用します。

/// info | 情報

フォームを使うためには、まずpython-multipartをインストールします。

必ず仮想環境{.internal-link target=_blank}を作成して有効化してから、例えば次のようにインストールしてください:

$ pip install python-multipart

///

Formのインポート

fastapiからFormをインポートします:

{* ../../docs_src/request_forms/tutorial001_an_py39.py hl[3] *}

Formのパラメータの定義

BodyQueryの場合と同じようにフォームパラメータを作成します:

{* ../../docs_src/request_forms/tutorial001_an_py39.py hl[9] *}

例えば、OAuth2仕様が使用できる方法の「パスワードフロー」と呼ばれるでは、フォームフィールドとしてusernamepasswordを送信する必要があります。

specでは、フィールドの名前がusernamepasswordであることと、JSONではなくフォームフィールドとして送信されることを要求しています。

FormではBody(およびQueryPathCookie)と同じ設定を宣言することができます。これには、バリデーション、例、エイリアス(例えばusernameの代わりにuser-name)などが含まれます。

/// info | 情報

FormBodyを直接継承するクラスです。

///

/// tip | 豆知識

フォームのボディを宣言するには、明示的にFormを使用する必要があります。なぜなら、これを使わないと、パラメータはクエリパラメータやボディJSONパラメータとして解釈されるからです。

///

「フォームフィールド」について

HTMLフォーム<form></form>がサーバにデータを送信する方法は、通常、そのデータに「特別な」エンコーディングを使用していますが、これはJSONとは異なります。

FastAPI は、JSONの代わりにそのデータを適切な場所から読み込むようにします。

/// note | 技術詳細

フォームからのデータは通常、application/x-www-form-urlencodedの「media type」を使用してエンコードされます。

しかし、フォームがファイルを含む場合は、multipart/form-dataとしてエンコードされます。ファイルの扱いについては次の章で説明します。

これらのエンコーディングやフォームフィールドの詳細については、MDNPOSTのウェブドキュメントを参照してください。

///

/// warning | 注意

path operationで複数のFormパラメータを宣言することができますが、JSONとして受け取ることを期待しているBodyフィールドを宣言することはできません。なぜなら、リクエストはapplication/jsonの代わりにapplication/x-www-form-urlencodedを使ってボディをエンコードするからです。

これは FastAPIの制限ではなく、HTTPプロトコルの一部です。

///

まとめ

フォームデータの入力パラメータを宣言するには、Formを使用する。