return [r‘
注意:虽然字符串本身就是iterator,但上述例子还是将一个字符组包括在了[ ]内部使其成为一个list。这是因为,把字符串作为iterator,Server将会遍历整个字符串,即一个字符一个字符的给客户端发响应,这样影响性能。如果把整个字符串作为list的一个元素,则Server遍历这个list时,把整个字符串一次性返回给客户端,效率高。
===========================================
二、怎么用WSGI
我们需要做什么:
1、我们写的python应用程序要遵守WSGI对应用程序的规定:即,我们的应用程序是一个callable,接受两个参数,返回一个iterator,如上所述。
2、我们写完符合WSGI规定的应用程序后,把程序安装到符合WSGI规定的服务器上。所谓安装,就是把某个URL跟我们写的某某个python程序对应起来。
我们怎么做:
1、写一个符合WSGI规定的应用程序,举两个例子。
例1:假如我们想写一个程序,让访问我们网站的人看到 Hello WSIG !
那么我的程序如下:
def application(env, set_http):
set_http(‘200 OK‘, [(‘Content-type‘,‘text/html‘),])
return [r‘
例2:假如我们想写一个程序,让访问我们网站的人看到自己的IP地址
那么我们的程序如下:
def application(env, set_http):
ip = env[‘REMOTE_ADDR‘]
set_http(‘200 OK‘, [(‘Content-type‘,‘text/html‘),])
return [r‘
Your IP is : %s
‘%ip]以上两个程序都是符合WSGI规定的。
2、把程序安装到Server上。这里我们以Apache为例,把以上两个例子安装到Apache上。
安装之前要做个说明:Apache通过mod_wsgi来实现WSGI协议,mod_wsgi要求应用程序的callable必须叫 application,如果叫别的名字需要额外配置。这不是WSGI的规定,这是Apache mod_wsgi的规定。
2-1、首先安装mod_wsgi,如果是Apache 2.4 以上的版本,这个mod是默认安装完了的,如果是2.0 或者2.2 版本,需要手动安装。用 yum -y install mod_wsgi 即可安装成功。httpd 2.2 版本安装mod_wsgi的过程中需要注意的是,需要安装httpd-devel 和 python-devel才行,能联网的情况下用yum安装即可,另外python版本要高于2.3
2-2、把 Hell WSGI 这个程序安装在 URL /hello 下,只需要在Apache的主配置文件httpd.conf中加入一行:
WSGIScriptAlias /hello /var/www/wsgi-app/hello.py
然后把hello.py扔到/var/www/wsgi-app 目录下就可以了。重启httpd,访问 xx.xx.xx.xx/hello 看到了Hello WSGI !
2-3、把显示ip地址的程序安装到 URL /ip 下,跟2-2一样,就不写了。
===================================
三、我们不要这么做
如果真像上面那样,每写一个程序都安装一下,太麻烦,我们不这么做。
我们用框架开发web应用程序,只要该框架符合WSGI协议。Django是一个符合WSGI的框架。
我们把Django开发好的一个工程安装到 “ / ” 下,其他的URL交由Django处理,只安装一次即可。
下面以Django Tutorial 中的 poll 程序 为例,说一下怎么把一个Django工程安装到Apache上。
我们在Apache的根目录(/var/www/)下创建mysite目录,把工程文件都拷贝进去。目录结构如下:
然后我们在httpd.conf中加入这2行:
WSGIScriptAlias / /var/www/mysite/mysite/wsgi.py
WSGIPythonPath /var/www/mysite
注意1,wsgi.py是我们在创建工程时(django-admin.py startproject)自动生成的
注意2,跟安装自己写的小程序不同,此处要加入2行。第2行是告诉mod_wsgi,你的工程文件夹是可以import的
来源: http://www.bubuko.com/infodetail-1962526.html