我无法满足 Django 对代码放置的建议。我搜索了谷歌并尝试了所有类型的 VirtualHost 配置。但是,我无法让 Django 站点与 Apache 一起工作,就像它与 Django 的内置测试 Web 服务器一样。
我正在使用 Django 1.5.4 和 mod_wsgi
Django 文档指出:
这段代码应该放在哪里?
如果您的背景是普通的旧 PHP(没有使用现代框架),您可能习惯于将代码放在 Web 服务器的文档根目录下(在 /var/www 之类的地方)。使用 Django,您不会那样做。将任何这些 Python 代码放在 Web 服务器的文档根目录中并不是一个好主意,因为它有可能使人们能够通过 Web 查看您的代码。这对安全不利。
将您的代码放在文档根目录之外的某个目录中,例如 /home/mycode。
在试图做到这一点时,我失败了。
这是我的目录结构的一个示例:我有 /home/user/djangoRoot 用于文档根目录和 /home/user/djangoCode 用于放置代码的位置。我已按照教程运行django-admin.py startproject djangoSite
,所有文件夹和文件都按应有的方式创建。数据库同步效果很好。当我使用 Django 的内置测试 Web 服务器时,我可以查看该站点。但我觉得我的 apache 虚拟主机出了点问题,因为我无法以与 apache 相同的方式查看该站点。
同样,本着将代码保留在文档根目录之外的精神,我希望 djangoRoot 作为我的根目录,并希望 djangoCode 作为我的代码目录(其中包含运行django-admin.py start project djangoSite
命令后创建的 djangoSite/djangoSite 目录)。
我努力了
- 将 DjangoCode/DjangoSite 设为我的根目录,但我可以在浏览器中看到文件结构
- 很多人建议从 VirtualHost 中删除 DocumentRoot。
- 我已经尝试过从 django 和其他人那里收集到的东西
没有工作。
所以这是我当前的 apache 虚拟主机
WSGIPythonPath /home/user/djangoCode/djangoSite/djangoSite
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName example.com
ServerAlias www.example.com
DocumentRoot /home/user/djangoRoot
<Directory /home/user/djangoRoot>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
WSGIScriptAlias /djangoRoot /home/user/djangoCode/djangoSite/djangoSite/wsgi.py
<Directory "/home/user/djangoCode/djangoSite/djangoSite/wsgi.py">
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
...
</VirtualHost>
这目前只允许我看到没有 django 迹象的文档根目录。我的虚拟主机配置错了吗?我是否将这个“文档根目录之外的代码太过分了”?