Anda harus menggunakan apis sendfile yang diberikan oleh server populer seperti apacheatau nginx
dalam produksi. Bertahun-tahun saya menggunakan api sendfile dari server ini untuk melindungi file. Kemudian dibuat aplikasi django berbasis middleware sederhana untuk tujuan ini cocok untuk tujuan pengembangan & produksi. Anda dapat mengakses kode sumber di sini .
UPDATE: di pythonpenyedia versi baru menggunakan Django FileResponsejika tersedia dan juga menambahkan dukungan untuk banyak implementasi server dari lighthttp, caddy ke hiawatha
Pemakaian
pip install django-fileprovider
- tambahkan
fileprovideraplikasi keINSTALLED_APPS pengaturan,
- tambahkan
fileprovider.middleware.FileProviderMiddlewarekeMIDDLEWARE_CLASSES pengaturan
- mengatur
FILEPROVIDER_NAMEpengaturan ke nginxatau apachedalam produksi, secara default itu pythonuntuk tujuan pengembangan.
di tampilan berbasis fungsi atau class Anda mengatur X-Filenilai header respons ke path absolut ke file. Sebagai contoh,
def hello(request):
// code to check or protect the file from unauthorized access
response = HttpResponse()
response['X-File'] = '/absolute/path/to/file'
return response
django-fileprovider diterapkan sedemikian rupa sehingga kode Anda hanya perlu modifikasi minimum.
Konfigurasi nginx
Untuk melindungi file dari akses langsung, Anda dapat mengatur konfigurasi sebagai
location /files/ {
internal;
root /home/sideffect0/secret_files/;
}
Di sini nginxmenetapkan url lokasi/files/ hanya akses internal, jika Anda menggunakan konfigurasi di atas, Anda dapat mengatur X-File sebagai,
response['X-File'] = '/files/filename.extension'
Dengan melakukan ini dengan konfigurasi nginx, file akan dilindungi & Anda juga dapat mengontrol file dari Django views