我可以使用FileField处理文件,但是将其存储在MEDIA_ROOT/MEDIA_URL
下而不是的地方,但完全存放在其他地方。
寻求确保无法下载;虽然拒绝阅读权限会在这里诀窍,希望能有更好的东西......就像完全不同的目录一样。
答案 0 :(得分:12)
有几种方法可以做到这一点。
首先,您可以查看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)
希望有所帮助!
答案 1 :(得分:2)
考虑到在所有Django中唯一实际使用的MEDIA_ROOT是确定上传文件的存储位置,看起来只需将MEDIA_ROOT指向您想要上传文件的位置就更合理了,然后使用不同的设置静态资产的路径。这是Pinax和django-staticfiles采用的方法,它使用STATIC_URL和STATIC_ROOT设置。
请注意,即使the documentation page on serving static assets in development不再建议将MEDIA_ROOT用于此目的,也会使用您自己的STATIC_DOC_ROOT设置进行演示。