La solution est la suivante.
Utiliser le module Python fichier zip pour créer une archive zip, mais comme le fichier spécifie StringIO (le constructeur de ZipFile requiert un objet de type fichier). Ajoutez les fichiers que vous souhaitez compresser. Ensuite, dans votre application Django, renvoyez le contenu de l'objet StringIO dans le champ HttpResponse
avec mimetype fixé à application/x-zip-compressed
(ou au moins application/octet-stream
). Si vous le souhaitez, vous pouvez définir content-disposition
mais cela ne devrait pas être vraiment nécessaire.
Mais attention, la création d'archives zip à chaque requête est une mauvaise idée et cela peut tuer votre serveur (sans compter les timeouts si les archives sont volumineuses). L'approche la plus performante consiste à mettre en cache le résultat généré quelque part dans le système de fichiers et à le régénérer uniquement si les fichiers sources ont été modifiés. Une meilleure idée encore est de préparer les archives à l'avance (par exemple, par une tâche cron) et de faire en sorte que votre serveur web les serve comme des fichiers statiques habituels.