python练习五—简单web应用
2016-05-15 11:44
567 查看
配置apache
我以前web开发基本都是基于java平台的,比如tomcat,servlet等等,由tomcat接收http请求,然后交给servlet处理,servlet处理完成以后把返回结果交给tomcat,由tomcat返回给客户端,这次学习python CGI的时候首先想到的是CGI的圆形原理是什么,怎么处理一次完整的http请求?过程如下:客户端发起http请求
apache接收http请求
apache(必须加载了对应的处理模块,如处理python的mod_cgid.so)交给编写好的python脚本处理
python脚本接受参数并输出一个http页面
apache将这些输出返回给客户端
和我们熟悉的servlet处理相比是相当类似的,但是还有两个问题没有解决:
tomcat和apache的区别是什么?
apache怎么知道把请求交给python处理(即apache的配置)
tomcat和apache的区别
在此不进行复杂的比较,在此列中我只需要知道:apache是一个高效的http静态服务器,用来处理静态页面的请求(如果需要处理动态请求需要加载对应模块,比如php,perl)
tomcat是一个java应用服务器,可以处理静态请求,也可以处理servlet
配置apache可以处理pyton脚本
首先安装apache2自不必说,目前大多数linux发行版应该自带了apache2配置apache2.conf(有些可能是httpd.conf,可以使用locate定位该文件的位置),修改如下
# apache2.conf配置 # 加载处理python cgi的模块,必须有 LoadModule cgid_module /usr/lib/apache2/modules/mod_cgid.so # 一定要注意配置的服务器根目录是是什么,我的是/var/www # 告诉apache2访问/cgi-bin/的时候去 /var/www/cgi-bin/找脚本,注意要有'/' ScriptAlias /cgi-bin/ /var/www/cgi-bin/ # 对python脚本所在目录进行配置 <Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all AddHandler cgi-script cgi </Directory> # 识别cgi脚本后缀 AddHandler cgi-script .cgi .py
测试配置
好的姿势都摆好了,可以写一个示例试试配置是否成功。编写一个python脚本
在/var/www/cgi-bin/目录下新建一个test.py#!/usr/bin/env python # -*- coding=utf-8 -*- import cgi import cgitb; cgitb.enable() print "Content-type:text/html" print # 注意此处必须加print打印出一个空行,否则CGI无法解析 print """<HTML> <HEAD> <TITLE>CGI Environment</TITLE> </HEAD> <BODY>""" cgi.print_environ() print "</BODY></HTML>"
修改脚本权限
# 特别注意我使用root用户直接登陆的,此处为了简单起见使用了777,在实际配置重中这是非常不安全的 chmod 777 test.py
启动apache 服务
# 有些可能是httpd service apache2 start
在浏览器中查看页面
在浏览器中输入:localhost/cgi-bin/test.py看到下面内容(只要有内容就行,具体内容不一定一样)说明配置成功了
#!/usr/bin/env python #-*- coding=utf-8 -*- import cgi import sys from os.path import join, abspath # 先输出头信息,便于后面的输出正常 print "Content-type: text/html\n" # 文件所在目录 BASE_DIR = abspath('data') form = cgi.FieldStorage() text = form.getvalue('text') filename = form.getvalue('filename') password = form.getvalue('password') # 检查参数是否为空 if not (text and filename and password): print 'invalid params' sys.exit() # 验正密码 if password != '123': print 'invalid params' sys.exit() f = open(join(BASE_DIR, filename), 'w') f.write(text) f.close() print 'the file have been saved'
View Code
注意:
在/var/www/cgi-bin/data下面新建文件edit2.dat,该文件一定是可读可写的
将以上三个页面复制到cgi-bin目录下,脚本记得修改权限,当前用户必须是可读可执行的
编写pyhton脚本的时候,返回的html包含header信息的时候,header前面不能有空行,header和正文之间必须有空行
代码位置
http://pan.baidu.com/s/1bo5z4pL
相关文章推荐
- Python语法
- Python-格式化字符串
- Python第五讲
- ArcMap中使用arcpy进行网格截图
- [python爬虫]爬取学校教务处以及登录过程验证码的处理
- python调试
- python调试
- python2 与 python3 语法区别
- python函数定义
- Python对文件操作知识汇总
- DAY2 Python 标准库 -> Getpass 模块 -> 命令行下输入密码的方法.
- python异常处理(基础)
- DAY2 raw_input() 与 input() Python
- Emacs Python completer
- Python闲谈(二)聊聊最小二乘法以及leastsq函数
- python爬虫基础
- Python之赋值与深浅拷贝
- python 静态方法、类方法(二)
- Python 静态方法、类方法
- python03-list_tuple_dict_set