【问题标题】:Django deployed app/project can't write to a fileDjango 部署的应用程序/项目无法写入文件
【发布时间】:2016-06-25 17:03:47
【问题描述】:

我正在开发一个基于 Django 的应用程序,它在我的磁盘上的位置是 home/user/Documents/project/application。现在,此应用程序从用户那里获取一些值并将它们写入位于folder 中的file,该project 目录下,即home/user/Documents/project/folder/file。使用命令python manage.py runserver 运行开发服务器时,一切正常,但是在部署通过open('folder/path','w') 访问fileapplication/views.py 后,它无法再访问它,因为默认情况下它在var/www 文件夹中查看当使用mod_wsgi 通过apache2 服务器部署时。

现在,我不会将 folder 放入 /var/www,因为将任何 python 代码放在那里不是一个好习惯,因为它可能成为可读的客户端,这是一个主要的安全威胁。请告诉我,我怎样才能将部署的应用程序指向正确的文件进行读写。

【问题讨论】:

  • 你使用绝对路径吗?
  • @ilse2005 我正在使用相对路径。
  • 你不能使用绝对路径指向你有写权限的位置吗?
  • @ilse2005 我想你的意思是 apache 用户有写权限,对吧?

标签: python django apache apache2.4


【解决方案1】:

真正的解决方案是将您的数据文件安装在/srv/data/myapp 或类似的位置,这样您就可以仅授予网络服务器用户对这些目录的正确权限。是否选择将代码放入 /var/www 是一个单独的问题,但我建议至少将您的 wsgi 文件放在那里(当然,正确指定您的 <DocumentRoot..>

【讨论】:

  • 正如链接docs.djangoproject.com/en/dev/intro/tutorial01/… 上的Django 教程中所述,我将wsgi.py 保存在startproject 命令创建我的Django 项目的位置,没有提到从那里移动它. DocumentRoot 当前配置为 /var/www
  • 生产与教程的第一章不同...如果您想要一些基本的东西,那么您应该将您的代码放在标准位置 - 如果由于某种原因这对您不起作用,您可以当然,根据您认为合适的方式调整您的系统。例如。对于我的安装,我在 /srv/www/site1DocumentRoot 中有 wsgi/settings/root url,因为该虚拟主机是 /srv/www/site1/docroot(我们从那里提供很少的静态资源,例如 favicon、cookie-policy 等.)。该应用程序代码位于/srv/www 之外,并且可以在站点运行的 virtualenv 中找到。
猜你喜欢
  • 2021-10-18
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多