Errno - 13 权限被拒绝:'/media/ - Django

问题描述 投票:0回答:4

我在 ubuntu 中使用 Django 3.1,

我上传媒体文件时遇到错误

PermissionError at /admin/main/artist/1/change/
[Errno 13] Permission denied: '/media/artists'

Exception Type: PermissionError
Exception Value:    
[Errno 13] Permission denied: '/media/artists'
Exception Location: /usr/lib/python3.8/os.py, line 223, in makedirs
Python Executable:  /home/rahul/.local/share/virtualenvs/music-69qL54Ia/bin/python

此代码在 Windows 中有效,但在 ubuntu 中无效

设置.py

STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']

MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / '/media/'

模型.py

class Artist(models.Model):
    image = models.ImageField(upload_to='artists/%Y/%m/%d/', default='demo-artist.jpg', null=True, blank=True)

我尝试过但没有成功

https://stackoverflow.com/questions/21797372/django-errno-13-permission-denied-var-www-media-animals-user-uploads
python django ubuntu django-models permission-denied
4个回答
7
投票

我遇到了同样的错误并使用

shell

进行了调试

在您的

settings.py
文件中: 变化:

MEDIA_ROOT = BASE_DIR / '/media/'
# here, MEDIA_ROOT = '/media/'

致:

MEDIA_ROOT = BASE_DIR / 'media/'
# here, MEDIA_ROOT = 'path-to-project/media/'

我认为发生这种情况是因为您试图将

your project level dir
加入到 Linux 中用于安装媒体的
/media/
目录中。并且会导致权限被拒绝,因为
root
具有写入权限,您可能没有使用
sudo
运行所有内容。因此,您可以删除第一个
\
以使目录相对。


3
投票
mkdir --mode=777 -pv /home/rahul/.local/share/virtualenvs/music-69qL54Ia/{admin/main/artist/1/change,media/artists}

chmod -R 777 /home/rahul/.local/share/virtualenvs/music-69qL54Ia

1
投票

也许您忘记将 MEDIA_ROOT 添加到您的 urls.py 中。
欲了解更多信息,请查看docs

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

注意:这不适合生产使用。如果是这种情况,您可以查看 docs


0
投票

修改 django 源目录的操作系统级别权限对我有用。

chmod -R 777 /path/to/django/project/

我不确定这是否是一个安全问题,但它解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.