Python Web程序搭建简单的Web服务器


Posted in Python onJuly 31, 2019

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

与其它Web后端语言不同,Python语言需要自己编写Web服务器。

如果你使用一些现有的框架的话,可以省略这一步;

如果你使用Python CGI编程的话,也可以省略这一步;

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

利用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类。

自定义处理程序

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

以下为完整的程序:

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

运行访问

我这里将上面上代码保存为:C:\Python\webserver\server1.py,使用UTF-8编码;

打开命令行,切换到 C:\Python\webserver\ 目录,

执行:python server1.py

Python Web程序搭建简单的Web服务器

可能会弹出防火墙警告,点击允许访问。

Python Web程序搭建简单的Web服务器

在浏览器中访问,查看效果,打开浏览器,输入:http://localhost:8000/,结果如下图:

在文本框中输入一个URL,如(http://blog.csdn.net/testcs_dn),点击Show QR,会生成一张二维码的图片

Python Web程序搭建简单的Web服务器

扫一扫这张二维码看看吧

Python Web程序搭建简单的Web服务器

小结

与其它Web后端语言不同,Python语言需要自己编写Web服务器;

但与Go语言相比,Python稍微有些难以上手。

这里只是编写运行一个简单的例子,看看效果找找感觉。

虽然Python的大名已经知道很久,但最近才真正的接触,文中有不对的地方,有更好的方法还请前辈们多多指教!

2017-12-12更新

此示例的代码在 Eclipse+pydev 环境中打开存在缩进问题,需要 大家注意:

Python Web程序搭建简单的Web服务器

需要调了一下格式   就把下图红框中的代码整体后移了一下:

Python Web程序搭建简单的Web服务器

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python paramiko实现ssh远程访问的方法
Dec 03 Python
python使用socket向客户端发送数据的方法
Apr 29 Python
用Python写冒泡排序代码
Apr 12 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
python3解析库lxml的安装与基本使用
Jun 27 Python
基于Python开发chrome插件的方法分析
Jul 07 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
Apr 11 Python
django如何自己创建一个中间件
Jul 24 Python
python 定时器每天就执行一次的实现代码
Aug 14 Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 Python
python中rc1什么意思
Jun 19 Python
利于python脚本编写可视化nmap和masscan的方法
Dec 29 Python
python字典的常用方法总结
Jul 31 #Python
python Django的web开发实例(入门)
Jul 31 #Python
Flask框架模板继承实现方法分析
Jul 31 #Python
Flask框架模板渲染操作简单示例
Jul 31 #Python
opencv导入头文件时报错#include的解决方法
Jul 31 #Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
Jul 31 #Python
Django上使用数据可视化利器Bokeh解析
Jul 31 #Python
You might like
压力如何影响浓缩咖啡品质
2021/03/03 咖啡文化
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
laravel 4安装及入门图文教程
2014/10/29 PHP
php中namespace use用法实例分析
2016/01/22 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
jquery 得到当前页面高度和宽度的两个函数
2010/02/21 Javascript
JS的千分位算法实现思路
2013/07/31 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
node.js中的console用法总结
2014/12/15 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
Python多线程编程(一):threading模块综述
2015/04/05 Python
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
2019/07/22 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
HTML5 Web存储方式的localStorage和sessionStorage进行数据本地存储案例应用
2012/12/09 HTML / CSS
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
加拿大高尔夫超市:Golf Town
2018/01/12 全球购物
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
学生保证书范文
2014/04/28 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
投标单位介绍信
2015/05/05 职场文书
学困生转化工作总结
2015/08/13 职场文书
Python数据分析入门之数据读取与存储
2021/05/13 Python
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python