我可以使用FileField來處理文件,但將其存儲在某個位置而不是在MEDIA_ROOT/MEDIA_URL
之下,但完全在其他位置。保存FileField文件上傳到MEDIA_ROOT以外的其他位置?
尋求是確保它不可下載;雖然否認讀取權限會做的伎倆在這裏希望有更好的東西......完全像一個不同的目錄。
我可以使用FileField來處理文件,但將其存儲在某個位置而不是在MEDIA_ROOT/MEDIA_URL
之下,但完全在其他位置。保存FileField文件上傳到MEDIA_ROOT以外的其他位置?
尋求是確保它不可下載;雖然否認讀取權限會做的伎倆在這裏希望有更好的東西......完全像一個不同的目錄。
有幾種方法可以做到這一點。
首先,您可以查看Django文檔中的handling uploaded files。如果您仔細閱讀,基本上可以在您處理表單的相同部分處理視圖中文件的上載。
另一個選擇,我認爲會更好的一個選擇是使用custom file storage system。你可以非常簡單地使用現有的基礎作爲基礎,但只需更改位置,然後將其用作FileField中的參數。例如:
from django.core.files.storage import FileSystemStorage
my_store = FileSystemStorage(location='/some/other/dir')
class SomeModel(models.Model):
file = models.FileField(storage=my_store)
希望有幫助!
考慮到在所有Django中唯一實際使用MEDIA_ROOT的方法是確定上傳文件的存儲位置,似乎將MEDIA_ROOT指向希望上傳文件的位置更合理,然後使用其他設置您的靜態資產的路徑。這是0123,和django-staticfiles採用的方法,它們使用STATIC_URL和STATIC_ROOT設置。
請注意,即使the documentation page on serving static assets in development不再建議爲此目的使用MEDIA_ROOT,它將使用您自己的STATIC_DOC_ROOT設置進行演示。