Master Pydantic V3 – the most powerful data validation & serialization library for Python in 2026.
# Recommended (with email validator & strict types)
pip install "pydantic[email,strict]"
# Or minimal
pip install pydantic
from pydantic import BaseModel, Field
from datetime import date
from typing import Optional
class User(BaseModel):
id: int = Field(..., gt=0, description="Unique user ID")
name: str = Field(min_length=2, max_length=50)
email: str
is_active: bool = True
birth_date: Optional[date] = None
model_config = {
"str_strip_whitespace": True,
"frozen": False,
}
user = User(id=1, name="Alice", email="alice@example.com")
print(user.model_dump())
from pydantic import BaseModel, field_validator, ValidationError
class User(BaseModel):
password: str
@field_validator("password")
@classmethod
def validate_password(cls, v: str) -> str:
if len(v) < 8:
raise ValueError("Password must be at least 8 characters")
if not any(c.isupper() for c in v):
raise ValueError("Password must contain uppercase letter")
return v
try:
User(password="weak")
except ValidationError as e:
print(e.errors())
from typing import Annotated
from pydantic import AfterValidator, BaseModel
def strip_whitespace(v: str) -> str:
return v.strip()
Username = Annotated[str, AfterValidator(strip_whitespace)]
class User(BaseModel):
username: Username
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float = Field(gt=0)
@app.post("/items/")
async def create_item(item: Item):
return item
Automatic validation, OpenAPI docs, and serialization — all powered by Pydantic V3.
model_config instead of class Configorm_mode with from_attributes=True@field_validator