1、介绍
(1)Web应用:客户端/服务器计算
Web客户端是浏览器
HTTP(超文本传输协议)HTTP协议属于无状态协议。
(2)因特网
ISP(因特网供应商)
telnet(允许用户在因特网上登录到远程主机)
FTP/SMTP/NNTP(新闻对新闻传输协议)
Gopher(Web搜索引擎的雏形)
2、使用Python进行Web应用
(1)基础知识
- 统一资源定位符(URI)(Identifier)
- 统一资源定位器(URL)(Locator)
- 统一资源名称(URN)(Name)
URL使用这种格式:prot_sch://net_loc/path;params?query#frag
- prot_sch 网络协议
- net_loc 服务器位置
- path 路径
- params 可选参数
- query 连接符(&)连接键值对
- frag 拆分文档中的特殊锚
net_loc使用这种格式:user:password@host:port
- user 登录名
- password 密码
- host 主机
- port 端口号(默认80)
(2)urlparse模块
①urlparse.urlparse()
将urlstr解析成一个6元组(prot_sch,net_loc,path,params,query,frag)。
urlparse.urlparse(urlstr,defProtSch=None,allowFrag=None)
②urlparse.urlunparse(urltup)
与urlparse相反,它拼合一个6元组,生成url。
urlunparse(urlparse(urlstr))≡urlstr
③urlparse.urljoin()
urljoin取得baseurl,并将其基路径(net_loc附加一个完整的路径,但是不包括终端的文件)与newurl连接起来。
urlparse.urljoin(baseurl,newurl,allowFrag=None)
(3)urllib模块
urllib提供了一个高级的Web交流库,支持Web协议、HTTP、FTP和Gopher协议,也支持对本地文件的访问。而httplib、ftplib、gopherlib等模块提供了更加低层的支持。
①urllib.open()
打开urlstr所指向的URL。若使用POST方法,请求的字符串(编码的)应该放到postQueryData变量中。urlopen()返回一个文件类型对象f,支持f.read(),f.readline(),f.readlines(),f.close(),f.fileno()。此外,f.info()方法可以返回MIME(多目标因特网邮件扩展)头文件,这个头文件通知浏览器返回的文件类型可以用哪类应用程序打开。f.geturl()方法返回f所打开的真正的URL。
urllib.open(urlstr,postQueryData=None)
②urllib.urlretrieve()
从urlstr中读取内容,该方法还可以将urlstr定位到的整个HTML文件下载到你本地的硬盘上,保存为一个本地文件或临时文件。downloadStatusHook这个函数将会在每块数据下载或传输完成后被调用。调用时使用3个参数:目前读入的块数、块的字节数和文件的总字节数。urlretrieve方法返回一个2元组(filename,mime_hdrs)filename包含下载数据的本地文件名,mime_hdrs表示对Web服务器响应后返回的一系列MIME文件头。
urllib.urlretrieve(urlstr,localfile=None,downloadStatusHook=None)
③urllib.quote()/urllib.quote_plus()
quote*()函数获取url数据,并将其编码,从而适用于URL字符串中。
quote(urldata,safe=’/’)将urldata的无效的URL字符编码;在safe列的则不必编码。逗号、下划线、句号、斜线和字母数字这类符号是不需要转化的。safe中包含一系列不能被转换的字符。默认为斜线(/)。
quote_plus()和quote()很像,它还可以将空格编码成(+)号。
>>>final='http://www/~foo/cgi-bin/s.py?name=joe mama&num=6'
>>>urllib.quote(final)
'http%3awww/%7efoo/cgi-bin/s.py%3fname%3djoe%20mama%26num%3d6'
④urllib.urlencode()
接受字典的键-值对,并将其编译成CGI请求的URL字符串的一部分。
安全套接字层支持:urllib/httplib/imaplib/poplib/smtplib等模块都含有ssl。
(4)urllib2模块
可以处理更复杂的URL的打开问题。
有基本认证需求的Web站点:建立基础认证处理器、安全域、域、基本URL;在浏览器提示输入用户名和密码。
3、CGI:帮助Web服务器处理客户端数据
(1)CGI
CGI(标准网关接口,Common Gateway Interface)CGI为能够处理用户表单、生成并返回动态HTML页的应用程序和Web服务器间的交互。
CGI程序<=>CGI<=>Web服务器<=>客户端
CGI应用程序与典型的应用程序不同
- 输入:从Web客户端获取数据
- 输出:输出到Web客户端
- 交互:交互发生在客户端、服务器和CGI应用程序间
(2)cgi模块
主要类有FieldStorage类,完成所有的工作。
4、建立CGI应用程序
(1)建立Web服务器
安装Web服务器,将其配置成可以处理PythonCGI请求的模式。
然后让你的Web服务器服务CGI脚本。
使用Python自带的Web服务器(或者Apache)
$ python -m CGIHTTPServer
在当前机器的当前目录下建立一个端口为8000的Web服务器,然后可以在启动这个服务器的目录下建立一个Cgi-bin,将Python CGI脚本放在那里。
(2)建立表单页、生成结果页
5、高级CGI
(1)cookie的使用
(2)CGI字段的多重值
(3)用multipart表单实现文件上传
CGI特别指出只允许两种表单编码:”application/x-www-form-urlencoded”(默认)和 “multipart/form-data”。
目前上传的文件仅能表现为multipart编码。