Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created February 26, 2026 12:50
Show Gist options
  • Select an option

  • Save sunmeat/3ac98bfd05028737522557e24b55a80b to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/3ac98bfd05028737522557e24b55a80b to your computer and use it in GitHub Desktop.
кастомні мідлварі в джанго
1) створити папку middleware на одному рівні з manage.py
2) покласти в цю папку файл custom.py з таким вмістом:
import time
from django.http import HttpResponse
# функціональний middleware — логування запитів
def log_requests(get_response):
"""Логує кожен запит: метод, шлях, час виконання, статус відповіді"""
def middleware(request):
start_time = time.time()
# тут можна щось додати до request, наприклад
# request.custom_info = "Цей рядок доданий в middleware!"
response = get_response(request)
# після обробки view
duration = time.time() - start_time
status = response.status_code
# друкуємо в консоль (можна замінити на логування в файл)
print(f"[{status}] {request.method} {request.path} — {duration:.3f} секунд. Привіт із мідлварі!")
return response
return middleware
# класовий middleware — додає кастомний заголовок до всіх відповідей
class CustomHeaderMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
# додаємо свій заголовок (можна будь-яку логіку)
response['X-Powered-By'] = 'Sunmeat 26/02/2026'
response['X-Company-Name'] = 'Sunmeat Inc.'
return response
========================================================================================================
3) додати в список мідлварєй company_site / 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',
# кастомні middleware (порядок важливий!)
'middleware.custom.log_requests', # функціональна мідлварь
'middleware.custom.CustomHeaderMiddleware', # класова мідлварь
]
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment