Bird
Raised Fist0
Djangoframework~5 mins

Per-view caching in Django - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is per-view caching in Django?
Per-view caching stores the output of a specific view so that future requests to that view return the cached response quickly without re-running the view code.
Click to reveal answer
beginner
How do you enable per-view caching in Django?
You use the decorator @cache_page(timeout) on a view function or method, where timeout is the cache duration in seconds.
Click to reveal answer
beginner
What does the timeout parameter in @cache_page(timeout) control?
It controls how long the cached response is stored before it expires and the view runs again to refresh the cache.
Click to reveal answer
beginner
Can per-view caching improve website speed? How?
Yes. It saves the result of a view so Django can quickly return the cached page without running database queries or complex logic again.
Click to reveal answer
intermediate
What is a limitation of per-view caching?
It caches the entire response for all users, so it may not work well for views that show user-specific data unless you customize the cache key.
Click to reveal answer
Which decorator is used for per-view caching in Django?
A@cached_view
B@cache_response
C@cache_page
D@view_cache
What does the timeout value in @cache_page(timeout) represent?
ANumber of users cached
BNumber of cached views
CCache size in MB
DCache duration in seconds
What happens when a cached view expires in Django?
AThe view runs again and caches new output
BThe cache is deleted permanently
CThe server restarts
DThe user is redirected
Which type of data is NOT ideal for per-view caching?
AFrequently accessed pages
BUser-specific data
CPublic pages
DStatic content
Where do you import the @cache_page decorator from?
Adjango.views.decorators.cache
Bdjango.cache.decorators
Cdjango.utils.cache
Ddjango.views.cache
Explain how to add per-view caching to a Django view and why it helps performance.
Think about how caching saves time by reusing previous results.
You got /4 concepts.
    Describe a scenario where per-view caching might cause problems and how to handle it.
    Think about when different users need different pages.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using @cache_page(timeout) in Django views?
      easy
      A. To connect the view to the database
      B. To save the view's output and speed up repeated visits
      C. To validate user input before processing
      D. To handle user authentication automatically

      Solution

      1. Step 1: Understand what caching does

        Caching stores the output of a view so it can be reused without recalculating.
      2. Step 2: Recognize the role of @cache_page(timeout)

        This decorator saves the rendered page for the given timeout to speed up future requests.
      3. Final Answer:

        To save the view's output and speed up repeated visits -> Option B
      4. Quick Check:

        Per-view caching = save output for speed [OK]
      Hint: Caching saves page output to speed up repeated visits [OK]
      Common Mistakes:
      • Thinking it validates input
      • Confusing caching with authentication
      • Assuming it connects to the database
      2. Which of the following is the correct way to apply per-view caching with a 5-minute timeout in Django?
      easy
      A. @cache_page('300') def my_view(request): pass
      B. @cache_page(5) def my_view(request): pass
      C. @cache_page(timeout=5) def my_view(request): pass
      D. @cache_page(300) def my_view(request): pass

      Solution

      1. Step 1: Understand the timeout parameter

        The timeout is in seconds, so 5 minutes = 300 seconds.
      2. Step 2: Check correct syntax for @cache_page

        The decorator takes an integer timeout in seconds without quotes.
      3. Final Answer:

        @cache_page(300)\ndef my_view(request):\n pass -> Option D
      4. Quick Check:

        Timeout in seconds, no quotes = @cache_page(300) def my_view(request): pass [OK]
      Hint: Timeout is seconds as integer, no quotes [OK]
      Common Mistakes:
      • Using string '300' instead of integer
      • Passing timeout as minutes instead of seconds
      • Using keyword argument timeout incorrectly
      3. Given this Django view with per-view caching:
      @cache_page(60)
      def home(request):
          return HttpResponse(str(time.time()))

      What will happen if you refresh the page multiple times within 60 seconds?
      medium
      A. The page shows the same timestamp for 60 seconds
      B. The page shows a new timestamp on every refresh
      C. The page raises an error because time.time() is not cached
      D. The page shows timestamps increasing by 60 seconds

      Solution

      1. Step 1: Understand what @cache_page(60) does

        It caches the entire response for 60 seconds.
      2. Step 2: Analyze the effect on time.time()

        Since the response is cached, the timestamp won't update until cache expires.
      3. Final Answer:

        The page shows the same timestamp for 60 seconds -> Option A
      4. Quick Check:

        Cache holds output unchanged for timeout [OK]
      Hint: Cached view returns same output until timeout expires [OK]
      Common Mistakes:
      • Expecting timestamp to update every refresh
      • Thinking caching only affects database queries
      • Assuming cache raises errors with dynamic content
      4. You wrote this Django view with caching:
      from django.views.decorators.cache import cache_page
      
      @cache_page('60')
      def about(request):
          return HttpResponse('About page')

      Why does this code cause an error?
      medium
      A. The timeout value is a string instead of an integer
      B. The decorator is missing parentheses
      C. The view function must be a class-based view
      D. The import statement is incorrect

      Solution

      1. Step 1: Check the timeout argument type

        The timeout must be an integer number of seconds, not a string.
      2. Step 2: Identify the error cause

        Passing '60' as a string causes a TypeError in the decorator.
      3. Final Answer:

        The timeout value is a string instead of an integer -> Option A
      4. Quick Check:

        Timeout must be int, not string [OK]
      Hint: Timeout must be integer, not string [OK]
      Common Mistakes:
      • Using quotes around timeout number
      • Forgetting parentheses on decorator
      • Thinking function type matters here
      5. You want to cache a Django view that shows user-specific data but still use per-view caching. Which approach correctly applies caching without showing wrong data to users?
      hard
      A. Cache the view globally and add user ID in the URL to separate cache keys
      B. Use @cache_page(120) without changes; caching will separate users automatically
      C. Use @cache_page(120) and add Vary: Cookie header to cache per user session
      D. Do not use caching on user-specific views at all

      Solution

      1. Step 1: Understand caching user-specific data risks

        Global caching can show one user's data to others if not separated.
      2. Step 2: Use Vary header to separate cache by user session

        Adding Vary: Cookie tells cache to store different versions per user session cookie.
      3. Final Answer:

        Use @cache_page(120) and add Vary: Cookie header to cache per user session -> Option C
      4. Quick Check:

        Vary header separates cache by user [OK]
      Hint: Use Vary header to separate cache per user [OK]
      Common Mistakes:
      • Assuming caching separates users automatically
      • Avoiding caching user views unnecessarily
      • Adding user ID in URL without proper cache keys