当前位置 主页 > 服务器问题 > win服务器问题汇总 >

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

    栏目:win服务器问题汇总 时间:2019-12-05 17:31

    上一篇讲了《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端口