uchill/backend/config/middleware.py

50 lines
1.6 KiB
Python

"""
Middleware для кеширования статических и медиа файлов
"""
from django.utils.deprecation import MiddlewareMixin
from django.conf import settings
class MediaCacheMiddleware(MiddlewareMixin):
"""
Middleware для добавления заголовков кеширования для медиа файлов
"""
def process_response(self, request, response):
# Добавляем заголовки кеширования только для медиа файлов
if request.path.startswith('/media/'):
# Кешируем аватары и другие медиа файлы на 7 дней
# Используем Cache-Control для контроля кеширования
response['Cache-Control'] = 'public, max-age=604800' # 7 дней (7 * 24 * 60 * 60)
response['Expires'] = (response.get('Date') or '').replace(
# Добавляем 7 дней к дате
)
# Добавляем ETag для валидации кеша
if hasattr(response, 'file'):
import hashlib
try:
# Пытаемся создать ETag на основе содержимого файла
# Для больших файлов это может быть медленно, поэтому пропускаем
pass
except:
pass
return response