Тип EmailStr
Тип EmailStr применяется в моделях Pydantic
для валидации email-адресов.
Он импортируется из модуля pydantic
и автоматически проверяет формат строки
при создании модели или приёме данных из запроса.
Если строка не является корректным email,
Pydantic выбрасывает ошибку валидации.
В FastAPI это приводит к ответу 422
с описанием проблемы.
Тип EmailStr требует установки
дополнительного пакета email-validator.
Без него при использовании типа возникнет ошибка импорта.
Синтаксис
from pydantic import BaseModel, EmailStr
class Model(BaseModel):
email: EmailStr
Пример
Давайте создадим модель с полем email
и проверим корректный адрес:
from fastapi import FastAPI
from pydantic import BaseModel, EmailStr
app = FastAPI()
class User(BaseModel):
name: str
email: EmailStr
@app.post('/user')
def create_user(user: User):
return {'name': user.name, 'email': user.email}
Отправим POST-запрос с корректными данными:
{"name": "abcde", "email": "user@example.com"}
Результат выполнения кода:
{"name": "abcde", "email": "user@example.com"}
Пример
Давайте попробуем передать некорректный email и посмотрим, как FastAPI вернёт ошибку валидации:
from fastapi import FastAPI
from pydantic import BaseModel, EmailStr
app = FastAPI()
class User(BaseModel):
name: str
email: EmailStr
@app.post('/user')
def create_user(user: User):
return {'name': user.name, 'email': user.email}
Отправим POST-запрос с некорректным адресом:
{"name": "abcde", "email": "not-an-email"}
Результат выполнения кода:
{
"detail": [
{
"type": "value_error",
"loc": ["body", "email"],
"msg": "value is not a valid email address: An email address must have an @-sign.",
"input": "not-an-email"
}
]
}
Пример
Давайте проверим валидацию напрямую через модель Pydantic, без запуска FastAPI-приложения:
from pydantic import BaseModel, EmailStr, ValidationError
class User(BaseModel):
email: EmailStr
try:
user = User(email='user@example.com')
print(user.email)
except ValidationError as e:
print(e)
Результат выполнения кода:
"user@example.com"