Вопрос проверяет знание методов и инструментов для проверки корректности входных данных в Python-приложениях, что необходимо для обеспечения целостности и безопасности приложения.
Валидация данных — это процесс проверки, что входные данные соответствуют ожидаемым форматам, типам и бизнес-правилам перед их использованием в логике приложения. Это критически важно для предотвращения ошибок, обеспечения безопасности (например, инъекций) и поддержания целостности данных.
Пример с Pydantic, который использует аннотации типов Python для валидации и сериализации:
from pydantic import BaseModel, ValidationError, validator
from typing import List
class User(BaseModel):
id: int
name: str
email: str
age: int
tags: List[str] = []
@validator('age')
def check_age(cls, v):
if v < 0:
raise ValueError('Age must be non-negative')
return v
# Валидация при создании экземпляра
try:
user = User(id=1, name="Alice", email="alice@example.com", age=25)
print(user.json())
except ValidationError as e:
print(e.json())Пример ручной валидации для простого случая:
def validate_user_input(data: dict) -> bool:
if not isinstance(data.get('name'), str) or len(data['name']) == 0:
return False
if not isinstance(data.get('age'), int) or data['age'] < 0:
return False
# Проверка email через регулярное выражение
import re
email_regex = r'^[\w\.-]+@[\w\.-]+\.\w+$'
if not re.match(email_regex, data.get('email', '')):
return False
return TrueВывод: Используйте ручную валидацию или простые проверки для тривиальных случаев. Для сложных структур данных, особенно в веб-API и приложениях с сериализацией, предпочтительнее использовать библиотеки типа Pydantic или инструменты фреймворка, так как они обеспечивают декларативный синтаксис, повторное использование и лучшую поддержку типов.