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)
参考
- pydantic公式ドキュメント