Üretimdeki apacheveya nginxüretimdeki popüler sunucular tarafından verilen sendfile apislerini kullanmalısınız . Uzun yıllar dosyaları korumak için bu sunucuların sendfile api kullanıyordum. Sonra kaynak kodu erişebilirsiniz geliştirme ve üretim hem purpose.You için uygun bu amaç için app django dayalı basit ara yazılım yarattı burada .
GÜNCELLEME: yeni sürümde pythonsağlayıcı FileResponsevarsa django kullanır ve ayrıca lighthttp, caddy'den hiawatha'ya kadar birçok sunucu uygulaması için destek ekler
kullanım
pip install django-fileprovider
- ayarlara
fileprovideruygulama ekleyin INSTALLED_APPS,
- eklemek
fileprovider.middleware.FileProviderMiddlewareiçin MIDDLEWARE_CLASSESayarlarda
FILEPROVIDER_NAMEayarları üretimde nginxveya apacheüretimde ayarlarsanız , varsayılan pythonolarak geliştirme amaçlıdır.
sınıf tabanlı veya işlev görünümlerinizde yanıt üstbilgisi X-Filedeğerini dosyanın mutlak yoluna ayarlayın . Örneğin,
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 kodunuzun yalnızca minimum modifikasyona ihtiyaç duyacağı şekilde kısıtlanmıştır.
Nginx yapılandırması
Dosyayı doğrudan erişimden korumak için yapılandırmayı aşağıdaki gibi ayarlayabilirsiniz:
location /files/ {
internal;
root /home/sideffect0/secret_files/;
}
Burada , yalnızca dahili olarak nginxerişilen bir konum URL'si ayarlar /files/, yukarıdaki yapılandırmayı kullanıyorsanız X Dosyasını şu şekilde ayarlayabilirsiniz:
response['X-File'] = '/files/filename.extension'
Bunu nginx yapılandırması ile yaparak dosya korunacak ve ayrıca dosyayı django'dan kontrol edebilirsiniz. views