Создание кастомных проверок полей модели пользователя

В Pydantic 2 используйте field_validator: имя проверяйте полным совпадением [A-Za-z]+, а у валидированного email сравнивайте домен с gmail.com.

Короткий ответ

Что ответить на собеседовании

В Pydantic 2 используйте field_validator: имя проверяйте полным совпадением [A-Za-z]+, а у валидированного email сравнивайте домен с gmail.com.

Подробный разбор

Ответ с пояснениями

Условие

Дана модель, описанная с помощью Pydantic. Необходимо добавить пользовательские валидаторы:

  • поле name должно содержать только латинские буквы, без цифр и спецсимволов;
  • поле email обязано принадлежать домену gmail.com. Для реализации используйте встроенные механизмы Pydantic (например, декоратор @validator). Исходный класс выглядит следующим образом:
class User(BaseModel):
    id: int
    name: str = Field(min_length=3, max_length=32)
    email: EmailStr
    age: int = Field(ge=0, le=100)
    is_active: bool

После добавления валидаторов модель будет отбрасывать некорректные значения согласно указанным правилам.

Ответ

В Pydantic 2 используйте field_validator: имя проверяйте полным совпадением [A-Za-z]+, а у валидированного email сравнивайте домен с gmail.com.

import re
from pydantic import BaseModel, Field, EmailStr, field_validator

class User(BaseModel):
    id: int
    name: str = Field(min_length=3, max_length=32)
    email: EmailStr
    age: int = Field(ge=0, le=100)
    is_active: bool

    @field_validator('name')
    @classmethod
    def latin_name(cls, value):
        if not re.fullmatch(r'[A-Za-z]+', value):
            raise ValueError('Используйте только латинские буквы')
        return value

    @field_validator('email')
    @classmethod
    def gmail_only(cls, value):
        if value.rsplit('@', 1)[1].lower() != 'gmail.com':
            raise ValueError('Требуется адрес gmail.com')
        return value

EmailStr требует установленной зависимости email-validator. isalpha() недостаточно: он допускает кириллицу и другие алфавиты. Для Pydantic 1 используется прежний @validator; не смешивайте контракты двух версий.

Источник: pydantic.dev.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее