python web编程-CGI帮助web服务器处理客户端编程

这几篇博客均来自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>

friends.htm

 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)

friends1.py

 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()

friends.py

 1 #!/usr/bin/env python
 2
 3 import cgi
 4 from urllib import quote_plus
 5 from string import capwords
 6
 7 header = ‘Content-Type: text/html\n\n‘
 8 url = ‘/cgi-bin/friends3.py‘
 9
10 errhtml = ‘‘‘<HTML><HEAD><TITLE>
11 Friends CGI Demo</TITLE></HEAD>
12 <BODY><H3>ERROR</H3>
13 <B>%s</B><P>
14 <FORM><INPUT TYPE=button VALUE=Back
15 ONCLICK="window.history.back()"></FORM>
16 </BODY></HTML>‘‘‘
17
18 def showError(error_str):
19     print header + errhtml % (error_str)
20
21 formhtml = ‘‘‘<HTML><HEAD><TITLE>
22 Friends CGI Demo</TITLE></HEAD>
23 <BODY><H3>Friends list for: <I>%s</I></H3>
24 <FORM ACTION="%s">
25 <B>Your Name:</B>
26 <INPUT TYPE=hidden NAME=action VALUE=edit>
27 <INPUT TYPE=text NAME=person VALUE="%s" SIZE=15>
28 <P><B>How many friends do you have?</B>
29 %s
30 <P><INPUT TYPE=submit></FORM></BODY></HTML>‘‘‘
31
32 fradio = ‘<INPUT TYPE=radio NAME=howmany VALUE="%s" %s> %s\n‘
33
34 def showForm(who, howmany):
35     friends = ‘‘
36     for i in [0, 10, 25, 50, 100]:
37         checked = ‘‘
38         if str(i) == howmany:
39             checked = ‘CHECKED‘
40         friends = friends + fradio % 41             (str(i), checked, str(i))
42     print header + formhtml % (who, url, who, friends)
43
44 reshtml = ‘‘‘<HTML><HEAD><TITLE>
45 Friends CGI Demo</TITLE></HEAD>
46 <BODY><H3>Friends list for: <I>%s</I></H3>
47 Your name is: <B>%s</B><P>
48 You have <B>%s</B> friends.
49 <P>Click <A HREF="%s">here</A> to edit your data again.
50 </BODY></HTML>‘‘‘
51
52 def doResults(who, howmany):
53     newurl = url + ‘?action=reedit&person=%s&howmany=%s‘ % 54         (quote_plus(who), howmany)
55     print header + reshtml % (who, who, howmany, newurl)
56
57 def process():
58     error = ‘‘
59     form = cgi.FieldStorage()
60
61     if form.has_key(‘person‘):
62         who = capwords(form[‘person‘].value)
63     else:
64         who = ‘NEW USER‘
65
66     if form.has_key(‘howmany‘):
67         howmany = form[‘howmany‘].value
68     else:
69         if form.has_key(‘action‘) and 70                 form[‘action‘].value == ‘edit‘:
71             error = ‘Please select number of friends.‘
72         else:
73             howmany = 0
74
75     if not error:
76         if form.has_key(‘action‘) and 77                 form[‘action‘].value != ‘reedit‘:
78             doResults(who, howmany)
79         else:
80             showForm(who, howmany)
81     else:
82         showError(error)
83
84 if __name__ == ‘__main__‘:
85         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包含了一个返回页面,这里不介绍

时间: 2024-08-02 02:49:47

python web编程-CGI帮助web服务器处理客户端编程的相关文章

java 网络编程 TCP协议 java 服务器和客户端 java socket编程

一个 HelloWord 级别的 Java Socket 通信的例子.通讯过程:        先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求.然后运行 Client 端,客户端发出连接请求,服务端监听到这次请求后向客户端发回接受消息,连接建立,启动一个线程去处理这次请求,然后继续死循环监听其他请求.客户端输入字符串后按回车键,向服务器发送数据.服务器读取数据后回复客户端数据.这次请求处理完毕,启动的线程消亡.如果客户端接收到 "OK" 之外的返回数据,会再次

使用Python的socket模块搭建tcp服务器与客户端

# __author__ = 'ZSnail' # socket就是一个网络通讯协议 # 服务器端 import socket server = socket.socket() server.bind(('127.0.1.1', 6969)) # 绑定要监听的端口 server.listen() # 监听 print('开始等??') # 在这里会形成阻塞,一直等到有客户连接 # conn就是客户端连过来而在服务器内生成的一个连接实例 conn, address = server.accept(

python写一些简单的tcp服务器和客户端

代码贴上,做个记录 TcpClient # -*- coding:utf-8 -*- import socket target_host = "127.0.0.1" #服务器端地址 target_port = 5555 #与服务器的端口号一致 while True: client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) client.connect((target_host,target_port)) #data存储要发送的

Python 绝技 —— UDP 服务器与客户端

i春秋作家:wasrehpic 0x00 前言 在上一篇文章「Python 绝技 -- TCP 服务器与客户端」中,介绍了传输层的核心协议 TCP ,并运用 Python 脚本的 socket 模块演示了 TCP 服务器与客户端的通信过程. 本篇将按照同样的套路,先介绍传输层的另一个核心协议 UDP,再比较 TCP 与 UDP 的特点,最后借助 Python 脚本演示 UDP 服务器与客户端的通信过程. 0x01 UDP 协议 UDP(User Datagram Protocol,用户数据报协议

《Python入门》第一个Python Web程序——简单的Web服务器

上一篇讲了<Python入门>Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第一个Python Web程序--简单的Web服务器. 与其它Web后端语言不同,Python语言需要自己编写Web服务器. 如果你使用一些现有的框架的话,可以省略这一步: 如果你使用Python CGI编程的话,也可以省略这一步: 用Python建立最简单的web服务器 利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录

python web编程-web客户端编程

web应用也遵循客户服务器架构 浏览器就是一个基本的web客户端,她实现两个基本功能,一个是从web服务器下载文件,另一个是渲染文件 同浏览器具有类似功能以实现简单的web客户端的模块式urllib以及urllib2(可以打开需要登录的网页)等模块 另外还有一些负载的web客户端,它不仅下载web文件,还执行其它复杂的任务,一个典型的例子就是爬虫 python实现爬虫也有一些框架模块:如Scrapy 使用python创建一个简单web客户端 你要弄清楚浏览器只是web客户端的一种,而且功能有限,

使用Python或Node创建简单web服务器和FTP服务器实现文件共享

有时我们需要给旁边的人传一些文件,如果大家都用windows或者mac,那么皆大欢喜,直接用QQ传就可以了,但如果有个不省心的家伙用linux怎么办?可以用网盘或者U盘,或者另外一种更酷一些的方法来实现文件共享. 使用Python(2.6-2.7)创建简单的web服务器 进入某目录,执行 python -m SimpleHTTPServer port 即可创建一个局域网内可用的web服务器.使用ip:port进行访问. 使用Node创建简单的web服务器 首先执行一下命令安装http-serve

常见的web容器与应用程序服务器区别及对比

tomcat 类型:servlet容器和HTTP web服务器 功能:实现了一些J2EE特性包括Java Servlet.JSP页面.Java EL和websocket,还有纯java的http web server. 重要组件: catalina是一个servlet容器 coyote是连接器 Jasper是tomcat JSP引擎,解析编译JSP称为servlet,运行时,可以检测JSP的改动并且重新编译它们. Cluster用来管理大型应用,用来做LB WAS(Wephere Applica

Manual | BSD手册| Linux手册 | 数据库手册 | 编程开发手册 | WEB开发手册 | 软件应用手册 | 网络技术手册 | GNU手册

豆豆手册 □ BSD手册 □ Linux手册 □ 数据库手册 □ 编程开发手册 □ WEB开发手册 □ 软件应用手册 □ 网络技术手册 □ GNU手册 在线手册 首 页 BSD手册 ·FreeBSD Handbook 简体中文版 ·NetBSD Internals ·NetBSD 指导手册 ·FreeBSD Porter 手册 ·FREEBSD 使用者手册 ·FreeBSD 5.x 架设管理与应用 ·FreeBSD 6.0架设管理与应用 ·OpenBSD FAQ中文版 Linux手册 ·Turb