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自定义解析简单xml格式文件的方法
May 11 Python
python开发之list操作实例分析
Feb 22 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
Apr 18 Python
用pyqt5 给按钮设置图标和css样式的方法
Jun 24 Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 Python
Python使用selenium + headless chrome获取网页内容的方法示例
Oct 16 Python
python实现小世界网络生成
Nov 21 Python
Python实现括号匹配方法详解
Feb 10 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
OpenCV3.3+Python3.6实现图片高斯模糊
May 18 Python
基于Python编写简易版的天天跑酷游戏的示例代码
Mar 23 Python
Django框架之路由用法
Jun 10 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
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
php获取QQ头像并显示的方法
2014/12/23 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
JavaScript实现页面实时显示当前时间的简单实例
2013/07/20 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
javascript多行字符串的简单实现方式
2015/05/04 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
JS实现数组去重方法总结(六种方法)
2017/07/14 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
Vue-Router的使用方法
2018/09/05 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
详解CSS3 弹性布局快速入门
2019/06/06 HTML / CSS
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
小学教师事迹材料
2014/01/13 职场文书
质检部经理岗位职责
2014/02/19 职场文书
中医学专业自荐信范文
2014/04/01 职场文书
村长反四风问题个人对照检查材料
2014/09/21 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
小学教学工作总结2015
2015/05/13 职场文书
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
ubuntu端向日葵键盘输入卡顿问题及解决
2022/12/24 Servers