Python入门教程您现在的位置是:首页 > 专栏文集 > Python入门教程

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

<a href='mailto:'>微wx笑</a>的头像微wx笑2020-04-14 11:40:52Python入门教程人已围观关键字: Python  Web  服务器  

上一篇讲了《Python入门》Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第一个Python Web程序——简单的Web服务器。与其它Web后端语言不

上一篇讲了《Python入门》Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第一个Python Web程序——简单的Web服务器。
twR编程技术_踩坑日志_进阶指南_无知人生

与其它Web后端语言不同,Python语言需要自己编写Web服务器。
twR编程技术_踩坑日志_进阶指南_无知人生

如果你使用一些现有的框架的话,可以省略这一步;twR编程技术_踩坑日志_进阶指南_无知人生

如果你使用Python CGI编程的话,也可以省略这一步;twR编程技术_踩坑日志_进阶指南_无知人生

用Python建立最简单的web服务器

利用Python自带的包可以建立简单的web服务器。在DOS里cd到准备做服务器根目录的路径下,输入命令:

twR编程技术_踩坑日志_进阶指南_无知人生

python -m Web服务器模块 [端口号,默认8000]twR编程技术_踩坑日志_进阶指南_无知人生

例如:
twR编程技术_踩坑日志_进阶指南_无知人生

python -m SimpleHTTPServer 8080twR编程技术_踩坑日志_进阶指南_无知人生

然后就可以在浏览器中输入

http://localhost:端口号/路径
twR编程技术_踩坑日志_进阶指南_无知人生

来访问服务器资源。 twR编程技术_踩坑日志_进阶指南_无知人生

例如:twR编程技术_踩坑日志_进阶指南_无知人生

http://localhost:8080/index.htm(当然index.htm文件得自己创建)twR编程技术_踩坑日志_进阶指南_无知人生

其他机器也可以通过服务器的IP地址来访问。

这里的“Web服务器模块”有如下三种:
twR编程技术_踩坑日志_进阶指南_无知人生

BaseHTTPServer: 提供基本的Web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler。twR编程技术_踩坑日志_进阶指南_无知人生

SimpleHTTPServer: 包含执行GET和HEAD请求的SimpleHTTPRequestHandler类。
twR编程技术_踩坑日志_进阶指南_无知人生

CGIHTTPServer: 包含处理POST请求和执行CGIHTTPRequestHandler类。twR编程技术_踩坑日志_进阶指南_无知人生


twR编程技术_踩坑日志_进阶指南_无知人生

自定义处理程序

Google在http://chart.apis.google.com 上提供了一个将表单数据自动转换为图表的服务。不过,该服务很难交互, 因为你需要将数据作为查询放到URL中。此程序为一种数据格式提供了更好的的接口: 给定一小段文本,它将调用图表服务器来生成二维码(QR码),这是一种编码文本的点格矩阵。 该图像可被你的手机摄像头捕获,并解释为一个字符串,比如URL, 这样就免去了你在狭小的手机键盘上键入URL的麻烦。twR编程技术_踩坑日志_进阶指南_无知人生

以下为完整的程序:twR编程技术_踩坑日志_进阶指南_无知人生


twR编程技术_踩坑日志_进阶指南_无知人生

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端口


twR编程技术_踩坑日志_进阶指南_无知人生

运行访问

我这里将上面上代码保存为:C:\Python\webserver\server1.py,使用UTF-8编码;twR编程技术_踩坑日志_进阶指南_无知人生

打开命令行,切换到 C:\Python\webserver\ 目录,twR编程技术_踩坑日志_进阶指南_无知人生

执行:python server1.pytwR编程技术_踩坑日志_进阶指南_无知人生

twR编程技术_踩坑日志_进阶指南_无知人生

可能会弹出防火墙警告,点击允许访问。twR编程技术_踩坑日志_进阶指南_无知人生


twR编程技术_踩坑日志_进阶指南_无知人生

在浏览器中访问,查看效果,打开浏览器,输入:http://localhost:8000/,结果如下图:twR编程技术_踩坑日志_进阶指南_无知人生

在文本框中输入一个URL,如(http://blog.csdn.net/testcs_dn),点击Show QR,会生成一张二维码的图片twR编程技术_踩坑日志_进阶指南_无知人生


twR编程技术_踩坑日志_进阶指南_无知人生

扫一扫这张二维码看看吧twR编程技术_踩坑日志_进阶指南_无知人生


twR编程技术_踩坑日志_进阶指南_无知人生


twR编程技术_踩坑日志_进阶指南_无知人生

小结

与其它Web后端语言不同,Python语言需要自己编写Web服务器;twR编程技术_踩坑日志_进阶指南_无知人生

但与Go语言相比,Python稍微有些难以上手。
twR编程技术_踩坑日志_进阶指南_无知人生

这里只是编写运行一个简单的例子,看看效果找找感觉。twR编程技术_踩坑日志_进阶指南_无知人生

虽然Python的大名已经知道很久,但最近才真正的接触,文中有不对的地方,有更好的方法还请前辈们多多指教!twR编程技术_踩坑日志_进阶指南_无知人生

2017-12-12更新

此示例的代码在 Eclipse+pydev 环境中打开存在缩进问题,需要 大家注意:twR编程技术_踩坑日志_进阶指南_无知人生


twR编程技术_踩坑日志_进阶指南_无知人生

需要调了一下格式   就把下图红框中的代码整体后移了一下:
twR编程技术_踩坑日志_进阶指南_无知人生


twR编程技术_踩坑日志_进阶指南_无知人生

参考:twR编程技术_踩坑日志_进阶指南_无知人生

Python 基础教程
twR编程技术_踩坑日志_进阶指南_无知人生

一起写一个 Web 服务器
twR编程技术_踩坑日志_进阶指南_无知人生

深入理解 Python WSGI:一起写一个 Web 服务器twR编程技术_踩坑日志_进阶指南_无知人生


twR编程技术_踩坑日志_进阶指南_无知人生

本文由 微wx笑 创作,采用 CC BY-NC 4.0 许可协议。 非商业性使用可自由转载、引用、甚至修改,但需署名作者且注明出处。

很赞哦! () 有话说 ()

上一篇:返回列表

下一篇:返回列表