如何在Webfaction上使用upload_to和MEDIA_ROOT配置Django ImageField?

时间:2011-10-23 22:00:20

标签: django file-upload

我在django项目中有以下模型字段:

headshot = models.ImageField(upload_to='/tmp', blank=True, null=True)

settings.py

# 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.pyMEDIA_URL做些什么。

我的项目是在webhost Webfaction上设置的,如果这有所不同。

2 个答案:

答案 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_ROOTSTATIC_URL执行相同的操作。

就权限而言,默认值应该没问题 - 如果您遇到麻烦,只需询问。