Created
February 26, 2026 12:50
-
-
Save sunmeat/3ac98bfd05028737522557e24b55a80b to your computer and use it in GitHub Desktop.
кастомні мідлварі в джанго
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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