Django Middleware – Complete

 What is Middleware?

Middleware is a special layer in Django that processes every request and response globally before or after the view is called.

It acts like a filter, gatekeeper or security guard in a web app.

🧠 Why is Middleware Important?

Task Done using Middleware
Block specific users
Auto login redirect
Theme (dark/light) toggle
Add info to response/request
Language / Location detection

⚙️ How Middleware Works in Django

Browser → Middleware → View → Middleware → Response → Browser



pip install django-ipware




✅ Step 1: Create Middleware File

πŸ“ Create middleware.py in your Django app (e.g., main/middleware.py)



from ipware import get_client_ip
from django.http import HttpResponse

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

    def __call__(self, request):
        ip, _ = get_client_ip(request)

        # Fake block: if IP starts with "172."
        if ip and ip.startswith("172."):
            return HttpResponse("❌ Access Blocked: Not allowed in your region.", status=403)

        # Otherwise continue
        response = self.get_response(request)
        return response




✅ Step 2: Add Middleware in settings.py

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.XFrameOptionsMiddleware',
    'main.middleware.BlockForeignMiddleware',
]



✅ Step 3: Create a Test View

πŸ“„ views.py


from django.shortcuts import render

# Create your views here.



from django.http import HttpResponse

def homepage(request):
    return HttpResponse("✅ Welcome! You are allowed to access this site.")



✅ Step 4: Add URL

πŸ“„ urls.py


from django.contrib import admin
from django.urls import path
from main.views import homepage

urlpatterns = [
    path('', homepage),
    path('admin/', admin.site.urls),
]

✅ Step 5: Run the Server


python manage.py runserver


Comments

Popular posts from this blog

Mastering Django: Project and App Folder Structure

Mastering Django Template Language (DTL): A Step-by-Step Guide

How to Add Templates in Django: Step-by-Step Guide