Решение следующие.
Использование модуль Python zipfile для создания архива zip, но как файл определяют объект StringIO (конструктор ZipFile требует подобного файлу объекта). Добавьте файлы, которые Вы хотите сжать. Тогда в Вашем Django приложение возвращают содержание объекта StringIO в HttpResponse
с набором mimetype к application/x-zip-compressed
(или [по крайней мере 112]). Если Вы хотите, можно установить content-disposition
заголовок, но это не должно действительно требоваться.
, Но остерегаются, создание архивов zip по каждому запросу является плохой идеей, и это может уничтожить Ваш сервер (не считающий тайм-ауты, если архивы являются крупными). Мудрый производительностью подход должен кэшировать сгенерированный вывод где-нибудь в файловой системе и повторно создать его, только если исходные файлы изменились. Еще лучшая идея состоит в том, чтобы подготовить архивы заранее (например, заданием крона) и иметь Ваш веб-сервер, служащий им в качестве обычных помех.
На самом деле он далеко не мертв. Несмотря на накладные расходы, многие компании, занимающиеся виртуальным веб-хостингом, в настоящее время используют PHP как CGI из соображений безопасности, так как его можно использовать с suEXEC. suEXEC означает, что ваши скрипты выполняются с вашими фактическими привилегиями пользователя Unix и, таким образом, ограничены разделением привилегий операционной системы. Это намного более надежная модель безопасности, чем специфическая для PHP альтернатива open_basedir.
Кроме того, CGI представляет собой действительно простой и довольно универсальный интерфейс, поддержка которого никогда не прекратится. с веб-серверов. Многие новые интерфейсы, такие как FastCGI и SCGI, наследуют способ, которым CGI передает заголовки HTTP и другие переменные в веб-приложение и обратно. Даже PHP ' s SAPI имитирует это с помощью своей переменной $ _ SERVER
. Так что CGI никуда не денется, он просто строится.
Наследие? Абсолютно. Мертв? Ну это на аппарате жизнеобеспечения. Я сомневаюсь, что он действительно «умрет» в обозримом будущем. Вы можете по-прежнему использовать CGI для написания очень небольших скриптов, если у вас есть сервер, на котором нет других средств для запуска веб-приложений, и вам лень его настраивать.
Что еще причина? Возможно, у вас есть программа, которая пропускает память или ресурсы, например решето, но вам все равно нужно запустить ее, поэтому вы должны убедиться, что все очищено, завершая процесс при каждом запросе ...
А если серьезно, для вещей, которые действительно имеет значение , я думаю, что преимущества перехода на систему любого типа с постоянными процессами намного перевешивают затраты. По моему опыту, это также способствует написанию более организованного кода,
Он не совсем мертв. Но fcgi выглядит намного лучше. Хотя официально не поддерживается, скажем, Apache. Вам необходимо использовать боковые моды, чтобы заставить его работать.
CGI не очень хорошо подходит для высокой производительности.
Но мой совет - игнорировать это, писать для языка или библиотеки, которые поддерживают несколько SAPI, а затем использовать то, что лучше всего подходит для каждого ситуация.