我为此问题创建了一个聊天记录:here
我有一个试图执行f = open('textfile.txt', 'w')
的 View ,但是在我的事件服务器上,这会引发错误[Errno 13] Permission denied: 'textfile.txt'
。
我的文件结构如下:
- root
|
- project
|
- app
|
- media
View 位于app
中。我尝试将textfile.txt驻留在根目录,项目,应用程序和媒体中,所有这些文件均具有777文件权限(所有者,组和公共(public)可以读取,写入和执行)[* 1]。
如果我将命令更改为读取权限,即
f = open('textfile.txt', 'r')
,则会收到相同的错误。我的媒体根目录设置为
os.path.join(os.path.dirname(__file__), 'media').replace('\\','/')
并且所有这些都通过webfaction在apache服务器上运行。所以我有两个问题。 django/python是从哪里打开这个文件的?以及需要进行哪些更改才能获得 View 打开和写入文件的权限。
[* 1]我知道这不是一个好主意,我只是将此设置用于当前调试目的。
编辑:
我不知道这是否相关,但是现在当我将其更改为
f = open(os.path.join(settings.MEDIA_URL, 'textfile.txt'), 'r')
而不是f = open(os.path.join(settings.MEDIA_URL, 'textfile.txt'), 'w')
时,出现错误[Errno 2] No such file or directory
。我不知道这是否有意义...
最佳答案
给定以下内容:
f = open('textfile.txt', 'w')
它应该在与方案中当前正在运行的脚本
__file__
或views.py
相同的目录中创建文件。但是,最好明确一些,从而排除任何潜在的偏差。我建议将该行更改为:
import os
f = open(os.path.join(os.path.dirname(__file__), 'textfile.txt'), 'w')
甚至更好,例如:
import os
from django.conf import settings
f = open(os.path.join(settings.MEDIA_ROOT, 'textfile.txt'), 'w')
然后,您始终可以确定文件的确切存储位置,这将使您可以更适本地优化权限。另外,您可以使用
PROJECT_ROOT
。关于django - 尝试从 View 写入文件时,权限被拒绝,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8042445/