Django为什么在保存FileField时提出Permission被拒绝?

时间:2016-07-19 14:38:22

标签: django

我在/var/project有一个Django应用程序根,并且模型定义为:

class Notice(models.Model):
    title = models.CharField('title', max_length=80, default='', blank=True) 
    info = models.FileField("info", null=True, upload_to='app/files') 

class NoticeForm(forms.ModelForm):

    class Meta:
        model = models.Notice
        fields = ('title', 'info')

保存info字段时,始终会出现如下错误:

Internal Server Error: /app/notice/update/9

PermissionError at /app/notice/update/9
[Errno 13] Permission denied: '/var/project/media/app/files/bm.py'

我认为权限设置是O.K.这是因为:

a)我通过uwsgi通过www-data用户运行Django应用程序,如下所示:

    [uwsgi]
    uid = www-data
    gid = www-data
    chmod-socket = 666
    chown-socket = www-data:www-data

b)媒体文件夹:

(www)root@iZ94x23urx9Z:/var/project/media/app# ls -l
total 40
drwxr-xr-x 2 www-data www-data 36864 Jul 19 20:03 avatar
drw-rw-rw- 2 www-data www-data  4096 Jul 19 15:06 files

c)nginx static conf:

location /media  {
    alias /var/project/media;
}
location /static {
    alias /var/project/static;
}

d)我的另一个模型有一个字段tx = models.ImageField("tx",blank=True, null=True,upload_to='app/avatar'),保存此字段时一切正常。

这个问题困扰了我一整天。究竟是什么问题?

1 个答案:

答案 0 :(得分:0)

我尝试this solution,问题解决了。我不知道为什么,但它只是有效。

 chgrp -R www-data /var/project
 chmod -R g+w /var/project
 usermod -a -G www-data root
 find /var/project -type d -exec chmod 2775 {} \;
 find /var/project -type f -exec chmod ug+rw {} \;