上一篇讲了《Python入门》Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第一个Python Web程序——简单的Web服务器。
与其它Web后端语言不同,Python语言需要自己编写Web服务器。
如果你使用一些现有的框架的话,可以省略这一步;
如果你使用Python CGI编程的话,也可以省略这一步;
利用Python自带的包可以建立简单的web服务器。在DOS里cd到准备做服务器根目录的路径下,输入命令:python -m Web服务器模块 [端口号,默认8000]
例如:python -m SimpleHTTPServer 8080
然后就可以在浏览器中输入http://localhost:端口号/路径
来访问服务器资源。
例如:
http://localhost:8080/index.htm(当然index.htm文件得自己创建)
其他机器也可以通过服务器的IP地址来访问。这里的“Web服务器模块”有如下三种:
BaseHTTPServer: 提供基本的Web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler。
SimpleHTTPServer: 包含执行GET和HEAD请求的SimpleHTTPRequestHandler类。CGIHTTPServer: 包含处理POST请求和执行CGIHTTPRequestHandler类。
以下为完整的程序:
import os #Python的标准库中的os模块包含普遍的操作系统功能
import re #引入正则表达式对象
import urllib #用于对URL进行编解码
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler #导入HTTP处理相关的模块
#自定义处理程序,用于处理HTTP请求
class TestHTTPHandler(BaseHTTPRequestHandler):
#处理GET请求
def do_GET(self):
#页面输出模板字符串
templateStr = '''
<html>
<head>
<title>QR Link Generator</title>
</head>
<body>
%s
<br>
<br>
<form action="/qr" name=f method="GET"><input maxLength=1024 size=70
name=s value="" title="Text to QR Encode"><input type=submit
value="Show QR" name=qr>
</form>
</body>
</html> '''
# 将正则表达式编译成Pattern对象
pattern = re.compile(r'/qr\?s=([^\&]+)\&qr=Show\+QR')
# 使用Pattern匹配文本,获得匹配结果,无法匹配时将返回None
match = pattern.match(self.path)
qrImg = ''
if match:
# 使用Match获得分组信息
qrImg = '<img src="http://chart.apis.google.com/chart?chs=300x300&cht=qr&choe=UTF-8&chl=' + match.group(1) + '" /><br />' + urllib.unquote(match.group(1))
self.protocal_version = 'HTTP/1.1' #设置协议版本
self.send_response(200) #设置响应状态码
self.send_header("Welcome", "Contect") #设置响应头
self.end_headers()
self.wfile.write(templateStr % qrImg) #输出响应内容
#启动服务函数
def start_server(port):
http_server = HTTPServer(('', int(port)), TestHTTPHandler)
http_server.serve_forever() #设置一直监听并接收请求
os.chdir('static') #改变工作目录到 static 目录
start_server(8000) #启动服务,监听8000端口
此示例的代码在 Eclipse+pydev 环境中打开存在缩进问题,需要 大家注意:
需要调了一下格式 就把下图红框中的代码整体后移了一下:
参考:
Python 基础教程
一起写一个 Web 服务器
深入理解 Python WSGI:一起写一个 Web 服务器