Introduction
Define data models with Pydantic for request/response validation.
Pydantic Models
from pydantic import BaseModel, Field, EmailStr
class UserBase(BaseModel):
email: EmailStr
username: str = Field(..., min_length=3, max_length=50)
class UserCreate(UserBase):
password: str = Field(..., min_length=8)
class User(UserBase):
id: int
is_active: bool = True
class Config:
from_attributes = True
class UserUpdate(BaseModel):
email: EmailStr | None = None
password: str | None = None
Nested Models
class Address(BaseModel):
street: str
city: str
country: str
class UserWithAddress(UserBase):
addresses: list[Address] = []
class Order(BaseModel):
items: list[Item]
total: float
File Uploads
from fastapi import File, UploadFile
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
contents = await file.read()
return {"filename": file.filename, "size": len(contents)}
Practice Problems
- Create nested Pydantic models
- Add field validation
- Handle file uploads
- Use optional fields
- Convert between models