Custom request validation in FastAPI means writing your own rules to check if the data sent by the user is correct before using it in your app.
Click to reveal answer
intermediate
How do you create a custom validator for a request field in FastAPI?
You create a Pydantic model and use the @validator decorator on a method to add your own checks for a field's value.
Click to reveal answer
beginner
What happens if custom validation fails in FastAPI?
FastAPI automatically returns a clear error message with status code 422 to the user, showing what went wrong.
Click to reveal answer
intermediate
Why use custom request validation instead of only relying on built-in types?
Built-in types check basic things like type and length, but custom validation lets you check complex rules like format, ranges, or relationships between fields.
Click to reveal answer
beginner
Show a simple example of a custom validator in FastAPI using Pydantic.
from pydantic import BaseModel, validator
class User(BaseModel):
name: str
age: int
@validator('age')
def age_must_be_positive(cls, v):
if v <= 0:
raise ValueError('Age must be positive')
return v
Click to reveal answer
What decorator is used to add custom validation logic to a Pydantic model field?
A@field_validator
B@validator
C@check
D@validate
✗ Incorrect
The @validator decorator is used in Pydantic models to add custom validation for fields.
If a custom validation fails in FastAPI, what HTTP status code is returned by default?
A200
B400
C422
D500
✗ Incorrect
FastAPI returns status code 422 Unprocessable Entity when validation fails.
Which library does FastAPI use for request data validation?
APydantic
BMarshmallow
CCerberus
DVoluptuous
✗ Incorrect
FastAPI uses Pydantic for data validation and settings management.
What is a benefit of custom request validation in FastAPI?
AIt allows checking complex rules beyond simple types
BIt makes the app slower
CIt removes the need for type hints
DIt disables automatic error messages
✗ Incorrect
Custom validation lets you enforce complex rules that built-in types cannot check.
Where do you define custom validation logic in FastAPI?
AIn database models
BInside route functions
CIn middleware
DIn Pydantic model classes
✗ Incorrect
Custom validation logic is defined inside Pydantic model classes using validators.
Explain how to add a custom validation rule for a request field in FastAPI using Pydantic.
Think about how Pydantic models handle validation.
You got /4 concepts.
Describe what happens when a request fails custom validation in FastAPI.
Consider the user experience when sending bad data.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of custom request validation in FastAPI?
easy
A. To handle database connections
B. To speed up the API response time
C. To check and enforce rules on incoming data before processing
D. To automatically generate API documentation
Solution
Step 1: Understand the role of validation
Validation ensures data meets expected rules before using it.
Step 2: Identify FastAPI's validation purpose
FastAPI uses validation to keep data clean and safe, preventing bad data.
Final Answer:
To check and enforce rules on incoming data before processing -> Option C
Quick Check:
Validation = Data rules check [OK]
Hint: Validation means checking data correctness before use [OK]
Common Mistakes:
Confusing validation with performance optimization
Thinking validation manages database connections
Mixing validation with documentation generation
2. Which of the following is the correct way to add a custom validator in a Pydantic model for FastAPI?
easy
A. Override the __init__ method of the model
B. Use @validator decorator inside the model class
C. Add a method named validate() outside the model
D. Use @app.validator decorator in the FastAPI app
Solution
Step 1: Recall Pydantic validation method
Pydantic uses @validator decorator inside model classes for custom checks.
Step 2: Check other options
Overriding __init__ or external validate() methods are not standard; @app.validator does not exist.
Final Answer:
Use @validator decorator inside the model class -> Option B
Quick Check:
@validator = Custom check inside model [OK]
Hint: Custom validators use @validator inside Pydantic models [OK]
Common Mistakes:
Trying to override __init__ for validation
Using decorators outside the model class
Confusing FastAPI app decorators with Pydantic validators
3. Given this Pydantic model with a custom validator:
from pydantic import BaseModel, validator
class User(BaseModel):
age: int
@validator('age')
def age_must_be_positive(cls, v):
if v <= 0:
raise ValueError('Age must be positive')
return v
What happens if a request sends {"age": -5} to a FastAPI endpoint using this model?
medium
A. The endpoint accepts the data and processes it
B. FastAPI ignores the validator and accepts the data
C. The server crashes with an unhandled exception
D. FastAPI returns a 422 error with validation details
Solution
Step 1: Understand the validator logic
The validator raises ValueError if age is not positive.
Step 2: Know FastAPI's error handling
FastAPI catches validation errors and returns a 422 response with details.
Final Answer:
FastAPI returns a 422 error with validation details -> Option D
Quick Check:
Invalid data triggers 422 error [OK]
Hint: Invalid data triggers 422 error in FastAPI [OK]
Common Mistakes:
Assuming server crashes on validation error
Thinking FastAPI accepts invalid data silently
Confusing 422 with 500 server error
4. Identify the error in this FastAPI custom validation code:
from pydantic import BaseModel, validator
class Item(BaseModel):
price: float
@validator('price')
def check_price(cls, value):
if value < 0:
return ValueError('Price must be non-negative')
return value
medium
A. The validator should raise ValueError, not return it
B. The validator must be a staticmethod, not classmethod
C. The field price should be an int, not float
D. The validator name must start with 'validate_'
Solution
Step 1: Check validator error handling
Validators must raise exceptions, not return them.
Step 2: Verify other parts
Validator is correctly a classmethod; price type float is valid; no naming rule requires 'validate_' prefix.
Final Answer:
The validator should raise ValueError, not return it -> Option A
Quick Check:
Raise errors in validators, don't return [OK]
Hint: Raise exceptions in validators, don't return them [OK]
Common Mistakes:
Returning exceptions instead of raising
Confusing @validator with staticmethod
Changing field types unnecessarily
5. You want to validate a request body in FastAPI where a user can submit either an email or a phone number, but not both. How can you implement this custom validation in a Pydantic model?
hard
A. Use a root_validator to check that exactly one of email or phone is provided
B. Add separate @validator for email and phone fields to check presence
C. Use FastAPI dependency to validate after model parsing
D. Make both fields required and let FastAPI handle conflicts automatically
Solution
Step 1: Understand the validation requirement
We need to ensure exactly one of two fields is present, a cross-field check.
Step 2: Choose validation method
root_validator runs after all fields are parsed and can check multiple fields together.
Step 3: Evaluate other options
Field validators cannot check other fields; dependency validation is after parsing; making both required contradicts the rule.
Final Answer:
Use a root_validator to check that exactly one of email or phone is provided -> Option A
Quick Check:
Cross-field checks use root_validator [OK]
Hint: Use root_validator for checks involving multiple fields [OK]
Common Mistakes:
Trying to check multiple fields in single field validators
Relying on FastAPI dependencies for core validation
Making both fields required when only one should be
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.