LoginSignup
1
1

Pydanticで自作の検証ルールを追加する

Posted at

Pydanticのデータ検証機能について

Pydanticを使用することで動的にデータの型を検証することができます。

from pydantic import BaseModel


class Time(BaseModel):
    year: int
    time: int


time_1 = Time(year=2020, time=10) # OK
time_2 = Time(year=2020, time="10") # OK, Pydanticが自動で型変換してくれる
time_3 = Time(year="2020", time="ten") # NG, timeはint型に変換できない

このようにデータの型を検証することで、バグを事前に回避することができます。

独自の検証ルールを作成する

Pydanticでは独自の検証ルールを作成することができます。

from pydantic import BaseModel, validator


class Time(BaseModel):
    year: int
    time: int

    @validator("time")
    def time_must_be_less_than_60(cls, v):
        if v >= 60:
            raise ValueError("time must be less than 60")
        return v


time_1 = Time(year=2020, time=10) # OK
time_2 = Time(year=2020, time=60) # NG, timeが60以上なのでエラーが発生する

この様に独自の検証ルールを作成することで、より細かい検証を行うことができます。

ルールは以下のフォーマットで作成します。

@validator("検証対象のフィールド名")
def 検証ルール名(cls, v):
    if some_rule: # 検証ルール
        raise ValueError("エラーメッセージ")
    return v # 検証に成功した場合は値をそのまま返す
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1