メインコンテンツまでスキップ

フォームパラメータ

フォームデータは、リクエストボディデータを送信するもう1つの方法で、HTMLフォームやファイルアップロードで一般的に使用されます。JSONとは異なり、フォームデータはapplication/x-www-form-urlencodedまたはmultipart/form-dataコンテンツタイプでエンコードされます。

lihilはフォーム解析をサポートし、フォーム値とアップロードされたファイルを抽出できます。


フォームパラメータの宣言

Annotated[T, Form()]を使用してフォームパラメータを宣言できます。lihilは自動的にリクエストボディを解析し、フォームフィールドを抽出します:

from lihil import Route, Form, Struct
from typing import Annotated

login = Route("/login")

class LoginForm(Struct):
username: str
password: str

@login.post
async def handle_login(
loginform: Annotated[LoginForm, Form()]
) -> str:
return f"Welcome {username}"

form()ヘルパーは、パラメータがフォームボディから来ることをマークします。

ファイルアップロードの処理

フォームデータはファイルアップロードもサポートします(コンテンツタイプがmultipart/form-dataの場合)。アップロードされたファイルをパラメータとして宣言できます:

from lihil import form, UploadFile
from typing import Annotated

@user.post
async def upload_avatar(file: UploadFile) -> str:
return file.filename

高度:ファイルの制約

大きなフォームを解析したり、ユーザーアップロードを処理したりする際、サーバーを保護するために制限を設定したい場合があります。form()ヘルパーは以下のようなオプションを受け入れます:

  • max_files:最大ファイル数
  • max_fields:合計フィールドの最大数
  • max_part_size:任意のパートの最大サイズ(デフォルト:1MB)
@user.post
async def upload_many(
files: Annotated[list[UploadFile], Form(max_files=5, max_part_size=2 * 1024 * 1024)]
) -> int:
return len(files)

フォームデータは、コンテンツタイプに応じて異なる方法で解析される、もう1つの種類のボディデータです。lihilを使用すると、Annotated[..., Form()]を使用してフォームパラメータを宣言でき、ファイル処理、フィールド制限、ストリーミングを完全に制御できます—すべて慣れ親しんだPython型で。