这几篇博客均来自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服务器
然后穿件代码和文件目录如下:
每个文件的代码看这里:
1 <HTML><HEAD><TITLE> 2 Friends CGI Demo (static screen) 3 </TITLE></HEAD> 4 <BODY><H3>Friends list for: <I>NEW USER</I></H3> 5 <FORM ACTION="/cgi-bin/friends1.py"> 6 <B>Enter your Name:</B> 7 <INPUT TYPE=text NAME=person VALUE="NEW USER" SIZE=15> 8 <P><B>How many friends do you have?</B> 9 <INPUT TYPE=radio NAME=howmany VALUE="0" CHECKED> 0 10 <INPUT TYPE=radio NAME=howmany VALUE="10"> 10 11 <INPUT TYPE=radio NAME=howmany VALUE="25"> 25 12 <INPUT TYPE=radio NAME=howmany VALUE="50"> 50 13 <INPUT TYPE=radio NAME=howmany VALUE="100"> 100 14 <P><INPUT TYPE=submit></FORM></BODY></HTML>
1 #!/usr/bin/env python 2 3 import cgi 4 5 reshtml = '''Content-Type: text/html\n 6 <HTML><HEAD><TITLE> 7 Friends CGI Demo (dynamic screen) 8 </TITLE></HEAD> 9 <BODY><H3>Friends list for: <I>%s</I></H3> 10 Your name is: <B>%s</B><P> 11 You have <B>%s</B> friends. 12 </BODY></HTML>''' 13 14 form = cgi.FieldStorage() 15 who = form['person'].value 16 howmany = form['howmany'].value 17 print reshtml % (who, who, howmany)
1 #!/usr/bin/env python 2 3 import cgi 4 5 header = 'Content-Type: text/html\n\n' 6 7 formhtml = '''<HTML><HEAD><TITLE> 8 Friends CGI Demo</TITLE></HEAD> 9 <BODY><H3>Friends list for: <I>NEW USER</I></H3> 10 <FORM ACTION="/cgi-bin/friends2.py"> 11 <B>Enter your Name:</B> 12 <INPUT TYPE=hidden NAME=action VALUE=edit> 13 <INPUT TYPE=text NAME=person VALUE="NEW USER" SIZE=15> 14 <P><B>How many friends do you have?</B> 15 %s 16 <P><INPUT TYPE=submit></FORM></BODY></HTML>''' 17 18 fradio = '<INPUT TYPE=radio NAME=howmany VALUE="%s" %s> %s\n' 19 20 def showForm(): 21 friends = '' 22 for i in [0, 10, 25, 50, 100]: 23 checked = '' 24 if i == 0: 25 checked = 'CHECKED' 26 friends = friends + fradio % \ 27 (str(i), checked, str(i)) 28 29 print header + formhtml % (friends) 30 31 reshtml = '''<HTML><HEAD><TITLE> 32 Friends CGI Demo</TITLE></HEAD> 33 <BODY><H3>Friends list for: <I>%s</I></H3> 34 Your name is: <B>%s</B><P> 35 You have <B>%s</B> friends. 36 </BODY></HTML>''' 37 38 def doResults(who, howmany): 39 print header + reshtml % (who, who, howmany) 40 41 def process(): 42 form = cgi.FieldStorage() 43 if form.has_key('person'): 44 who = form['person'].value 45 else: 46 who = 'NEW USER' 47 48 if form.has_key('howmany'): 49 howmany = form['howmany'].value 50 else: 51 howmany = 0 52 53 if form.has_key('action'): 54 doResults(who, howmany) 55 else: 56 showForm() 57 58 if __name__ == '__main__': 59 process()