我为此问题创建了一个聊天记录: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/

10-15 00:08
查看更多