尝试从视图写入文件时权限被拒绝

Dan*_*ill 4 apache django permissions

我为此问题创建了聊天记录:此处

我有一个尝试执行的视图,f = open('textfile.txt', 'w')但是在我的活动服务器上,这会引发错误[Errno 13] Permission denied: 'textfile.txt'

我的文件结构如下:

- root
    |
    - project
          |
          - app
          |
          - media
Run Code Online (Sandbox Code Playgroud)

视图所在的地方app

我尝试将textfile.txt驻留在根目录,项目,应用程序和媒体中,所有这些文件均具有777文件权限(所有者,组和公共可以读取,写入和执行)[* 1]。

如果我将命令更改为读取权限,即f = open('textfile.txt', 'r')得到相同的错误。

我的媒体根目录设置为,os.path.join(os.path.dirname(__file__), 'media').replace('\\','/') 并且都通过webfaction在apache服务器上运行。

所以我有两个问题。django / python是从哪里打开这个文件的?以及需要更改哪些内容才能获得视图打开和写入文件的权限。

[* 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

我不知道这是否有意义...

Chr*_*att 5

给定以下内容:

f = open('textfile.txt', 'w')
Run Code Online (Sandbox Code Playgroud)

应该在与__file__当前正在运行的脚本或views.py您的方案相同的目录中创建文件。

但是,最好明确一些,从而排除任何潜在的偏差。我建议将该行更改为:

import os
f = open(os.path.join(os.path.dirname(__file__), 'textfile.txt'), 'w')
Run Code Online (Sandbox Code Playgroud)

甚至更好,例如:

import os
from django.conf import settings
f = open(os.path.join(settings.MEDIA_ROOT, 'textfile.txt'), 'w')
Run Code Online (Sandbox Code Playgroud)

然后,您始终可以确定文件的确切存储位置,这将使您可以更适当地优化权限。或者,您可以使用PROJECT_ROOT