response_model controls what data is returned in API responses.
1from fastapi import FastAPI2from pydantic import BaseModel, EmailStr3from typing import Optional45app = FastAPI()67# Models8class UserCreate(BaseModel):9 name: str10 email: EmailStr11 password: str # Should not be in response!1213class UserResponse(BaseModel):14 id: int15 name: str16 email: EmailStr17 is_active: bool1819 class Config:20 orm_mode = True2122# Use response_model to filter output23@app.post("/users/", response_model=UserResponse)24async def create_user(user: UserCreate):25 db_user = create_user_in_db(user)26 return db_user # Only UserResponse fields returned2728# List response29@app.get("/users/", response_model=list[UserResponse])30async def get_users():31 return User.objects.all()3233# Filtering response34@app.get("/users/{user_id}", response_model=UserResponse)35async def get_user(user_id: int):36 user = get_user_or_404(user_id)37 return user3839# Exclude_unset — only return set fields40@app.put("/users/{user_id}", response_model=UserResponse)41async def update_user(42 user_id: int,43 user: UserCreate,44):45 updated = update_user_in_db(user_id, user)46 return updated
Benefits: