[FastAPI] PydanticでUUID, Email, URLを扱う

FastAPIでレスポンスなどの型をPydanticで扱うことが多いと思います。

Pydanticではstrやintなど基本的な型の他にUUIDやEmail、URLも扱うことができるのでそれについて書いていきます。

BaseModelでUUID, Email, URLを使う


Pydanticをインストールします。Emailのバリデーションはemail_validatorというライブラリを内部的に使用するのでこちらも必要になります。

pip install pydantic email_validator

使い方はこんな感じです。str型の値を渡すだけです。

from pydantic import UUID4, BaseModel, EmailStr, HttpUrl


class TestModel(BaseModel):
    id: UUID4
    email: EmailStr
    url: HttpUrl

model = TestModel(id="50f65802-a5db-43cf-9dfc-3d5aea11d5dc", email="test@test.com", url="https://www.hoge.com")
print(model.json())

UUID, EmailStr, HttpUrlの型はどう扱われるか


パースされた後の値はどの型になるのか。

UUID4はpython標準のUUID型、EmailStrはstr型、urlはHttpUrl型のままになります。

HttpUrlはstr型を継承しているのでstrとしても扱えます。

ただ、UUID4のフィールドはUUID型になるので文字列として扱いたければstr()で変換する必要があります。

print(type(x.id), type(x.email), type(x.url))
# <class 'uuid.UUID'> <class 'str'> <class 'pydantic.networks.HttpUrl'>

def output_string(v: str):
    print(v)

output_string(x.id)  # ここは型の警告が出る
output_string(x.email)
output_string(x.url)

参考


コメントを残す

メールアドレスが公開されることはありません。