Anda harus menggunakan apis sendfile yang diberikan oleh server populer seperti apache
atau 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 python
penyedia versi baru menggunakan Django FileResponse
jika tersedia dan juga menambahkan dukungan untuk banyak implementasi server dari lighthttp, caddy ke hiawatha
Pemakaian
pip install django-fileprovider
- tambahkan
fileprovider
aplikasi keINSTALLED_APPS
pengaturan,
- tambahkan
fileprovider.middleware.FileProviderMiddleware
keMIDDLEWARE_CLASSES
pengaturan
- mengatur
FILEPROVIDER_NAME
pengaturan ke nginx
atau apache
dalam produksi, secara default itu python
untuk tujuan pengembangan.
di tampilan berbasis fungsi atau class Anda mengatur X-File
nilai 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 nginx
menetapkan 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