0

我有一个内置Django的网站,允许用户上传文件。然后处理该文件并创建一堆其他文件。这些文件归我的帐户所属的用户/组www-data所有。其他人编写了创建这些文件的脚本,它使用了我不熟悉的程序。这些文件具有 rw-r--r-- 权限,我可以手动删除它们,也可以通过网站删除它们。

该网站然后调用“ collectstatic ” Django 命令将这些文件(由 www-data 拥有)复制到 static_root 目录。这些文件我无法手动删除,也无法让网站调用脚本来删除它们。我收到“权限被拒绝”错误。最初这些文件与从 (rw-r--r--) 复制的文件具有相同的权限,但我设法通过扩展 django StaticFilesStorage 对象让它们具有 rw-rw-rw,如下所示:

from django.contrib.staticfiles.storage import StaticFilesStorage
import os

class MyStaticFilesStorage(StaticFilesStorage):        
    def save(self, name, content):
        os.umask(0)
        super(MyStaticFilesStorage, self).save(name, content)

今年夏天我才刚刚开始使用 Django 和 Python,所以我真的不太熟悉。任何帮助,将不胜感激。我不明白我如何无法删除对我所属的组具有“写入”权限的文件。


编辑:

我认为问题出在哪里:创建文件的程序为它们创建了一个具有 drwxrwxrwx 权限的目录。“ collectstatic ” 将此目录复制到我的 static_root 目录,并且该新目录的权限为 drwxr-xr-x。

4

2 回答 2

0

要在类 unix 的环境中删除文件,您需要目录的写入权限,而不是文件本身的写入权限。

所以尝试 chmod 775 你的静态文件所在的目录,它应该可以工作。

顺便说一句:以上述方式修补 StaticFilesStorage 不是一个好的解决方案恕我直言,无论如何都不应该被要求。

于 2013-09-10T11:10:38.303 回答
0

collectstatic使用FILE_UPLOAD_PERMISSIONSand FILE_UPLOAD_DIRECTORY_PERMISSIONS(后者在 Django 1.7 中是新的)。

请参阅https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#django-admin-collectstatic

于 2014-05-29T18:07:40.877 回答