3.2 Модели Pydantic и их валидация
7 из 7 шагов пройдено
5 из 5 баллов  получено

Валидация тела запроса с использованием моделей Pydantic

В FastAPI тела запросов может быть проверено, чтобы гарантировать отправку только определенных данных. Это крайне важно, чтобы снизить риски вредоносных атак. В разделе 2.2 данного курса мы уже заметили, что при установке FastAPI у нас вместе с ним был установлен и модуль pydantic

Pydantic — это библиотека Python, которая выполняет проверку данных с помощью аннотаций типа Python. Модель в FastAPI — это структурированный класс, он определяет, как следует получать или анализировать данные. 

Особенности Pydantic 

Pydantic — это библиотека Python, которая предоставляет ряд функций проверки и анализа данных. Вот некоторые из основных особенностей Pydantic:

  • Проверка данных: Pydantic включает функцию проверки, которая автоматически проверяет типы и значения атрибутов класса, гарантируя их правильность и соответствие любым заданным ограничениям. Также поддерживаются настраиваемые правила проверки с использованием подсказок, что позволяет пользователям определять дополнительные ограничения для своих данных.
  • Поддержка многих типов данных. Pydantic поддерживает широкий спектр типов данных, включая списки, словари и вложенные модели, что упрощает определение и проверку сложных структур данных.
  • Эффективность и лёгкость: Pydantic спроектирован так, чтобы быть быстрым и эффективным, с небольшой кодовой базой и минимальным количеством зависимостей. Он также хорошо документирован и прост в использовании, что делает его популярным выбором для проверки и анализа данных в Python.
  • Открытый исходный код: Pydantic — это библиотека с открытым исходным кодом, лицензированная в соответствии с лицензией MIT, которая активно разрабатывается и поддерживается сообществом участников.

Модели создаются путем определения подкласса класса BaseModel Pydantic. Примерная модель выглядит следующим образом:

from pydantic import BaseModel


class Message(BaseModel):
    id: int
    text: str

Данная модель Message состоит из двух полей:

  • id, которое является целым числом,
  • text, которое является строкой.

В результате данная модель будет представлена следующим образом:

{
  "id": 0,
  "text": "string"
}

Мы также, как и в валидации параметров можем устанавливать несколько типов для поля, и также делать поле не обязательным и устанавливать значение по умолчанию:

from pydantic import BaseModel


class Message(BaseModel):
    id: int
    description: str | None = None
    text: str = "Simple text"

Поведение полей Pydantic можно настроить с помощью класса Field(). Он имеет те же свойства, что и функции Path(), Query() и Body(). Для числовых полей вы можете применить критерии проверки gt, ge, lt, le. Чтобы ограничить длину строки, существуют свойства min_length и max_length, также она может быть проверена с помощью регулярных выражений.

from pydantic import BaseModel, Field


class Message(BaseModel):
    id: int
    description: str | None = Field(default=None, description="The description of the message", max_length=300)
    text: str = "Simple text"

В дополнение к стандартным типам данных Python, библиотека Pydantic определяет свои собственные типы:

  • HttpUrl: Это поле, по сути, является строкой со встроенной проверкой для URL. Тип HttpUrl принимает как HTTP, так и HTTPS схемы. Он требует указания TLD (домена верхнего уровня) и хоста, максимальная длина 2083 символа.
  • AnyUrl позволяет использовать любую схему (TLD не требуется, но хост обязателен).
  • FileUrl предназначено для хранения URL-адреса файла и не требует указания хоста.
  • EmailStr: Это такая же строка, но которая должна быть действительным адресом электронной почты. Для проверки правильности представления электронной почты в виде строки требует установки модуля email-validator.
  • SecretStr: Этот тип данных используется в основном для хранения паролей или любой другой конфиденциальной информации, которая не должна появляться в логах или другом отслеживании. При преобразовании в JSON он будет отформатирован как '**********'.

Вложенные модели

Модели Pydantic также могут быть вложенными, например, следующие:

from pydantic import BaseModel


class Item(BaseModel):
    description: str | None = None
    text: str = "Simple text"


class Message(BaseModel):
    id: int
    item: Item

В результате данные модели будут представлены следующим образом:

{
  "id": 0,
  "item": {
    "description": "string",
    "text": "Simple text"
  }
}

Мы узнали, что такое модели, как их создавать. Мы будем использовать их в оставшихся частях этого курса. В следующем шаге рассмотрим как принимать данные из модели и комбинировать параметры пути и запроса.


  • Комментария
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.

Данная модель User  Message состоит из двух полей:

  • id, которое является целым числом,
  • text, которое является строкой.

@Denis_Romanov, Спасибо, поправил.

Вот некоторые из основных особенностей Pydantic:
Поддержка комплексных чисел


Не вполне понимаю, какое это имеет значение

@Anonymous_38661511, спасибо, исправил.