Как освоить валидаторы Pydantic?

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

Стать профессионалом в Pydantic Validators — это все равно, что научиться пользоваться уникальным инструментом, который проверяет правильность наших данных. Pydantic — это своего рода помощник в Python, который известен тем, что обеспечивает правильный и точный вид данных. Когда мы узнаем о валидаторах Pydantic, мы знаем, как очень хорошо использовать этот вспомогательный инструмент. Это означает, что мы понимаем, как устанавливать правила того, как должны выглядеть данные, и ловить ошибки. Чтобы преуспеть в этом, мы должны знать о различных типах данных и о том, как разработать собственные правила их проверки. Как только мы освоим Pydantic Validators, мы сможем сделать наши программы более надежными и надежными.

Метод 1. Освоение валидаторов Pydantic для реальных приложений

Представьте, что мы создаем веб-приложение для ресторана, где клиенты могут размещать заказы онлайн. Чтобы обеспечить точность заказов и предотвратить сбои, мы решили использовать валидаторы Pydantic для проверки входящих данных.

Всякий раз, когда мы начинаем с примера, требующего функций Pydantic, нам нужно сначала установить его пакеты, чтобы включить библиотеку со всеми ее пакетами в зависимости Python. Чтобы внести необходимые зависимости в проект, воспользуемся следующими командами:Загрузка рекламы

!pip install pydantic

from typing import List

from pydantic import BaseModel, conlist, field_validator

Теперь, когда мы уже установили необходимые пакеты, давайте сделаем первый шаг для реализации примера, который заключается в определении модели данных с использованием BaseModel от Pydantic. Поскольку мы работаем над приложением онлайн-заказа в ресторане, в нашем случае модель имеет атрибут, соответствующий требованиям приложения доставки. В каждом заказе указывается имя клиента, товары, которые он хочет заказать, а также любые особые примечания. Начнем с создания класса Python, который наследуется от BaseModel Pydantic, и укажем нужные нам поля:

В этой модели мы теперь определяем типы данных для каждого из этих атрибутов, где customer_name — обязательная строка, items — список строк (требуется хотя бы один элемент), а Special_notes — необязательная строка.

class Order(BaseModel):

customer_name: str

items: List[str]

special_notes: str = None

Обычно после определения модели мы создаем экземпляр этой модели для ее проверки, а затем получаем доступ к ее атрибутам объекта. Тем не менее, иногда нам необходимо применить некоторые условия к атрибутам модели данных перед созданием экземпляра ее объекта. Этот тип проверки известен как пользовательская проверка. Предположим, что для пользовательской проверки мы хотим убедиться, что имя клиента имеет длину не менее трех символов и что каждый элемент в заказе не пуст. Для этого мы можем использовать валидаторы Pydantic.

@field_validator(‘customer_name’)

def validate_customer_name(cls, value):

if len(value) < 3:

raise ValueError(«Customer name must be at least 3 characters long»)

return value

Эти валидаторы гарантируют, что имя клиента достаточно длинное и что каждый элемент имеет осмысленное имя.

После применения пользовательских проверок с использованием валидаторов с установленной моделью данных и валидаторов мы теперь можем использовать их для проверки входящих заказов в нашем веб-приложении.

order_data = {

«customer_name»«John»,

«items»[«Burger», «Fries»],

«special_notes»«No onions»

}

try:

order = Order(**order_data)

print(«Order is valid:», order)

except ValueError as e:

print(«Invalid order:», str(e))

Когда мы создаем экземпляр «Заказ», используя предоставленные данные, Pydantic автоматически запускает определенные нами валидаторы. Если какой-либо из валидаторов выдаст ошибку ValueError, данные недействительны в соответствии с нашими правилами.

Вот код примера, который мы упоминали ранее, с его выводом:

!pip install pydantic

from typing import List

from pydantic import BaseModel, conlist, field_validator

class Order(BaseModel):

customer_name: str

items: List[str]

special_notes: str = None

@field_validator(‘customer_name’)

def validate_customer_name(cls, value):

if len(value) < 3:

raise ValueError(«Customer name must be at least 3 characters long»)

return value

@field_validator(‘items’)

def validate_item(cls, value):

if not value:

raise ValueError(«Item names cannot be empty»)

return value

order_data = {

«customer_name»«John»,

«items»[«Burger», «Fries»],

«special_notes»«No onions»

}

try:

order = Order(**order_data)

print(«Order is valid:», order)

except ValueError as e:

print(«Invalid order:», str(e))

Освоив валидаторы Pydantic в этом примере, мы обеспечили точность заказов, размещенных через онлайн-платформу нашего ресторана, и приобрели ценные навыки проверки данных, которые можно применять в различных контекстах. Независимо от того, работаем ли мы над веб-приложениями, API или любым другим программным обеспечением, работающим с данными, валидаторы Pydantic могут стать мощным инструментом в нашем наборе инструментов разработчика.

Метод 2: расширенные параметры проверки в Pydantic

По мере того, как мы освоимся с валидаторами Pydantic, мы сможем изучить расширенные функции, такие как функции предварительной и постобработки, работу со сложными структурами данных и использование встроенных валидаторов Pydantic.

Например, мы могли бы добавить валидатор, который проверяет, не превышает ли общая сумма заказа определенную сумму, или создать вложенные модели для обработки более сложных структур, таких как адреса доставки.

Для валидатора общей стоимости заказа:

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

class Order(BaseModel):

customer_name: str

items: List[str]

special_notes: str = None

@field_validator(‘items’)

def validate_order_cost(cls, value, values):

item_prices = {«Burger»5, «Fries»2, «Soda»1} # Sample item prices

total_cost = sum(item_prices[item] for item in value)

if total_cost > 20:

raise ValueError(«Order total cannot exceed $20»)

return value

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

Что касается предыдущего примера, вложенных моделей адресов, предположим, что мы хотим обрабатывать разные адреса доставки; мы можем создать вложенную модель адресов и проверить ее компоненты.

class Address(BaseModel):

street: str

city: str

state: str

zip_code: str

class Order(BaseModel):

customer_name: str

items: conlist(str, min_items=1)

special_notes: str = None

delivery_address: Address

Включая Delivery_address в качестве экземпляра модели «Адрес», мы гарантируем, что данные адреса являются полными и соответствуют требуемой структуре.

Для расширенной предварительной обработки Pydantic позволяет нам выполнять расширенную предварительную обработку с использованием методов класса. Например, мы можем автоматически писать имя клиента с заглавной буквы и форматировать специальные примечания.

class Order(BaseModel):

customer_name: str

items: List[str]

special_notes: str = None

@classmethod

def pre_process(cls, data):

data[‘customer_name’] = data[‘customer_name’].capitalize()

if ‘special_notes’ in data:

data[‘special_notes’] = data[‘special_notes’].strip()

return data

Этот метод pre_process изменяет данные перед проверкой, обеспечивая согласованность и улучшая взаимодействие с пользователем.

Вот полный код с фрагментом вывода наблюдения. Этот код можно скопировать в любой компилятор Python, чтобы увидеть результат:

!pip install pydantic

from typing import List

from pydantic import BaseModel, conlist, field_validator

# Nested model for delivery address

class Address(BaseModel):

street: str

city: str

state: str

zip_code: str

# Order model with advanced validation and preprocessing

class Order(BaseModel):

customer_name: str

items: list[str]

special_notes: str = None

delivery_address: Address

@field_validator(‘items’)

def validate_order_cost(cls, value, values):

item_prices = {«Burger»5, «Fries»2, «Soda»1}

total_cost = sum(item_prices[item] for item in value)

if total_cost > 20:

raise ValueError(«Order total cannot exceed $20»)

return value

@classmethod

def pre_process(cls, data):

data[‘customer_name’] = data[‘customer_name’].capitalize()

if ‘special_notes’ in data:

data[‘special_notes’] = data[‘special_notes’].strip()

return data

order_data = {

«customer_name»«alien»,

«items»[«Burger», «Fries», «Soda»],

«special_notes»»   No onions «,

«delivery_address»{

«street»«123 Main St»,

«city»«pwd»,

«state»«CA»,

«zip_code»«12345»

}

}

# Process order

try:

order_data = Order.pre_process(order_data)

order = Order(**order_data)

print(«Order is valid:», order)

except ValueError as e:

print(«Invalid order:», str(e))

Освоение валидаторов Pydantic, выходящее за рамки основ, помогает нам уверенно решать сложные сценарии проверки. Библиотека может обрабатывать сложные структуры, интегрировать расширенную предварительную обработку и реализовывать настраиваемые валидаторы, что позволяет нам создавать мощные приложения, поддерживающие целостность данных и удовлетворенность пользователей. Экспериментируя с вложенными моделями, более подробными правилами проверки и расширенными вариантами проверки данных, мы улучшили свой опыт в использовании Pydantic в полной мере. Эти навыки улучшают наш текущий проект и позволяют нам работать с ценным набором навыков, применимым к различным областям разработки.

Заключение

Приобретение навыков работы с валидаторами Pydantic помогает нам быть уверенными в том, что наши данные верны и заслуживают доверия. Как и в примере с рестораном, мы можем использовать Pydantic, чтобы установить правила того, как должны выглядеть данные, и выявить ошибки. Мы можем создавать лучшие программы, изучая модели, пользовательские правила и расширенные функции. Итак, имеем ли мы дело с онлайн-заказами или какими-либо данными, Pydantic заботится о том, чтобы все работало правильно и пользователи были удовлетворены.

Читайте также:  Что такое мобильный SDK
Оцените статью
bestprogrammer.ru
Добавить комментарий