Response Configuration¶
Decorators and parameters for response handling.
response_model¶
response_model: Type[BaseModel] = None
Declares the response model for a route. Validates and serializes responses.
Example:
from pydantic import BaseModel
from typing import List
class Item(BaseModel):
id: int
name: str
price: float
@app.get("/items", response_model=List[Item])
def list_items():
return [
{"id": 1, "name": "Item 1", "price": 9.99},
{"id": 2, "name": "Item 2", "price": 19.99}
]
status_code¶
status_code: int = None
Sets the HTTP status code for successful responses.
Example:
@app.post("/items", status_code=201)
def create_item(item: Item):
return item
response_description¶
response_description: str = None
Sets the description of the response in OpenAPI documentation.
Example:
@app.get("/items", response_description="List of all items")
def list_items():
return []
validate_response¶
validate_response: bool = True
Enables or disables response validation. Default is True.
Example:
@app.get("/fast", validate_response=False)
def fast_endpoint():
# Response is not validated
return {"data": "..."}
Disable this only if you’re sure about response correctness and need to skip validation overhead.
Configuring Response Serialization¶
Use Pydantic’s model configuration to control serialization.
by_alias¶
class Item(BaseModel):
internal_id: int = Field(alias="id")
model_config = ConfigDict(by_alias=True)
Serializes fields using their aliases.
exclude_none¶
class Item(BaseModel):
name: str
description: str = None
model_config = ConfigDict(exclude_none=True)
Excludes fields with None values from the response.
exclude_unset¶
class Item(BaseModel):
name: str
description: str = "Default"
model_config = ConfigDict(exclude_unset=True)
Excludes fields that were not explicitly set.
Field Serialization¶
Control how individual fields serialize.
alias¶
from pydantic import Field
class Item(BaseModel):
internal_id: int = Field(alias="id")
Uses a different name in the JSON response.
serialization_alias¶
from pydantic import Field
class Item(BaseModel):
internal_id: int = Field(
validation_alias="internalId",
serialization_alias="id"
)
Uses different names for validation and serialization.
field_serializer¶
from pydantic import field_serializer
class Item(BaseModel):
price: float
@field_serializer('price')
def serialize_price(self, value: float) -> str:
return f"${value:.2f}"
Custom serialization logic for a field.