📊 Capítulo 02: Pydantic v2 & Validação de Dados
Especialização Backend com Python & FastAPI
🗺️ O Ciclo de Vida dos Dados no Pydantic v2
flowchart LR
RAW["JSON Bruto de Entrada"]
--> CORE["pydantic-core (Motor em Rust)"]
--> PARSE["Parsing & Type Coercion"]
--> VALID["@field_validator / @model_validator"]
--> INSTANCE["Instância Válida de BaseModel"]
--> SER["model_dump() / model_dump_json()"]
style RAW fill:#ede7f6,stroke:#512da8,stroke-width:2px
style CORE fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style PARSE fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
style VALID fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style INSTANCE fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px
style SER fill:#e0f2f1,stroke:#00897b,stroke-width:1.5px
🎯 Slide 1: Pydantic v1 vs Pydantic v2 (O Grande Salto)
-
Motor Reescrito em Rust (
pydantic-core): Validação de 5x a 50x mais rápida. - Mudança de Métodos:
.dict()$\to$model_dump()..json()$\to$model_dump_json().-
.parse_obj()$\to$model_validate().
- ConfigDict: Substitui a classe aninhada
class Config.
🎯 Slide 2: Anotações de Validação com Field
from pydantic import BaseModel, EmailStr, Field
class UsuarioCreateSchema(BaseModel):
nome: str = Field(min_length=3, max_length=100, description="Nome completo")
email: EmailStr
idade: int = Field(gt=0, le=120, default=18)
preco: float = Field(gt=0.0, examples=[49.90])
- Gera schemas OpenAPI e Swagger automaticamente com exemplos e restrições!
🎯 Slide 3: Validadores Customizados (@field_validator & @model_validator)
from pydantic import field_validator, model_validator
class RegistroSchema(BaseModel):
senha: str
confirmacao_senha: str
@field_validator('senha')
@classmethod
def validar_complexidade(cls, v: str) -> str:
if len(v) < 8:
raise ValueError('A senha deve ter no mínimo 8 caracteres')
return v
@model_validator(mode='after')
def checar_senhas_iguais(self):
if self.senha != self.confirmacao_senha:
raise ValueError('Senhas não conferem')
return self
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim