Если для параметра «Тип конфигурации» («Свойства конфигурации» -> «Основные» -> «Тип конфигурации») выбрано значение «Утилита», опция компоновщика будет недоступна.
zlib
слишком низкоуровневый для этой цели. Вот как это делает само промежуточное ПО GZip (см. Compress_string в django.utils.text.py ):
import cStringIO, gzip
zbuf = cStringIO.StringIO()
zfile = gzip.GzipFile(mode='wb', compresslevel=6, fileobj=zbuf)
zfile.write(template.render(context).encode('utf-8'))
zfile.close()
compressed_content = zbuf.getvalue()
response = HttpResponse(compressed_content)
response['Content-Encoding'] = 'gzip'
response['Content-Length'] = str(len(compressed_content))
return response
GZip использует zlib, но сам по себе zlib создает контент, который неправильно закодирован для браузера, который видит 'gzip 'в качестве кодировки содержимого. Надеюсь, это поможет!
Вы также можете просто использовать Промежуточное ПО GZip Django :
Либо включив промежуточное ПО в settings.py, добавив:
MIDDLEWARE_CLASSES = (
django.middleware.gzip.GZipMiddleware,
...
)
, либо сделайте это перед тем, как вернуть особый ответ. В вашем views.py dec будет обработчиком определенного url
from django.middleware.gzip import GZipMiddleware
gzip_middleware = GZipMiddleware()
def dec(request, *args, **kwargs):
response = func(request, *args, **kwargs)
return gzip_middleware.process_response(request, response)
return dec
ПРИМЕЧАНИЕ: вы должны быть уверены , что не подвергаетесь атакам по сторонним каналам, прежде чем использовать промежуточное ПО GZip.
Предупреждение
Исследователи безопасности недавно обнаружили, что при сжатии методы (включая GZipMiddleware) используются на веб-сайте, сайт могут подвергнуться ряду возможных атак. Перед использованием GZipMiddleware на вашем сайте, вы должны очень внимательно рассмотреть подвержены ли вы этим атакам. Если у вас есть сомнения по поводу независимо от того, пострадали ли вы, вам следует избегать использования GZipMiddleware. За подробнее см. документ BREACH (PDF) и breachattack.com.
Также:
Изменено в Django 1.10: В более старых версиях защита Django от CSRF механизм был уязвим для атак BREACH при использовании сжатия. Это уже не так, но вы все равно должны таким образом скомпрометируйте свои секреты.