python web编程-CGI帮助web服务器处理客户端编程
2014-11-05 23:30
190 查看
这几篇博客均来自python核心编程
如果你有任何疑问,欢迎联系我或者仔细查看这本书的地20章
另外推荐下这本书,希望对学习python的同学有所帮助
概念预热
eb客户端通过url请求web服务器里的静态页面,但是要怎么做到洞察不同用户同的输入?比如说表单提交等来产生不同的返回结果呢
一个简单的思路是web服务器把这些请求提交给另外一个程序,它接受用户输入然后处理,根据输入生成一个静态的html文件交给web服务器
复杂上面这样的流程程序就是CGI,是单独出来的
创建HTML 的CGI 应用程序通常是用高级编程语言来实现的,可以接受、处理数据,向服务器端返回HTML 页面。目前使用的编程语言有Perl, PHP, C/C++,或者Python。
从而其中任何一种语言用来开发网页的都可以应用这个模式,比如ruby,lisp,R语言等
这也就是为什么C++/C是怎么写网页程序的方式吧
这提高起来很让人兴奋,不过现在的web应用已经不使用CGI了,而且是几乎没有
如今的Web 服务器典型的部件有Aphache和集成的数据库部件(MySQL 或者PostgreSQL),Java(Tomcat),PHP 和各种Perl 模块,Python 模
块,以及SSL/security。
什么为什么有python模块?看看CGI的维基可能会得到一个初步答案
现在有很多的web开发框架比如说Django,web2py,和ruby那个很出名的框架弥补了CGI的不足,但是他们的工作方式以及解决方案仍然是上面的思路与模式
根据用户输入生成HTML页面,所以说这和现在任然流行这些框架并不矛盾
从上面的资料上来说其实这些解决方案更像是一个思路不同的改进,只是CGI词汇的局限性导致它不在流行
CGI应用程序在小型的团体任然可以使用
使用python创建一个CGI应用程序
使用python进行CGI开发的前提是具有一个web服务器,并将其配置成可以处理python cgi请求模式,然后让你的web服务器访问cgi脚本
如果你需要一个真正的Web 服务器,可以下载并安装Aphache。Aphache 的插件或模块可以处理Python CGI
但是这里并不需要,不要忘了python是自带服务器的
python -m CGIHTTPServer 8000
这会在当前目录建立一个CGI web服务器
这样客户端的请求就可以调用执行python脚本了也就是CGI程序
创建一个test目录,然后在这个目录执行上面的代码,开启一个cgihttp服务器
然后穿件代码和文件目录如下:
#!/usr/bin/env python import cgi from urllib import quote_plus from string import capwords header = 'Content-Type: text/html\n\n' url = '/cgi-bin/friends3.py' errhtml = '''<HTML><HEAD><TITLE> Friends CGI Demo</TITLE></HEAD> <BODY><H3>ERROR</H3> <B>%s</B><P> <FORM><INPUT TYPE=button VALUE=Back ONCLICK="window.history.back()"></FORM> </BODY></HTML>''' def showError(error_str): print header + errhtml % (error_str) formhtml = '''<HTML><HEAD><TITLE> Friends CGI Demo</TITLE></HEAD> <BODY><H3>Friends list for: <I>%s</I></H3> <FORM ACTION="%s"> <B>Your Name:</B> <INPUT TYPE=hidden NAME=action VALUE=edit> <INPUT TYPE=text NAME=person VALUE="%s" SIZE=15> <P><B>How many friends do you have?</B> %s <P><INPUT TYPE=submit></FORM></BODY></HTML>''' fradio = '<INPUT TYPE=radio NAME=howmany VALUE="%s" %s> %s\n' def showForm(who, howmany): friends = '' for i in [0, 10, 25, 50, 100]: checked = '' if str(i) == howmany: checked = 'CHECKED' friends = friends + fradio % \ (str(i), checked, str(i)) print header + formhtml % (who, url, who, friends) reshtml = '''<HTML><HEAD><TITLE> Friends CGI Demo</TITLE></HEAD> <BODY><H3>Friends list for: <I>%s</I></H3> Your name is: <B>%s</B><P> You have <B>%s</B> friends. <P>Click <A HREF="%s">here</A> to edit your data again. </BODY></HTML>''' def doResults(who, howmany): newurl = url + '?action=reedit&person=%s&howmany=%s' % \ (quote_plus(who), howmany) print header + reshtml % (who, who, howmany, newurl) def process(): error = '' form = cgi.FieldStorage() if form.has_key('person'): who = capwords(form['person'].value) else: who = 'NEW USER' if form.has_key('howmany'): howmany = form['howmany'].value else: if form.has_key('action') and \ form['action'].value == 'edit': error = 'Please select number of friends.' else: howmany = 0 if not error: if form.has_key('action') and \ form['action'].value != 'reedit': doResults(who, howmany) else: showForm(who, howmany) else: showError(error) if __name__ == '__main__': process()
friends3.py
首先来访问我们的htm文件:localhost:8000/friends.htm
你会得到一个web表单页面,查看它的源代码,你将看到当你提交的时候将会调用friends1.py文件,输入一些值提交后悔转到另外一个页面,这个页面就是friends1.py生成的html页面,但是你在本地是找不到相关html文件的,在friends1.py里,print出了需要返回的页面信息
实际上可以整合这两个页面在一起,你在浏览器访问:localhost:8000/cgi-bin/friends2.py,这个时候浏览器并不会返回这个文件里面的内容,而是执行这个文件,这个文件默认返回了即print了那个friends.htm的源码,所以你得到的和你访问localhost:8000/friends.htm得到的一样,你输入一些字符进行提交,将会发现跳转到一个页面,这个页面也是这个py文件产生的,但是却在本地找不到任何的htm文件
friends3.py包含了一个返回页面,这里不介绍
相关文章推荐
- Web 服务器处理客户端请求过程
- 处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
- 处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
- 无法在web服务器上启动调试.服务器因语法无效而未能处理调试请求.有关更多信息,请单击"帮助"
- Linux下网络编程之自定义协议进行并发多客户端与服务器的通信(多进程处理并发)不足占用资源太多
- 处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
- 处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
- android下socket编程问题:服务器关闭时,客户端发送请求的异常处理
- 处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
- I/O模型和原理,以及简单解析客户端请求WEB服务器内部处理过程,MPM三种模
- 处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
- python web编程-web客户端编程
- 处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
- VMware vSphere Web Services SDK编程指南(五)- 5.4 客户端应用(Web 服务器会话令牌)
- Lunix网络编程之socket(客户端发送请求,服务器处理例如:排序,两人联机五子棋)
- web服务器和客户端完成并行处理请求三大方式
- 301重定向3:由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面 错误处理
- 处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
- 处理【由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面】
- XP下解决“system.web.services.protocols.soapexception:服务器无法处理请求。…〉system.exception:system.data.oracleclient 需要oracle客户端软件8.1.7或更高版本。