Üretimdeki apache
veya 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 python
sağlayıcı FileResponse
varsa 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
fileprovider
uygulama ekleyin INSTALLED_APPS
,
- eklemek
fileprovider.middleware.FileProviderMiddleware
için MIDDLEWARE_CLASSES
ayarlarda
FILEPROVIDER_NAME
ayarları üretimde nginx
veya apache
üretimde ayarlarsanız , varsayılan python
olarak geliştirme amaçlıdır.
sınıf tabanlı veya işlev görünümlerinizde yanıt üstbilgisi X-File
değ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 nginx
eriş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