0
0
Djangoframework~20 mins

Creating custom middleware in Django - Practice Exercises

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Middleware Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this custom middleware modifying response headers?
Consider this Django middleware that adds a custom header to every response. What will be the value of the X-Custom-Header in the HTTP response?
Django
class CustomHeaderMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        response["X-Custom-Header"] = "MiddlewareActive"
        return response
A"MiddlewareActive"
BHeader will not be present
C"CustomHeader"
DRaises AttributeError
Attempts:
2 left
💡 Hint
Think about how the middleware modifies the response object before returning it.
lifecycle
intermediate
1:30remaining
At which point in the request lifecycle is the process_view middleware method called?
In Django middleware, when is the process_view method executed?
AAfter the response is returned
BBefore the view function is called, after URL resolution
CBefore URL resolution
DAfter the view function is called
Attempts:
2 left
💡 Hint
Think about when Django knows which view will handle the request.
📝 Syntax
advanced
2:30remaining
Which middleware class definition correctly implements __init__ and __call__ methods?
Select the option that correctly defines a Django middleware class with proper __init__ and __call__ methods.
A
class MyMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
    def __call__(self):
        response = self.get_response()
        return response
B
class MyMiddleware:
    def __call__(self, get_response):
        self.get_response = get_response
    def __init__(self, request):
        response = self.get_response(request)
        return response
C
class MyMiddleware:
    def __init__(self):
        pass
    def __call__(self, request, get_response):
        response = get_response(request)
        return response
D
class MyMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
    def __call__(self, request):
        response = self.get_response(request)
        return response
Attempts:
2 left
💡 Hint
Remember the middleware class must accept get_response in __init__ and request in __call__.
🔧 Debug
advanced
2:00remaining
Why does this middleware raise an AttributeError?
Given this middleware code, why does it raise an AttributeError when processing a request?
Django
class FaultyMiddleware:
    def __init__(self, get_response):
        pass

    def __call__(self, request):
        response = self.get_response(request)
        return response
ABecause __init__ should not accept get_response parameter
BBecause __call__ method is missing the request parameter
CBecause self.get_response is not assigned in __init__, so calling it raises AttributeError
DBecause the middleware must return a string, not a response object
Attempts:
2 left
💡 Hint
Check if all attributes used in __call__ are properly set in __init__.
state_output
expert
3:00remaining
What is the final value of request.custom_flag after this middleware stack runs?
Two middlewares modify request.custom_flag. What is its value after both run?
Django
class MiddlewareOne:
    def __init__(self, get_response):
        self.get_response = get_response
    def __call__(self, request):
        request.custom_flag = True
        response = self.get_response(request)
        return response

class MiddlewareTwo:
    def __init__(self, get_response):
        self.get_response = get_response
    def __call__(self, request):
        if hasattr(request, 'custom_flag') and request.custom_flag:
            request.custom_flag = False
        response = self.get_response(request)
        return response

# Assume MiddlewareOne is listed before MiddlewareTwo in MIDDLEWARE setting
AFalse
BTrue
CAttributeError because custom_flag is missing
DNone
Attempts:
2 left
💡 Hint
Remember middleware runs in order on request, reverse order on response.