Servir des fichiers téléchargeables dans Django : une approche globale
Servir des fichiers téléchargeables en toute sécurité est une exigence courante dans le développement Web. Django, un framework Web populaire en Python, propose plusieurs méthodes pour faciliter cette tâche. L'une de ces méthodes consiste à masquer les chemins de fichiers pour empêcher les téléchargements directs.
Dans ce scénario, le format d'URL souhaité est http://example.com/download/?f=somefile.txt, où somefile.txt réside dans le dossier home/user/files/ sur le serveur. La question se pose : comment Django peut-il livrer le fichier en téléchargement sans utiliser une URL et une vue standard ?
La solution X-Sendfile
Une solution efficace consiste à utiliser le Module X-Sendfile. Ce module exploite les serveurs Apache ou Lighttpd pour gérer le service de fichiers. Django génère le chemin du fichier ou le fichier lui-même, tandis que le serveur gère la livraison réelle du fichier.
Implémentation avec X-Sendfile
Pour intégrer X-Sendfile à Django, suivez ces étapes :
from django.utils.encoding import smart_str from django.http import HttpResponse response = HttpResponse(mimetype='application/force-download') # mimetype is replaced by content_type for django 1.7 response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name) response['X-Sendfile'] = smart_str(path_to_file) # Set 'Content-Length' header if necessary return response
Ce code exploite X-Sendfile pour déléguer la diffusion de fichiers au serveur, en veillant à ce que les chemins d'accès aux fichiers restent masqués tout en permettant aux utilisateurs autorisés de télécharger des fichiers.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!