python项目练习六:使用CGI进行远程编辑
2014-05-21 19:22
591 查看
python项目练习六:使用CGI进行远程编辑
记得一开始接触web开发的时候,看视频,视频里面的老师一般都会语重心长的说:想当年我们一开始学习编程那会儿,都是用cgi编程,复杂的很,现在你们学习web编程,直接有现成的框架来用,十分简单。记得当然听完这句话之后就会觉得这个老师好有经验,技术很高。不过后来慢慢的接触web编程时间长了,觉得cgi编程并不是像传说中的那么难,只不过是比较麻烦,在后台使用html硬编码来完成(也就是在后台使用类似print的语句输出html)。通过浏览器直接访问cgi文件,由web服务器执行cgi脚本,输出内容到浏览器。关于cgi的更多内容可以参考这里:http://www.jdon.com/idea/cgi.htm
再来看这个python中的cgi,确实很简单。但是有一点我不确定,就是如果我是初学web编程的话,会不会觉得这个简单,这个角度的思考确实不好操作。
下面直接上代码吧,和书上的不太一样,因为书上的代码在我的电脑上不能正常运行。 首先是index.html:
<html> <head> <title>File Editor</title> </head> <body> <form action='/test/cgi-bin/edit.cgi' method='POST'> <b>File name:</b><br/> <input type='text' name='filename'/> <input type='submit' value='Open'/> </form> </body> </html>
edit.cgi,用来接受index页面的名字,然后根据名字查找文件,并且输出。
#!usr/bin/env python print 'Content-type: text/html\n' from os.path import join, abspath import cgi,sys BASE_DIR = abspath('data') form = cgi.FieldStorage() filename = form.getvalue('filename') if not filename: print 'Please enter a file name' sys.exit() try: text = open(join(BASE_DIR,filename)).read() except Exception,data: print str(data) print """ <html> <head> <title>Editing...</title> </head> <body> <form action='/test/cgi-bin/save.cgi' method='POST'> <b>File:</b>%s<br/> <input type='hidden' value='%s' name='filename'/> <b>Password:</b><br/> <input name='password' type='password' /><br/> <b>Text:</b><br/> <textarea name='text' cols='40' rows='20'>%s</textarea><br/> <input type='submit' value='Save' /> </form> </body> </html> """ % (filename, filename, text)
最后一个文件save.cgi:
#!/usr/bin/env python print 'Content-type: text/html\n' from os.path import join, abspath import cgi, sha, sys BASE_DIR = abspath('data') form = cgi.FieldStorage() text = form.getvalue('text') filename = form.getvalue('filename') password = form.getvalue('password') if not (filename and text and password): print 'Invalid parameters' sys.exit() if sha.sha(password).hexdigest() != '8843d7f92416211de9ebb963ff4ce28125932878': print 'Invalid password' sys.exit() f = open(join(BASE_DIR,filename), 'w') f.write(text) f.close() print 'The file has been saved.'
代码理解上比较简单,唯一麻烦的地方是web服务器的配置。 我这里使用的是tomcat来做web服务器。需要修改tomcat配置,首先是配置cgi,我引用一段从网上搜来的文字:
要为Tomcat配置CGI服务主要有下面几个步骤:
把servlets-cgi.renametojar (在%CATALINA_HOME%/server/lib/目录下)改名为servlets-cgi.jar。
在Tomcat的%CATALINA_BASE%/conf/web.xml 文件中,把关于<servlet-name> CGI的那段的注释去掉。内容样式如下:
<servlet> <servlet-name>cgi</servlet-name> <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>cgiPathPrefix</param-name> <param-value>WEB-INF/cgi</param-value> </init-param> <init-param> <param-name>executable</param-name> <param-value>/usr/bin/python</param-value> #the5fire注释,这里要改成自己的python执行路径。 </init-param> <load-on-startup>5</load-on-startup> </servlet>
其中参数executable需要自已添加进去,它的值就是我们用来解释CGI脚本的程序。一般情况下这里会配置为Perl。"C:/Perl/bin/"为Perl的安装目录。
在Tomcat的%CATALINA_BASE%/conf/web.xml文件中,把关于对CGI进行映射的那段的注释去掉。内容样式如下:
<servlet-mapping> <servlet-name>cgi</servlet-name> <url-pattern>/cgi-bin/*</url-pattern> </servlet-mapping>
其中url-pattern就是将来我们访问CGI脚本的url地址模式。
完成上面三个步骤后,我们的Tomcat服务器就具有了运行CGI脚本的能力了。
摘自:http://www.blogjava.net/Tauruser/archive/2007/09/06/143097.html
使用hello.cgi测试一下:
#!usr/bin/env python print 'Content-type:text/plain' print print 'Hello World!
然后测试能运行的话,就要把代码放到tomcat的webapp下的某一个app下的WEB-INF中的cgi下。,比如我这里的cgi文件是在tomcat/webapps/test/WEB-INF/cgi/下。另外在cgi目录下要建立一个data文件夹,里面放一个test.txt文件。
最后执行效果如图:
----EOF-----
相关文章推荐
- python项目练习六:使用CGI进行远程编辑
- python项目练习六:使用CGI进行远程编辑
- python基础教程项目六:使用CGI进行远程编辑
- Python项目六: 使用CGI进行远程编辑
- python项目练习八:使用XML-RPC进行远程文件共享
- python 使用CGI进行远程编辑2
- python 使用CGI进行远程编辑1
- python项目练习八:使用XML-RPC进行远程文件共享
- python项目练习八:使用XML-RPC进行远程文件共享
- 使用CGI进行远程编辑
- Python使用Paramiko模块编写脚本进行远程服务器操作
- BOS项目练习(业务受理功能,快速录入工作单{datagrid数据表格编辑功能使用})
- maven项目使用外部tomcat7并进行远程热部署
- 使用nose 进行Python项目的自动化测试
- 使用locals()获得类,进行分发 分类: python 小练习 divide into python python基础学习 2014-02-21 14:51 217人阅读 评论(0) 收藏
- maven项目使用外部tomcat7并进行远程热部署
- 框架 day52 BOS项目练习(业务受理功能,快速录入工作单{datagrid数据表格编辑功能使用})
- maven项目使用外部tomcat7并进行远程热部署
- Python使用Paramiko模块编写脚本进行远程服务器操作
- [Python Fabric] [SSH] Mac OS X 10.9 + Vagrant虚拟环境使用Python Fabric进行SSH远程登录的简单实验