WSGI和PASTE
WSGI就是一个标准,WSGI server就是实现了这个标准的一个容器。这个标准类似于如下的东东:
1
2
3
4
5
6
7
8
9
10
11
|
from wsgiref.simple_server import make_server
def simple_app(environ, start_response):
status = '200 OK'
response_headers = [( 'Content-type' , 'text/plain' )]
start_response(status, response_headers)
return [u "This is hello wsgi app" .encode( 'utf8' )]
httpd = make_server('', 8000 , simple_app)
print "Serving on port 8000..."
httpd.serve_forever()
|
web应用开发者只要遵从WSGI的标准,编写simple_app就可以实现自己的应用了。标准很简单:第一个environ参数表明了所有 request相关的环境变量,第二个start_response用于写入一些response的返回头的信息,然后再return返回的 response的数据就行了。这个就是所有的WSGI标准了。
而WSGI的server其实做的事情也很简单,可以参考http://blog.csdn.net/sraing/article/details/8455242。
至于paste则是用于配置WSGI的URL和对应APP的工具,具体的可以参考http://blog.csdn.net/sonicatnoc /article/details/6539716。简单的说就是通过paste,我能把/index映射到XXX.py的 handle_index(status, response_headers)上去。
paste的配置文件中有下面几项是比较常见的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
filter:
如:
[filter:s3_extension]
paste.filter_factory = keystone.contrib.s3:S3Extension.factory
app:
如:
[app:service_v3]
paste.app_factory = keystone.service:v3_app_factory
pipeline:
如:
[pipeline:public_api]
pipeline = sizelimit url_normalize build_auth_context token_auth admin_token_auth xml_body json_body ec2_extension user_crud_extension public_service
composite:
如:
[composite:main]
use = egg:Paste#urlmap
/v2.0 = public_api
/v3 = api_v3
/ = public_version_api
|
其中:
composite中注册对应的URL,pipline则指明一串app的传递链,这些传递链中的对象可以分别在filter和app中找 到,filter和app都代表着某个module中的一个callable对象,这些callable可以在对应的module中找到对应的 function,app是一个callable object,接受的参数(environ,start_response),这是paste系统交给application的,符合WSGI规范的参 数. app需要完成的任务是响应envrion中的请求,准备好响应头和消息体,然后交给start_response处理,并返回响应消息体。filter 是一个callable object,其唯一参数是(app),这是WSGI的application对象,filter需要完成的工作是将application包装成另一个 application(“过滤”),并返回这个包装后的application。app这个callable需要由app_factory得 到,app_factory是一个callable object,其接受的参数是一些关于application的配置信息:(global_conf,**kwargs),global_conf是在 ini文件中default section中定义的一系列key-value对,而**kwargs,即一些本地配置,是在ini文件中,app:xxx section中定义的一系列key-value对。app_factory返回值是一个application对象。filter这个callable 需要由filter_factory得到,filter_factory是一个callable object,其接受的参数是一系列关于filter的配置信息:(global_conf,**kwargs),global_conf是在ini文件 中default section中定义的一系列key-value对,而**kwargs,即一些本地配置,是在ini文件中,filter:xxx section中定义的一系列key-value对。filter_factory返回一个filter对象。
转载于:https://www.cnblogs.com/zmlctt/p/4208919.html
WSGI和PASTE相关推荐
- Openstack Restful API 开发框架 Paste + PasteDeploy + Routes + WebOb
目录 目录 Paste PasteDeploy Routes WebOb 简介 WSGI入口 Paste和PasteDeploy 配置文件 pasteini 中间件的实现 Routes WebOb 参 ...
- 虚拟机创建的50个步骤以及100个知识点(仅作为个人笔记使用)
网上大侠们分享的资料都非常好,就看你会不会用,如何使用,再次对本文所引用资料的作者表示感谢,如有侵权,请告知. 大致过程 参考资料 Icehouse 创建Instance代码分析 http://www ...
- Openstack入坑指南
什么是云计算 概念 云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息,可以按需求提供给计算机和其他设备.用户不需要了解"云"中的基础设施细节,不必具有相应的专 ...
- 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(1)
还是先上图吧,无图无真相 别以为真懂Openstack!先别着急骂我,我也没有说我真懂Openstack 我其实很想弄懂Openstack,然而从哪里下手呢?作为程序员,第一个想法当然是代码,Code ...
- 【neutron】Neutron的基本原理与代码实现
分享正文 大家好,很高兴今天能与大家分享一些Neutron的知识.今天分享的思路是:OpenStack网络基础.Neutron的软件实现.Nova虚拟机启动时的网络处理以及OVS流表分析. 一.Ope ...
- keyston api与代码router映射
2 1 简要说明 OpenStackkeystone服务使用routes+paste+wsgi来实现urls映射到应用具体的action,并执行相关的请求动作. 其中:keystone的ur ...
- openstack neutron基本原理
分享正文 大家好,很高兴今天能与大家分享一些Neutron的知识.今天分享的思路是:OpenStack网络基础.Neutron的软件实现.Nova虚拟机启动时的网络处理以及OVS流表分析. 一.Ope ...
- openstack基础之python WSGI,paste,Routes,webob
在阅读OpenStack各个组件源码的过程中,发现所有的模块如nova,neutron等,都通过wsgi的方式对外提供restful API. 而且在使用wsgi的过程中,还涉及pas ...
- Web 开发规范 — WSGI
目录 目录 WSGI 简介 为什么需要 WSGI 这个规范 WSGI 如何工作 WSGI的角色 Server 如何调用 Application application 的两个参数 applicatio ...
最新文章
- 实验七 访问列表配置
- 【算法】弗洛伊德(Floyd)算法
- SQL 2000 异数据库数据同步
- A beginner’s guide to Cache synchronization strategies--转载
- Spring 和 Spring Boot 最核心的 3 大区别,详解!
- [源码研究]Some debugger screenshot of Slf4jLogger creation
- 快速搭建LAMP环境
- educoder实训平台python顺序结构答案_传智播客升级实训课程,打造高分项目实战网课助力高校在线实训...
- 深入解读Linux内存管理系列(3)——MMU初始化和页表的建立
- mid制作乐谱_【图片】分享一个自己编写的打谱软件,支持生成简谱、乐谱演奏、MID输出_简谱吧_百度贴吧...
- c语言问号的用法及举例,问号的使用方法和另类用法有哪些
- Electron学习笔记(一) 配置, 创建, 设置, 监听
- python自动化webdriver_轻松自动化---selenium-webdriver(python) (六)
- 我的计算机制作幻灯片在哪,如何制作幻灯片呢?具体的步骤能教教我嘛?
- TiDB 在马上消费金融核心账务系统归档及跑批业务下的实践
- Postgresql skip locked跳过行锁消除行锁冲突等待
- Mysql多层子查询(收藏夹案例)
- 判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
- 2022-11-06 网工进阶(三十五)IP组播协议--PIM-SM工作原理(组播分发树的形成、ASM、SSM)
- 火狐浏览器获取event