Published

フォームデータ

FastAPI framework, high performance, easy to learn, fast to code, ready for production We just scratched the surface, but you already get the idea of how it all works...

フォームデータ

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

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

たとえば、pip install python-multipartのように。

Formのインポート

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

{!../../../docs_src/request_forms/tutorial001.py!}

Formのパラメータの定義

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

{!../../../docs_src/request_forms/tutorial001.py!}

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

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

FormではBody(およびQueryPathCookie)と同じメタデータとバリデーションを宣言することができます。

!!! 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を使用する。