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
。
我不知道这是否有意义...
给定以下内容:
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
。
归档时间: |
|
查看次数: |
9632 次 |
最近记录: |