Django でダウンロード可能なファイルを提供する: 包括的なアプローチ
ダウンロード可能なファイルを安全に提供することは、Web 開発における一般的な要件です。 Python の人気のある Web フレームワークである Django は、このタスクを容易にするいくつかのメソッドを提供します。そのような方法の 1 つは、直接ダウンロードを防ぐためにファイル パスを隠すことです。
このシナリオでは、必要な URL 形式は http://example.com/download/?f=somefile.txt であり、somefile.txt は次の場所にあります。サーバー上の home/user/files/ フォルダー。疑問が生じます: Django は、標準の URL と View を使用せずにダウンロード用のファイルをどのように配信できるでしょうか?
X-Sendfile ソリューション
1 つの効果的なソリューションは、 X-Sendfile モジュール。このモジュールは、Apache または Lighttpd サーバーを利用してファイルの提供を処理します。 Django はファイルのパスまたはファイル自体を生成し、サーバーは実際のファイル配信を管理します。
X-Sendfile による実装
X-Sendfile を Django と統合するには、次の手順に従ってください:
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
このコードは、X-Sendfile を利用してファイルのサーバーへの提供を委任します。許可されたユーザーがファイルをダウンロードできるようにしながら、ファイル パスが隠蔽されたままであることを保証します。
以上が標準の URL とビューを使用せずに Django でダウンロード可能なファイルを提供するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。