50 lines
1.6 KiB
Python
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|