Bạn nên sử dụng apis sendfile do máy chủ phổ biến như apache
hoặc nginx
trong sản xuất. Nhiều năm tôi đã sử dụng api sendfile của các máy chủ này để bảo vệ các tập tin. Sau đó, tạo một ứng dụng django dựa trên middleware đơn giản cho mục đích này phù hợp cho cả mục đích sản xuất &.You có thể truy cập mã nguồn here.
UPDATE: trong phiên bản mới python
cung cấp sử dụng django FileResponse
nếu có và cũng có thể thêm hỗ trợ cho việc triển khai nhiều máy chủ từ lighthttp, caddy để hiawatha
Cách sử dụng
pip install django-fileprovider
- thêm
fileprovider
ứng dụng INSTALLED_APPS
thiết lập ,
- thêm
fileprovider.middleware.FileProviderMiddleware
vào MIDDLEWARE_CLASSES
cài đặt
- đặt cài đặt
FILEPROVIDER_NAME
thành nginx
hoặc apache
trong sản xuất, theo mặc định là python
cho mục đích phát triển.
trong chế độ xem lớp học hoặc chức năng của bạn đặt tiêu đề phản hồi X-File
giá trị thành đường dẫn tuyệt đối cho tệp. Ví dụ:
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
impemented theo cách mã của bạn sẽ chỉ cần sửa đổi tối thiểu.
Nginx cấu hình
Để bảo vệ tập tin khỏi những truy cập trực tiếp bạn có thể thiết lập cấu hình như
location /files/ {
internal;
root /home/sideffect0/secret_files/;
}
đây nginx
thiết lập một vị trí url /files/
chỉ truy cập internaly, nếu bạn đang sử dụng trên cấu hình bạn có thể đặt X-File là,
response['X-File'] = '/files/filename.extension'
Làm theo ing này với cấu hình nginx, các tập tin sẽ được bảo vệ & bạn cũng có thể kiểm soát các tập tin từ django views
Nguồn
2016-12-12 18:35:40
Tại sao bạn không chỉ đơn giản là sử dụng Apache để làm điều này? Apache phục vụ nội dung tĩnh nhanh hơn và đơn giản hơn cả Django. –
Tôi không sử dụng Apache vì tôi không muốn các tệp có thể truy cập mà không có quyền có trụ sở tại Django. – blackrobot
Nếu bạn muốn đưa vào tài khoản người dùng quyền bạn phải phục vụ tập tin thông qua quan điểm của Django –