用mod_wsgi在apache中使用django

    利用 mod_wsgi和apache来部署django现在比较流行,也被认为是最好的方式。django框架,python,apache2这些(以及-dev)的安装配置都是基本的,这里就不说了。

    mod_wsgi支持任何满足python wsgi接口的apache模块。你要做的第一件事情就是安装mod_wsgi,可以参考:https://code.google.com/p/modwsgi/wiki/InstallationInstructions

也许你在安装的过程中会出现一些问题,这是因为mod_wsgi依赖python和apache,而python和apache本身就比较复杂。例如提示:

Python.h: No such file or directory等错误,这是因为你的系统里面只有python的runtime package没有develop package。 

如果是linux,可以通过sudo apt-get install pythonX.X-dev(X.X替换成python版本号)安装。有其他错误,可以参考:https://code.google.com/p/modwsgi/wiki/InstallationIssues

     一旦你成功安装好wsgi模块,接下来需要将wsgi模块导入到apache中,在apache的http.conf文件中添加:LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so,然后重启apache,在apache的log中应该会看到:Apache/2.2.22 (Ubuntu) mod_wsgi/3.4 Python/2.7.3 configured -- resuming normal operations,这说明apache中wsgi模块成功启动。

    WSGI是为python语言定义的web服务器和web应用程序或者框架之间的一种简单通用的接口,符合CGI标准。在这里WSGI就起到了一个apache与django中间件的作用。为了能通过apache访问到django应用,首先需要在apache的httpd.conf文件里面添加:

WSGIScriptAlias / /path/to/mysite/apache/django.wsgi

这一行代码的作用是将你的django服务映射到apache的某个URL中,上面就是根目录,后面的路径是django project中wsgi.py所在的路径。到目前位置,apache和mod_wsgi基本搞定,接下来需要写一个WSGI application,也就是编写你的wsgi.py文件,示例如下:

import os
import sys
from django.core.wsgi import get_wsgi_application
os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
application = get_wsgi_application()
path = '/path/to/mysite'
 if path not in sys.path:
    sys.path.append(path)

上面的path就是你的django project所在目录。然后重启apache,在浏览器中输入http://localhost/+你在django中配置的URL就能看到你提供的django服务了。

    但是django不支持静态文件,例如:css、js、image等,它会把这块工作扔给web服务器,这可以通过Alias命令来设置,举例说明:

Alias /templates/images/ /home/yuyao/workspace/websites/SearchWebs/SearchWebs/templates/images/
Alias /templates/css/ /home/yuyao/workspace/websites/SearchWebs/SearchWebs/templates/css/ 
<Directory /home/yuyao/workspace/websites/SearchWebs/SearchWebs/templates/images>
Order deny,allow
Allow from all
</Directory>
<Directory /home/yuyao/workspace/websites/SearchWebs/SearchWebs/templates/css>
Order deny,allow
Allow from all
</Directory>
    通过把上面的命令放在http.conf文件中,下面解释一下命令的含义,以images为例:
Alias /templates/images/ /home/yuyao/workspace/websites/SearchWebs/SearchWebs/templates/images/

是将/home/yuyao/workspace/websites/SearchWebs/SearchWebs/templates/images/映射到/templates/imges/,这样,如果你在html文件里有这样的引用:src="/templates/images/logo.png",apache看到这个URL之后就会去/home/yuyao/workspace/websites/SearchWebs/SearchWebs/templates/images/中查找logo.png图片,css也是同样的道理。也就是说,django把通过URL查找静态文件的工作交给了apache,而apache要找到相应的静态文件,需要做一个类似上面的重命名(映射)。通过上面简单的配置就能是静态文件正常工作了。对于比较小的工程这样做没什么问题,如果工程比较大,关于django管理静态文件的方法可以参考:https://docs.djangoproject.com/en/dev/howto/static-files/

    

    



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值