Pydanticの概要
Pydanticは、Pythonのデータ検証と設定管理ライブラリで、複雑なデータ型をエレガントに扱うことで、その強力な型ヒントとバリデーション機能により、多くのPython開発者から支持を受けているライブラリです。
Pydanticを使用することのメリットは、
- データの不整合や予期せぬエラーを効率的に排除することが可能になり、より堅牢なWebアプリケーションを構築することが可能になる
- 手間のかかる設定や冗長なコードを大幅に削減し、開発者が本質的な部分に集中できる。
という部分が挙げられます。
Pydanticの使いどころ
APIリクエストとレスポンスのデータを管理
Pydanticの機能を活用して、APIリクエストとレスポンスのデータを管理します。これにより、エンドポイントに送信されるデータが正しい形式と構造を持っていることを保証します。
PydanticのDBモデル
特定のデータ構造を定義し、そのデータが適切に検証され、型変換されることを保証します。
Pydanticのバリデーション
データが定義した型と形式に一致することを保証します。
Pydanticのバリデーション設定例
項目必須チェックの例
必須チェックはPydanticのモデルで自動的に適用されます。フィールドがモデルで指定されている場合、そのフィールドは必須になります。
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
この例では、nameとageは必須フィールドです。もしこれらが省略された場合、Pydanticはエラーを発生させます。
項目必須チェックと最小文字数、最大文字数
フィールドの長さの制限は、Field関数を使用して指定します。
from pydantic import BaseModel, Field
class User(BaseModel):
name: str = Field(..., min_length=2, max_length=10)
この例では、nameは2文字以上10文字以下でなければならないと指定しています。
項目の指定を任意にする場合
フィールドが存在しなくてもよい場合はNoneを指定します。
from pydantic import BaseModel
class User(BaseModel):
name: str = None
この例では、nameはなくてもエラーになりません。 以下の記述方式も同じ効果となります。
name: str | None
項目必須だが値は指定なしを許可する場合
必須でないフィールドは、Optionalをデフォルト値を指定することで実現します。
PythonのtypingモジュールにあるOptionalは、値が存在しないこと(Noneであること)を許可する場合に使用します。Pydanticのモデルにおいても、OptionalはフィールドがNoneであることを許可するために利用できます。
from pydantic import BaseModel
from typing import Optional
class User(BaseModel):
name: Optional[str] = Field(...)
この例では、nameを指定しない場合はエラーになる、空文字の場合はエラーになりません。
項目指定されている場合のみ文字数の制限する
これもField関数を使用して実現できます。
from pydantic import BaseModel, Field
class User(BaseModel):
name: str = Field(default=None, min_length=2, max_length=10)
この例では、nameは指定されている場合のみ2文字以上10文字以下でなければならないと指定しています。
正規表現を使う場合
Field関数のregexパラメータに正規表現を指定します。
from pydantic import BaseModel, Field
class User(BaseModel):
email: str = Field(..., regex=r'^[a-z0-9]+[\._]?[a-z0-9]+[@]\w+[.]\w{2,3}$')
この例では、emailは正規表現によるフォーマットチェックが行われます。
以上が、Pydanticを用いたデータバリデーションの基本的な例です。それぞれの例は具体的な制限を示していますが、Pydanticはこれらを自由に組み合わせて使用することができます。

コメント