【6.3】python脚本网页化介绍

常用的一些分析脚本为了更好的被大家所使用,我们可以将其网页化,用户在网页的图形界面中设定好参数上传,程序立马运行并返回结果。整个过程实现的方式有很多,这里介绍的是pyhon脚本基于Apache平台通过WSGI接口实现的方法。

一、Apache篇

Apache是世界使用排名第一的Web服务器软件。

1.安装Apache

具体安装步骤可参见:http://tonyguo.blog.51cto.com/379574/168534/

2.配置Apache

Apache有两个重要的配置文件:/etc/httpd/conf/httpd.conf和**/srv/web/config/httpd_local.conf**

这里主要介绍配置/etc/httpd/conf/httpd.conf

1) 设置根目录的路径

根目录是指Apache存放配置文件和日志文件的目录,配置参数为ServerRoot,默认位于“/etc/httpd/ ”。(默认,未修改)

2) 设置监听IP地址及端口号

默认侦听本机所有IP地址的TCP80端口,命令如下: Listen 80 (默认,未修改)

用户也可以按自己的需求,使用多个Listen语句在多个地址和端口上侦听客户端请求。比如: Listen 192.168.99.9:80

3) 设置系统管理员E-mail

使用ServerAdmin参数设置管理员E-mail,比如管理员的Email地址为root@guoxuemin.cn:

4) 设置服务器主机的名称

参数ServerName用来设置服务器的主机名称,如果没有域名则填入服务器的IP地址,比如服务器的IP地址为192.168.99.9:

5) 设置主目录的路径

用户可以使用参数DocumentRoot配置服务器主目录默认路径,比如,主目录路径为: 默认为 DocumentRoot: “/var/www/html”

6) 设置默认文件 Apache的默认文件名为index.html,可以使用Directory Index参数来配置,比如,将index.php设置为默认文件名:

识别index.html和index.php作为主页

vim /etc/httpd/conf/httpd.conf
<IfModule dir_module>
DirectoryIndex index.html index.php
AddType text/html .htm .html .py
AddHandler cgi-script cgi .py
</IfModule>

7)配置目录权限

使用<Directory 目录路径>和设置目录的权限。比如:

<Directory “/var/www/icons”>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

8)测试:

打开浏览器,输入地址:http://192.168.99.9 ,可以打开站点了:

二、WSGI设置

WSGI接口(Web Server Gateway Interface)定义非常简单,它只要求Web开发者实现一个函数,就可以响应HTTP请求。无论多么复杂的Web应用程序,入口都是一个WSGI处理函数。HTTP请求的所有输入信息都可以通过environ获得,HTTP响应的输出都可以通过start_response()加上函数返回值作为Body。

1.下载安装wsgi

已安装

2. 配置

2.1将mod_wsgi.so拷贝至apache的modules目录,并配置conf.modules.d

cp /usr/lib64/python2.7/site-packages/mod_wsgi/server/mod_wsgi-py27.so /etc/httpd/modules
cd /etc/httpd/conf.modules.d
sudo vi 00-base.conf
添加如下一行:
 LoadModule wsgi_module modules/mod_wsgi-py27.so

2.2修改httpd.conf配置文件,添加下面一行:

WSGIScriptAlias /haha /bioinfo/web/z_temp/test.wsgi

2.3然后重启Apache:

sudo service httpd restart

3.测试是否配置成功

创建一个test.wsgi文件(wsgi文件就是一个python module,只不过扩展名是wsgi而已, test.wsgi给他755权限),文件内容如下:

def application(environ,start_response):
start_response("200 OK",[('content-type',"text/html")])
return ['<html><body>Hello world!</body></html>']

在地址栏敲入http://127.0.0.1/haha ,如果输出“hello world”说明配置成功

4.查看apache是否开启

service httpd status

三、CGI设置

CGI(Common Gateway Interface)是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上。 为了启用CGI脚本,我们必须指定CGI脚本在web服务器上的位置

vim /etc/httpd/conf/httpd.conf
<IfModule alias_module>
 ScriptAlias /cgi-bin/ "/bioinfo/web/"
</IfModule>

<Directory "/bioninfo/web">
 AllowOverride None
 Options None
 Require all granted
</Directory>
sudo service httpd restart

四、python网页

创建一个CGI脚本,你可以在你的脚本中通过下面的语句:

import cgi

你也必须修改Python CGI脚本的执行权限,以防止web服务器不能调用。可以通过下面的命令增加执行权限:

# chmod o+x myscript-1.py

表单:
<html>
<h1>Test Page 2</h1>
<formname="input"action="/cgi-bin/myscript-2.py"method="get">
First Name: <inputtype="text"name="firstName"><br>
Last Name: <inputtype="text"name="lastName"><br>
Position: <inputtype="text"name="position"><br>
<inputtype="submit"value="Submit">
</form>
</html>

当"Submit"按钮点击,/var/www/cgi-bin/myscript-2.py脚本将被执行(通过action参数指定)。

/var/www/cgi-bin/myscript-2.py的内容如下:

#!/usr/bin/python
import cgi
form = cgi.FieldStorage()
print"Content-Type: text/html"
print""
print"<html>"
print"<h2>CGI Script Output</h2>"
print"<p>"
print"The user entered data are:<br>"
print"<b>First Name:</b> "+ form["firstName"].value +"<br>"
print"<b>Last Name:</b> "+ form["lastName"].value +"<br>"
print"<b>Position:</b> "+ form["position"].value +"<br>"
print"</p>"
print"</html>"

web输入表单被封装在一个表单对象中,叫做cgi.FieldStorage对象。一旦开始输出,"Content-Type: text/html"是必需的,因为web服务器需要知道接受自CGI脚本的输出格式。用户输入的数据在包含form["firstName"].value,form["lastName"].value,和 form["position"].value的语句中可以得到。那些中括号中的名称和/var/www/html/page2.html文本输入域中定义的名称参数一致

五、备注与常见报错

更多网页设计的问题,请参见HTML、CSS、JavaScript等方面的资料

1.报错: malformed header from script ‘taqman_design.py’: Bad header:

html表头问题,在

<html> 

前有其他东西打印出来

参考资料

http://tonyguo.blog.51cto.com/379574/168534/

http://blog.sina.com.cn/s/blog_5573214b01019eu6.html

http://blog.csdn.net/hitxiaya/article/details/6596499

http://www.linuxidc.com/Linux/2014-12/110188.htm

http://blog.csdn.net/hitxiaya/article/details/6596499

https://pypi.python.org/pypi/mod_wsgi

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832689740b04430a98f614b6da89da2157ea3efe2000

这里是一个广告位,,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn