学习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()
注意,这个方法只能对请求进行一次处理。这里使用它的原因在于,目前我们只是想了解基本的处理过程,所以当你在浏览器中输入对应的主机及端口号,查看完响应后,再次刷新会提示错误。
- 学习Python:WSGI_01_小程序
- python学习-程序小技巧
- python学习之小的练习程序
- python基础学习--购物车小程序
- python学习—几个简单小程序
- python学习------生成cdkey小程序
- Python学习-----Tinypng图片压缩小程序
- python小程序
- python 小程序
- python小程序
- python 简单小程序
- python小程序集锦
- python爬虫小程序
- Python小程序
- python小程序
- python练习小程序
- Python入门小程序
- python 查询小程序
- java动态加载jar包,并运行其中的类和方法
- 【工作笔记】ElasticSearch从零开始学(二)—— 入门(搜索)
- 接口测试自动化生成框架
- 如何直接打开android系统的wifi设置页面,防止intent劫持
- Android View 源码解析(二)
- 学习Python:WSGI_01_小程序
- 基于传输层差异的Socket分类
- Git链接到自己的Github(1)简单的开始
- React native学习第五章:Flexbox
- TCP三次握手/四次挥手
- 详解Navicat for mysql 安装教程
- tensorflow学习笔记--embedding_lookup()用法
- Android GPS定位(二)使用过程中的一点小坑
- 如何为sudo命令定义PATH环境变量