Middleware runs in the order listed in settings.MIDDLEWARE.
Middleware can change requests and responses, so use it carefully.
Always return the response object from your middleware.
Summary
Middleware lets you add code before and after views run.
It helps with tasks like logging, security, and modifying responses.
Middleware makes your Django app easier to manage and extend.
Practice
(1/5)
1. What is the main purpose of middleware in a Django application?
easy
A. To process requests and responses globally before reaching views
B. To define database models and relationships
C. To create HTML templates for rendering pages
D. To handle user authentication only
Solution
Step 1: Understand middleware role
Middleware acts on requests and responses before and after views run.
Step 2: Compare options to middleware function
Only To process requests and responses globally before reaching views describes processing requests and responses globally, which matches middleware's purpose.
Final Answer:
To process requests and responses globally before reaching views -> Option A
Quick Check:
Middleware = global request/response processing [OK]
Hint: Middleware acts on requests/responses before views [OK]
Common Mistakes:
Confusing middleware with models or templates
Thinking middleware only handles authentication
Assuming middleware runs after views only
2. Which of the following is the correct way to add a custom middleware class in Django's settings?
easy
A. Add 'myapp.middleware.MyMiddleware' to TEMPLATES list
B. Add 'myapp.middleware.MyMiddleware' to MIDDLEWARE list in settings.py
C. Add 'myapp.middleware.MyMiddleware' to INSTALLED_APPS list
D. Add 'myapp.middleware.MyMiddleware' to DATABASES dictionary
Solution
Step 1: Identify where middleware is configured
Django uses the MIDDLEWARE list in settings.py to register middleware classes.
Step 2: Match the correct setting for middleware
Only Add 'myapp.middleware.MyMiddleware' to MIDDLEWARE list in settings.py correctly adds the middleware class path to the MIDDLEWARE list.
Final Answer:
Add 'myapp.middleware.MyMiddleware' to MIDDLEWARE list in settings.py -> Option B
Quick Check:
Middleware goes in MIDDLEWARE list [OK]
Hint: Middleware classes go in MIDDLEWARE list, not INSTALLED_APPS [OK]
Common Mistakes:
Adding middleware to INSTALLED_APPS instead of MIDDLEWARE
Placing middleware in TEMPLATES or DATABASES settings
Using incorrect string format for middleware path
3. Given this middleware code snippet, what will be printed when a request is processed?
A. Middleware classes must inherit from a base class
B. The __call__ method should not return anything
C. The __init__ method does not save get_response, causing AttributeError
D. The __init__ method should not have parameters
Solution
Step 1: Check __init__ method implementation
The __init__ method ignores get_response and does not save it as self.get_response.
Step 2: Understand __call__ method usage
__call__ tries to call self.get_response, but it does not exist, causing an AttributeError.
Final Answer:
The __init__ method does not save get_response, causing AttributeError -> Option C
Quick Check:
Save get_response in __init__ to avoid errors [OK]
Hint: Always save get_response in __init__ as self.get_response [OK]
Common Mistakes:
Not storing get_response in __init__
Assuming __call__ doesn't need to return response
Thinking middleware must inherit from a base class
5. You want to create middleware that adds a custom header X-App-Version with value 1.0 to every response. Which code snippet correctly implements this?