我想讓Django只爲登錄用戶提供一些媒體文件(例如用戶上傳的文件)。由於我的網站流量很低,我想我會保持簡單,不要使用django-sendfile
告訴Nginx何時提供文件。相反,我會讓Django/Gunicorn來完成這項工作。對我來說,這似乎簡單得多,對於低流量網站來說,這可能更安全。用django服務受保護的媒體文件
但是,組織文件存儲位置的最佳方式是什麼?媒體文件全部存儲在MEDIA_ROOT
以下,該目錄由Nginx在製作中提供。如果我將文件上傳到MEDIA_ROOT/protected/
,我必須告訴Nginx不要爲子目錄protected
中的文件提供服務。
但這是一個好主意嗎?對我來說,允許Nginx首先訪問/media/
然後保護子目錄/media/protected/
似乎是一種冒險。最好不要使用MEDIA_ROOT
的子目錄來存儲受保護的文件?
但是,如果我嘗試這樣快速和骯髒的在我的模型:
upload_to='../protected/documents/%Y/%m/'
Django的抱怨:
SuspiciousFileOperation at /admin/core/document/add/
The joined path (/home/me/projects/project/protected/documents/2016/09/test.file) is located outside of the base path component (/home/me/projects/project/media)
所以我的東西是不是很好的做法,「離開」 MEDIA_ROOT
。
存儲和提供受保護媒體文件的最佳解決方案是什麼?
我有這個在我的Django的設置:
我要尋找一個解決同樣的問題,但我沒有任何公共媒體,而且我不喜歡誤用Django來提供文件。但目前只有一句話。在使用文件響應之前不應該打開文件? https://docs.djangoproject.com/zh/1.10/ref/request-response/#fileresponse-objects – texnic
@texnic檢查我的答案 –