Djang+Wsgi+Apache Config on Windows
之前写了一篇 Django+Mod_Python+Apache的配置文章(http://blog.csdn.net/l_courser/article/details/6818606)。
毕竟,Mod_Python是即将被淘汰的玩意儿,Wsgi才是最新的“王道”,结合网上一些配置,我整理了一下,并亲测成功,发出来供大家参考。
如有其它疑问,请随时留言。欢迎转载,转载时请注明出处,谢谢!
准备以下内容:
- Python26+,此处我用的是 Python27,Python3+版本未使用过,听说有很多不同,以后用到的时候再研究;
- 下载合适的Wsgi版本,此处我使用的是:mod_wsgi-win32-ap22py27-3.3.so,为了使用方便将其改名为:mod_wsgi.so;
- 该文件下载地址: ;
- Django使用的是此时间点最新的1.3.1
- Apache2.2.* ;
以上内容,在我的网盘均有下载,网盘这东东没整明白,以后再把详细下载地址放上来:http://www.dbank.com/netdisk/index.html?v=2.3.5#/我的网盘
东东都准备完成了,开始各种安装,一般的不说了,说说wsgi吧。将下载的文件拷贝到 Apache安装目录的 moudles 下面。
整个安装完成了。
配置
- Django配置
- 安装完成后,将Django的bin目录最好放在系统的环境的PATH中,命令行进入D:/website,执行django-admin.py startproject myweb
- Apache配置
- 在 httpd.conf 合适的地方加上:LoadModule wsgi_module modules/mod_wsgi.so;
- 最后加上:Include "D:/website/apache_django_wsgi.conf";("D:/website”为你的网站根目录);
- 在 D:/website中建立以下两个文件:django.wsgi和apache_django_wsgi.conf,文件内容如下:
- apache_django_wsgi.conf
-
- Alias /static/admin/ "D:/website/myweb/static/admin/"
- <Directory "D:/website/myweb/static/admin">
- Order allow,deny
- Options Indexes
- Allow from all
- </Directory>
- WSGIScriptAlias / "D:/website/django.wsgi"
- <Directory "D:/website/myweb">
- Allow from all
- </Directory>
- <Directory "d:/website">
- Allow from all
- </Directory>
- #for testing wsgi
- #WSGIScriptAlias / "d:/Djangoweb/test.wsgi"
django.wsgi内容如下 -
- import os, sys
- #Calculate the path based on the location of the WSGI script.
- apache_configuration= os.path.dirname(__file__)
- project = os.path.dirname(apache_configuration)
- workspace = os.path.dirname(project)
- #
- os.chdir('D:/website/myweb') #注意这句话,之前我没有加这句话,导致无法找到项目路径
- sys.stdout = sys.stderr #将日志输出到apache下的error.log便于发现问题
- sys.path.append(workspace)
- #print workspace
- sys.path.append(workspace + "website")
- os.environ['DJANGO_SETTINGS_MODULE'] = 'myweb.settings'
- import django.core.handlers.wsgi
- application = django.core.handlers.wsgi.WSGIHandler()
在apache_django_wsgi.conf文件的内容中,最后一行注释的test.wsgi文件内容如下: -
- def application(environ, start_response):
- status = '200 OK'
- output = 'Hello World!'
- response_headers = [('Content-type', 'text/plain'),('Content-Length', str(len(output)))]
- start_response(status, response_headers)
- return [output]