我在django项目中有以下模型字段:
headshot = models.ImageField(upload_to='/tmp', blank=True, null=True)
# format <project>/<app>
MEDIA_ROOT = '/home/username/webapps/django/myproject/books/media/'
我创建了一个目录:/home/username/webapps/django/myproject/books/media/tmp
并赋予了chmod 777
权限。
当我尝试添加新图像时出现以下错误:
SuspiciousOperation at /admin/books/author/add/
Attempted access to '/tmp/Comment.png' denied.
Request Method: POST
Request URL: http://username.webfactional.com/app/admin/books/author/add/
Django Version: 1.3.1
Exception Type: SuspiciousOperation
Exception Value:
Attempted access to '/tmp/Comment.png' denied.
Exception Location: /home/username/webapps/django/lib/python2.7/django/core/files/storage.py in path, line 234
Python Executable: /usr/local/bin/python
Python Version: 2.7.1
有谁知道我做错了什么?我是否需要.htaccess
或其他一些设置才能写入此目录或我的Django配置有问题?
我仍然想知道要使用哪些chmod
值以及如何设置MEDIA_URL
。我想我可能需要urls.py
为MEDIA_URL
做些什么。
我的项目是在webhost Webfaction上设置的,如果这有所不同。
答案 0 :(得分:7)
修正了它。似乎答案是使用upload_to ='tmp'而不是upload_to ='/ tmp'。
答案 1 :(得分:2)
我看到你已将此标记为已回答,但在您的回答中仍有一些问题。以下是我如何进行此设置,以防您仍在使用它。
为媒体设置新应用(通过webfaction控制面板)。我使用“static_only”应用程序,因为它应该阻止用户上载脚本并运行它们。你也可以使用其中一个“static / cgi / php”。为此创建一个新的应用程序(而不是使用Django并创建一个新视图)是一种很好的做法,因为它会听到较低的资源。 Django在提供静态文件(图像,css文件,javascript文件等)方面过于苛刻。
再次使用webfaction控制面板将您的新媒体(static_only或任何您使用的)应用绑定到某个URL。我把我绑在了media.com上。 MEDIA_URL
应设置为您可以访问媒体的网址,MEDIA_ROOT
应该是媒体应用的根目录。因此,在我的settings.py文件中,我有:
MEDIA_ROOT = '/home/<username>/webapps/media/'
MEDIA_URL = 'http://media.<mydomain>.com/'
最好对STATIC_ROOT
和STATIC_URL
执行相同的操作。
就权限而言,默认值应该没问题 - 如果您遇到麻烦,只需询问。