Powinieneś używać apli sendfile podanych przez popularne serwery, takie jak apache
lub nginx
produkcyjne. Przez wiele lat korzystałem z interfejsu API sendfile tych serwerów do ochrony plików. Następnie stworzył prostą middleware w oparciu Django aplikacji do tego celu nadaje się zarówno do rozwoju i produkcji purpose.You może uzyskać dostęp do kodu źródłowego tutaj .
AKTUALIZACJA: w nowej wersji python
dostawca używa django, FileResponse
jeśli jest dostępny, a także dodaje obsługę wielu implementacji serwera, od lighthttp, caddy po hiawatha
Stosowanie
pip install django-fileprovider
- dodaj
fileprovider
aplikację do INSTALLED_APPS
ustawień,
- dodaj
fileprovider.middleware.FileProviderMiddleware
do MIDDLEWARE_CLASSES
ustawień
- ustawić
FILEPROVIDER_NAME
ustawienia na nginx
lub apache
w produkcji, domyślnie jest to python
do celów programistycznych.
w widokach opartych na klasach lub funkcjach ustaw X-File
wartość nagłówka odpowiedzi na bezwzględną ścieżkę do pliku. Na przykład,
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
usprawnione w taki sposób, że Twój kod będzie wymagał jedynie minimalnej modyfikacji.
Konfiguracja Nginx
Aby chronić plik przed bezpośrednim dostępem, możesz ustawić konfigurację jako
location /files/ {
internal;
root /home/sideffect0/secret_files/;
}
Tutaj nginx
ustawia adres URL /files/
dostępu tylko wewnętrznie, jeśli używasz powyższej konfiguracji, możesz ustawić plik X jako,
response['X-File'] = '/files/filename.extension'
Robiąc to z konfiguracją nginx, plik będzie chroniony, a także możesz kontrolować plik z django views