0
0
FastAPIframework~10 mins

Custom validation with validator decorator in FastAPI - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - Custom validation with validator decorator
Define Pydantic Model
Add @validator Decorator
Write Validation Function
Create Model Instance
Trigger Validation
Accept
This flow shows how a Pydantic model uses a @validator decorator to check data when creating an instance, accepting valid data or raising errors for invalid.
Execution Sample
FastAPI
from pydantic import BaseModel, validator

class User(BaseModel):
    name: str

    @validator('name')
    def name_must_not_be_empty(cls, v):
        if not v.strip():
            raise ValueError('Name cannot be empty')
        return v
Defines a User model with a custom validator to ensure the name is not empty or just spaces.
Execution Table
StepActionInput ValueValidation CheckResult
1Create User with name='Alice''Alice'Check if name is emptyPass, name='Alice' accepted
2Create User with name=' '' 'Check if name is emptyFail, raises ValueError 'Name cannot be empty'
3Create User with name='Bob''Bob'Check if name is emptyPass, name='Bob' accepted
4Create User with name=''''Check if name is emptyFail, raises ValueError 'Name cannot be empty'
💡 Validation stops on first failure; valid names pass through.
Variable Tracker
VariableStartAfter 1After 2After 3After 4
nameundefined'Alice'' ''Bob'''
Key Moments - 2 Insights
Why does the validator raise an error when the name is only spaces?
Because the validator uses v.strip() to remove spaces and checks if the result is empty. In execution_table row 2, the input ' ' becomes empty after strip, triggering the error.
What happens if the validator returns the value without raising an error?
The value passes validation and is accepted as shown in execution_table rows 1 and 3 where valid names are returned.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the result when creating a User with name=' '?
APass, name accepted
BPass, but name is trimmed
CFail, raises ValueError 'Name cannot be empty'
DNo validation occurs
💡 Hint
See execution_table row 2 where input ' ' fails validation.
At which step does the validation pass successfully for the name 'Bob'?
AStep 2
BStep 3
CStep 1
DStep 4
💡 Hint
Check execution_table row 3 for name='Bob' passing validation.
If the validator did not strip spaces, what would happen for input ' '?
AIt would pass validation
BIt would raise an error
CIt would trim spaces automatically
DIt would convert to None
💡 Hint
Consider how v.strip() affects validation in the code and execution_table row 2.
Concept Snapshot
Use @validator decorator in Pydantic models to add custom checks.
Define a method with cls and value parameters.
Raise ValueError to reject invalid data.
Return the value if valid.
Validation runs when creating model instances.
Full Transcript
This example shows how to add custom validation to a Pydantic model using the @validator decorator. The User model has a name field. The validator method name_must_not_be_empty checks if the name is empty or only spaces by stripping whitespace. If empty, it raises a ValueError with a message. When creating User instances, the validator runs automatically. Valid names like 'Alice' and 'Bob' pass and are accepted. Names that are empty or just spaces cause a validation error. This helps ensure data quality before using the model.