Bird
Raised Fist0
FastAPIframework~5 mins

Custom validators in FastAPI - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a custom validator in FastAPI?
A custom validator is a user-defined function or method that checks if data meets specific rules before processing. It helps ensure data is correct and safe.
Click to reveal answer
beginner
How do you create a custom validator using Pydantic in FastAPI?
You create a method decorated with @validator inside a Pydantic model class. This method receives the field value and returns the validated or transformed value.
Click to reveal answer
beginner
What is the purpose of the @validator decorator in FastAPI?
The @validator decorator marks a method as a custom validator for one or more fields in a Pydantic model. It runs automatically during data validation.
Click to reveal answer
intermediate
Can custom validators in FastAPI modify the input data? How?
Yes, custom validators can modify input data by returning a changed value. The returned value replaces the original field value during validation.
Click to reveal answer
intermediate
What happens if a custom validator raises a ValueError in FastAPI?
If a ValueError is raised inside a custom validator, FastAPI returns a clear error response to the client explaining the validation failure.
Click to reveal answer
Which decorator is used to create a custom validator in FastAPI's Pydantic models?
A@validator
B@validate
C@check
D@custom
What should a custom validator method return?
ANothing (void)
BAn error message string
CA boolean true or false
DThe validated or transformed value
If a custom validator raises a ValueError, what does FastAPI do?
AAutomatically fixes the data
BIgnores the error and continues
CReturns an error response to the client
DLogs the error but returns success
Where do you define custom validators in FastAPI?
AIn the main FastAPI app file
BInside Pydantic model classes
CIn the route function
DIn the database schema
Can a custom validator check multiple fields at once?
AYes, using <code>@root_validator</code>
BNo, only one field at a time
CYes, using <code>@multi_validator</code>
DNo, you must write separate validators
Explain how to create and use a custom validator in FastAPI with Pydantic models.
Think about how Pydantic models check data before FastAPI processes it.
You got /5 concepts.
    Describe what happens when a custom validator fails in FastAPI.
    Consider how FastAPI handles errors to keep data safe.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using @validator in FastAPI models?
      easy
      A. To connect the model to a database
      B. To automatically generate API documentation
      C. To add custom rules that check if input data is valid
      D. To style the API response format

      Solution

      1. Step 1: Understand the role of @validator

        The @validator decorator is used to add custom validation logic to model fields in FastAPI.
      2. Step 2: Identify the purpose of validation

        Validation ensures that the data meets specific rules before the app processes it, helping keep input correct and safe.
      3. Final Answer:

        To add custom rules that check if input data is valid -> Option C
      4. Quick Check:

        Custom validation = check input rules [OK]
      Hint: Validators check data rules before use [OK]
      Common Mistakes:
      • Confusing validators with database connectors
      • Thinking validators generate docs
      • Assuming validators change response style
      2. Which of the following is the correct way to define a custom validator for a Pydantic model field named age?
      easy
      A. @validator('age')\ndef check_age(cls, value):
      B. def validate_age(cls, value):
      C. @validate('age')\ndef age_validator(cls, value):
      D. @validate_field('age')\ndef age_check(cls, value):

      Solution

      1. Step 1: Recall the correct decorator syntax

        FastAPI uses Pydantic's @validator decorator with the field name as a string argument.
      2. Step 2: Match the function definition style

        The validator function must be a class method with parameters cls and value.
      3. Final Answer:

        @validator('age')\ndef check_age(cls, value): -> Option A
      4. Quick Check:

        Use @validator('field') with cls, value [OK]
      Hint: Use @validator('field') decorator for custom checks [OK]
      Common Mistakes:
      • Using @validate instead of @validator
      • Missing the field name in decorator
      • Wrong function parameters
      3. Given this code snippet, what will be the output if age is set to 15?
      from pydantic import BaseModel, validator
      
      class User(BaseModel):
          age: int
      
          @validator('age')
          def check_age(cls, value):
              if value < 18:
                  raise ValueError('Must be 18 or older')
              return value
      
      try:
          user = User(age=15)
      except Exception as e:
          print(e)
      medium
      A. Must be 18 or older
      B. TypeError because age is int
      C. User object with age 15 is created
      D. No output, code runs silently

      Solution

      1. Step 1: Analyze the validator logic

        The validator checks if age is less than 18 and raises a ValueError if true.
      2. Step 2: Check the input value

        Since age=15 is less than 18, the validator raises the error.
      3. Final Answer:

        Must be 18 or older -> Option A
      4. Quick Check:

        Age < 18 triggers ValueError [OK]
      Hint: Validator raises error if condition fails [OK]
      Common Mistakes:
      • Assuming object creates despite validation error
      • Confusing ValueError with TypeError
      • Ignoring the exception handling block
      4. Identify the error in this custom validator code:
      from pydantic import BaseModel, validator
      
      class Product(BaseModel):
          price: float
      
          @validator('price')
          def check_price(value):
              if value <= 0:
                  raise ValueError('Price must be positive')
              return value
      medium
      A. Validator method must return None
      B. Missing cls parameter in validator method
      C. Price field should be int, not float
      D. Validator decorator should be @validate

      Solution

      1. Step 1: Check validator method signature

        Validator methods must accept cls as the first parameter, then value.
      2. Step 2: Identify missing parameter

        The method check_price only has value, missing cls.
      3. Final Answer:

        Missing cls parameter in validator method -> Option B
      4. Quick Check:

        Validator needs cls, value parameters [OK]
      Hint: Validator methods need cls first, then value [OK]
      Common Mistakes:
      • Omitting cls parameter
      • Using wrong decorator name
      • Returning None instead of value
      5. You want to create a custom validator that ensures a username is lowercase and at least 3 characters long. Which code correctly implements this in a FastAPI Pydantic model?
      from pydantic import BaseModel, validator
      
      class User(BaseModel):
          username: str
      
          @validator('username')
          def validate_username(cls, value):
              # Fill in validation logic here
              pass
      hard
      A. if len(value) < 3 and not value.islower():\n raise ValueError('Username must be lowercase and 3+ chars')\nreturn value
      B. if len(value) < 3 and value.islower():\n raise ValueError('Username too short')\nreturn value
      C. if len(value) > 3 and value.islower():\n return value\nelse:\n raise ValueError('Invalid username')
      D. if value.islower() and len(value) >= 3:\n return value\nraise ValueError('Username invalid')

      Solution

      1. Step 1: Understand validation requirements

        The username must be lowercase and at least 3 characters long.
      2. Step 2: Check each option logic

        if value.islower() and len(value) >= 3:\n return value\nraise ValueError('Username invalid') correctly checks both conditions and raises error if not met, returning value otherwise.
      3. Final Answer:

        if value.islower() and len(value) >= 3:\n return value\nraise ValueError('Username invalid') -> Option D
      4. Quick Check:

        Check both conditions, raise error if false [OK]
      Hint: Check all conditions with 'and', raise error if false [OK]
      Common Mistakes:
      • Using 'or' instead of 'and' causing wrong logic
      • Returning value inside else but missing return in if
      • Incorrect length comparison operators
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard