我有一个内置在 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目录,并且该新目录上的permsissions是drwxr-xr-x。
答案 0 :(得分:0)
要删除类似unix的environemnt中的文件,您需要对目录具有写权限,而不是文件本身。
所以尝试chmod 775你的静态文件所在的目录,它应该可以工作。
BTW:以上述方式修补StaticFilesStorage并不是一个很好的解决方案,无论如何都不应该被要求。
答案 1 :(得分:0)
collectstatic
使用FILE_UPLOAD_PERMISSIONS
和FILE_UPLOAD_DIRECTORY_PERMISSIONS
(后者在Django 1.7中是新的)。
请参阅https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#django-admin-collectstatic。