From 8560151090c08187b9d84ac1c020213a28b8131b Mon Sep 17 00:00:00 2001 From: SwftAlpc Date: Sun, 10 Jan 2021 03:28:15 +0900 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=90=20Add=20Japanese=20translation=20f?= =?UTF-8?q?or=20Tutorial=20-=20Form=20Data=20(#1943)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: ryusuke.miyaji Co-authored-by: ryuckel <36391432+ryuckel@users.noreply.github.com> Co-authored-by: tokusumi Co-authored-by: T. Tokusumi <41147016+tokusumi@users.noreply.github.com> Co-authored-by: Sebastián Ramírez --- docs/ja/docs/tutorial/request-forms.md | 58 ++++++++++++++++++++++++++ docs/ja/mkdocs.yml | 1 + 2 files changed, 59 insertions(+) create mode 100644 docs/ja/docs/tutorial/request-forms.md diff --git a/docs/ja/docs/tutorial/request-forms.md b/docs/ja/docs/tutorial/request-forms.md new file mode 100644 index 000000000..06105c9ef --- /dev/null +++ b/docs/ja/docs/tutorial/request-forms.md @@ -0,0 +1,58 @@ +# フォームデータ + +JSONの代わりにフィールドを受け取る場合は、`Form`を使用します。 + +!!! info "情報" + フォームを使うためには、まず`python-multipart`をインストールします。 + + たとえば、`pip install python-multipart`のように。 + +## `Form`のインポート + +`fastapi`から`Form`をインポートします: + +```Python hl_lines="1" +{!../../../docs_src/request_forms/tutorial001.py!} +``` + +## `Form`のパラメータの定義 + +`Body`や`Query`の場合と同じようにフォームパラメータを作成します: + +```Python hl_lines="7" +{!../../../docs_src/request_forms/tutorial001.py!} +``` + +例えば、OAuth2仕様が使用できる方法の1つ(「パスワードフロー」と呼ばれる)では、フォームフィールドとして`username`と`password`を送信する必要があります。 + +仕様では、フィールドの名前が`username`と`password`であることと、JSONではなくフォームフィールドとして送信されることを要求しています。 + +`Form`では`Body`(および`Query`や`Path`、`Cookie`)と同じメタデータとバリデーションを宣言することができます。 + +!!! info "情報" + `Form`は`Body`を直接継承するクラスです。 + +!!! tip "豆知識" + フォームのボディを宣言するには、明示的に`Form`を使用する必要があります。なぜなら、これを使わないと、パラメータはクエリパラメータやボディ(JSON)パラメータとして解釈されるからです。 + +## 「フォームフィールド」について + +HTMLフォーム(`
`)がサーバにデータを送信する方法は、通常、そのデータに「特別な」エンコーディングを使用していますが、これは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`を使用する。 diff --git a/docs/ja/mkdocs.yml b/docs/ja/mkdocs.yml index 601efbc17..f8243528d 100644 --- a/docs/ja/mkdocs.yml +++ b/docs/ja/mkdocs.yml @@ -60,6 +60,7 @@ nav: - tutorial/query-params-str-validations.md - tutorial/cookie-params.md - tutorial/header-params.md + - tutorial/request-forms.md - セキュリティ: - tutorial/security/first-steps.md - tutorial/cors.md