Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Custom Middleware in Django

Introduction

Middleware is a way to process requests globally before they reach the view or after the view has processed them. Middleware components are executed in a defined order determined by the MIDDLEWARE setting in the Django project settings. In this tutorial, we will learn how to create custom middleware in Django.

Setting Up Your Django Project

Before we begin, make sure you have Django installed. You can create a new Django project using the following command:

django-admin startproject myproject

Navigate to your project directory:

cd myproject

Create a new Django app:

python manage.py startapp myapp

Creating Custom Middleware

In your Django app directory (myapp), create a file named middleware.py. This file will contain our custom middleware logic.

Open middleware.py and add the following code:

from django.utils.deprecation import MiddlewareMixin

class CustomMiddleware(MiddlewareMixin):
    def process_request(self, request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.
        print("Request intercepted by custom middleware")

    def process_response(self, request, response):
        # Code to be executed for each request/response after
        # the view is called.
        print("Response intercepted by custom middleware")
        return response

Adding Middleware to Settings

To activate your custom middleware, you need to add it to the MIDDLEWARE list in your project's settings.py file:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XContentOptionsMiddleware',
    'myapp.middleware.CustomMiddleware',  # Add the custom middleware here
]

Testing the Middleware

To test the middleware, run the Django development server:

python manage.py runserver

Open your browser and navigate to http://127.0.0.1:8000/. You should see the print statements from your custom middleware in the terminal where your server is running:

Request intercepted by custom middleware
Response intercepted by custom middleware

Advanced Middleware Features

You can further enhance your middleware by adding more complex logic. For instance, you can modify request headers, check for user authentication, or even alter the response content. Here is an example of middleware that checks if a user is authenticated:

from django.http import HttpResponse

class AuthenticationMiddleware(MiddlewareMixin):
    def process_request(self, request):
        if not request.user.is_authenticated:
            return HttpResponse("You are not authenticated", status=401)

Conclusion

Custom middleware in Django allows you to execute custom logic globally for every request and response. This can be useful for tasks such as logging, authentication, and request preprocessing. By following the steps in this tutorial, you should be able to create and integrate your own custom middleware into a Django project.