What are Pydantic Models?

Pydantic models use Python type annotations to validate data. FastAPI uses them to automatically validate request and response data, generate documentation, and convert data types.

Basic Model

Create a simple model:

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float
    description: str = None  # Optional field

Field Validation

Add validation to fields:

from pydantic import BaseModel, Field

class User(BaseModel):
    name: str = Field(..., min_length=1, max_length=100)
    email: str = Field(..., regex=r'^[^@]+@[^@]+\.[^@]+$')
    age: int = Field(..., ge=0, le=120)  # Greater/less than or equal

Optional and Required Fields

Define optional fields:

from typing import Optional

class Item(BaseModel):
    name: str                    # Required
    price: float                 # Required
    description: Optional[str] = None  # Optional
    tags: list[str] = []         # Default value

Using Models in Routes

Use models for request/response:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float

@app.post("/items/")
def create_item(item: Item):  # Request body
    return item  # Response body

@app.get("/items/{item_id}", response_model=Item)
def get_item(item_id: int):
    return Item(name="Product", price=19.99)

Nested Models

Use models within models:

class Address(BaseModel):
    street: str
    city: str
    zip_code: str

class User(BaseModel):
    name: str
    email: str
    address: Address  # Nested model

Model Methods

Add methods to models:

class Item(BaseModel):
    name: str
    price: float
    quantity: int = 1
    
    @property
    def total(self):
        return self.price * self.quantity
    
    def apply_discount(self, percent: float):
        self.price *= (1 - percent / 100)

Best Practices

  • Use type hints: Enable automatic validation
  • Add validation: Use Field() for constraints
  • Document models: Add docstrings for clarity
  • Reuse models: Create base models for common fields

Next Steps

Learn about FastAPI routes or dependencies.