0
0
Djangoframework~5 mins

Creating custom middleware in Django

Choose your learning style9 modes available
Introduction

Middleware lets you add extra steps to handle web requests and responses. Custom middleware helps you add your own special rules or actions in your Django app.

You want to log every request made to your website.
You need to check user permissions before views run.
You want to modify response headers for all pages.
You want to measure how long each request takes.
You want to block certain IP addresses from accessing your site.
Syntax
Django
class MyMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # Code before view runs
        response = self.get_response(request)
        # Code after view runs
        return response

The __init__ method runs once when the server starts.

The __call__ method runs for each request.

Examples
This middleware prints the URL path of every request.
Django
class SimpleLogMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        print(f"Request path: {request.path}")
        response = self.get_response(request)
        return response
This middleware adds a custom header to every response.
Django
class AddHeaderMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        response["X-Custom-Header"] = "Hello"
        return response
Sample Program

This middleware measures how long each request takes and prints it in the console.

Django
import time

class TimerMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        start = time.time()
        response = self.get_response(request)
        duration = time.time() - start
        print(f"Request took {duration:.4f} seconds")
        return response
OutputSuccess
Important Notes

Always add your custom middleware class to the MIDDLEWARE list in settings.py.

Middleware runs in the order listed in MIDDLEWARE.

Be careful with code in middleware to avoid slowing down requests.

Summary

Middleware lets you run code before and after views.

Custom middleware is a class with __init__ and __call__ methods.

Add your middleware to MIDDLEWARE in settings to activate it.