我无法完成Django的代码放置建议。我搜索了谷歌,并尝试了所有类型的VirtualHost配置。但是我不能像使用Django的内置测试Web服务器那样让Django站点与Apache一起工作。
我正在使用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目录)。
我试过了
没有工作。
所以这是我当前的apache virtualhost
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标志的文档根目录。 我的虚拟主机配置错了吗? 我把这个“代码超出文档根目录太远了吗?”
答案 0 :(得分:4)
我真的不明白为什么你这么难找到,但你根本就没有跟着我。文档中解释的要点是,您的代码存放在文件系统中的位置是完全独立的,从Apache为其提供服务。后者由WSGIScriptAlias的第一个参数给出。前者由第二个参数给出。
文档根目录是Apache从中提供文件的默认位置。但是你没有提供文件,你正在运行代码来提供动态内容。因此,您在第一个WSGIScriptAlias参数给出的位置代理WSGI应用程序。 这是您网站的根网址。在您提供的示例中,这意味着 - 假设您的域名为example.com
- 您的Django应用可以在{{1}下访问}。如果您在浏览器中实际访问了该网址,则会在您的urls.py中看到example.com/djangoRoot
下配置的任何网页。这几乎肯定不是你想要的。在绝大多数情况下,第一个参数 - 如文档中所示 - 应该只是/
。
所以我不确定你为什么认为这违反了安全警告。在这里,默认情况下文档根目录保持不变 - 通常为/
- 但代码位于/var/www
,并在/home/user/djangoCode/...
提供。