← Back to Tutorials
21. Response Model
from fastapi import FastAPI
from pydantic import BaseModel
from typing import Optional
app = FastAPI()
class ItemIn(BaseModel):
name: str
description: str = None
price: float
tax: float = None
internal_code: str # hidden from response
class ItemOut(BaseModel):
name: str
price: float
tax: float = None
@app.post("/items/", response_model=ItemOut)
def create_item(item: ItemIn):
return item # internal_code is filtered out
# response_model_exclude_unset
@app.get("/items/{id}", response_model=ItemOut, response_model_exclude_unset=True)
def get_item(id: int):
return {"name": "Item", "price": 10.0}
# response_model_include / exclude
@app.get("/items/", response_model=list[ItemOut])
def list_items():
return [{"name": "A", "price": 1.0}]
✏️ Exercise: Create In/Out models for a User. Input has password, output excludes password. Create a POST endpoint that returns only the safe fields.