学习Python:WSGI_01_小程序

来源:互联网 发布:网络大病众筹 编辑:程序博客网 时间:2024/06/05 10:39

最近一直在学习OpenStack的东西,由于对其中的很多机制都不太了解,这导致我在阅读代码时遇到了困难。

首先遇到的问题就是:OpenStack中一个组件向另一个组件发送消息后,是怎么找到目标组件API中对应方法的。

这个问题,在我学习了其中使用的一些第三方库之后,才有了一定的了解。这里,我们先看一个很简单的小程序,文件为example01.py,其代码如下:

from wsgiref.simple_server import make_serverdef my_application(environ, start_response):    response_body = "This is response body."    status = '200 OK'    response_headers = [        ('Content-Type', 'text/plain'),        ('Content-Length', str(len(response_body)))    ]    start_response(status, response_headers)    return [response_body]my_server = make_server('localhost', 8052, my_application)my_server.handle_request()

在文件目录下,执行命令:python example01.py
打开浏览器,输入http://localhost:8052,然后回车,可以看到如下响应:

这里写图片描述

如果能够正常显示,说明这段简短的代码已经能够正常工作了。这里不得不称赞Python及其工具类库的强大,很少的代码,就能让你完成重要的工作。

下面,我们来说明一下这段代码的工作情况。

01 要有一个服务器

我们可以利用Python自带的库来实现,这里我们使用:

from wsgiref.simple_server import make_server

在后面来生成服务器。

02 生成一个应用程序

有了服务器,也需要里面有应用程序来响应请求。接下来我们定义一个应用:

def my_application(environ, start_response)

注意其中的两个参数:

  • environ携带了请求中的环境信息
  • start_response用来将待返回的状态码和响应头扔回给服务器,并由服务器返回给用户。

在方法中,我们给出了:

  • 响应的主体:response_body
  • 响应的状态码:status
  • 响应的头部:response_headers

这三个变量,用来对用户的请求进行响应。
当这三个变量都准备好之后,首先将状态码和响应的头部返回给服务器,这里就使用了start_response函数。
最后将响应主体返回。

03 将应用程序放到服务器中

光定义好应用程序,也是没有办法来解决用户的请求的。所以,我们必须要将定义好的应用程序放置到服务器中才可以。这里我们通过方法make_server()来实现:

my_server = make_server('localhost', 8052, my_application)

这里指定了服务的主机,端口号,以及具体的应用。

最后,启用这个服务,使他能够对用户的请求进行响应:

my_server.handle_request()

注意,这个方法只能对请求进行一次处理。这里使用它的原因在于,目前我们只是想了解基本的处理过程,所以当你在浏览器中输入对应的主机及端口号,查看完响应后,再次刷新会提示错误。

0 0
原创粉丝点击