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对象。

时间: 2024-10-16 19:56:39

WSGI和PASTE的相关文章

Python 中的“CGI” 接口——WSGI

今天在 git.oschina 的首页上看到他们推出演示平台,其中,Python 的演示平台支持 WSGI 接口的应用.虽然,这个演示平台连它自己提供的示例都跑不起来,但是,它还是成功的勾起了我对 WSGI 的强烈好奇心.一番了解,对该机制的认识,总结如下.如有不妥,还望斧正. 为什么是 WSGI? 写过网页应用的各位亲,应该对 CGI 有了解,我们知道,CGI 的全程是“Common Gateway Interface”,即通用 Gateway Interface.没错,这里的 WSGI,就是

OpenStack Paste.ini详解

问题背景 最近在研究openstack 服务的源代码,由于项目代码较多对其又不熟悉,刚开始就不知道从哪里开始入手分析.经过分析发现,在正式分析源码之前需要对python的wsgi.paste.routes和webob这几个模块有所了解才可以继续深入.在此,就我对paste的学习理解首先分享出来,其余模块接下来会娓娓道来. 研究对象 Devstack 安装的OpenStack Pike版本的Cinder项目 研究过程 1.打开cinder项目下的paste.ini文件,如下所示: ########

nova分析(3)—— nova-api

nova-api是nova对外提供Restful API的服务,Horizon.novaclient等均通过该api与nova进行通信. nova其实对外提供了多个api服务,包括下面这些服务: nova-apinova-api-ec2nova-api-metadatanova-api-os-compute 其中,nova-api用于启动其他三个服务.下面逐个分析下. nova-api 入口在 nova.cmd.api:main ,主要是基于WSGI.PasteDeploy.Webob.Rout

Openstack入坑指南

什么是云计算 概念 云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息,可以按需求提供给计算机和其他设备.用户不需要了解”云“中的基础设施细节,不必具有相应的专业知识,也无需直接控制.云计算描述了一种基于互联网的新的IT服务增加.使用和交付模式. 我们举一个例子来理解云计算,云计算中的”云“可以理解为天上的云,天上的云可以变成雨水降落到地上,落到地上的水蒸发后又变成云彩.这样就形成了一个循环. 这里的雨水表示计算资源,比如虚拟机.存储.网络等等. 云变水的过程表示获取资源的过

自己使用python webob,paste.deploy,wsgi总结

paste.deploy就是一个可以配置wsgi_app的工具,可以让服务器运行时,按照配置文件执行一系列的程序.需要使用.ini配置文件. (1)这里补充一下当时没看到的配置文件 1.[app:main]的意识是只有一个app,所以就叫main,其实叫别的也无所谓. use=egg:MyAPP   egg其实是一个程序包,是需要单独安装的东西.egg包是目前最流行的python应用打包部署方式 2.[composite:main]                      composite是

Python Paste.deploy 笔记

首先python paste是一个WSGI工具包,在WSGI的基础上包装了几层,让应用管理和实现变得方便.说实话,Python Paste的文档做的真差劲!加之python代码可读性本来就不怎么滴,真费劲. paste.deploy关键部分留个抓印: 1)python paste.deploy不能只装个paste.deploy包就可以工作了,还需要paste.script包 2)python paste.deploy中loadapp给的路径可用os.path.abspath(配置文件相对路径)得

keystone源码分析(一)——Paste Deploy的应用

本keystone源码分析系列基于Juno版Keystone,于2014年10月16日随Juno版OpenStack发布. Keystone作为OpenStack中的身份管理与授权模块,主要实现系统用户的身份认证.基于角色的授权管理.其他OpenStack服务的地址发现和安全策略管理等功能.Keystone作为开源云系统OpenStack中至关重要的组成部分,与OpenStack中几乎所有的其他服务(如Nova, Glance, Neutron等)都有着密切的联系.同时,Keystone作为开源

Python WSGI

因为服务都以restful api的方式提供给外界访问,于是又要看WSGI,要用到PasteDeploy库,但是感觉资料有些难懂尤其是paste.ini的使用上,下面几篇还算不错 [1] http://wanglianghuaihua.blog.163.com/blog/static/5425153120138273471531/ [2] http://pythonpaste.org/deploy/ ([1]是对[2]的翻译,不过有些部分没有在[1]中出现,看看原文还是有必要的) [3] htt

Paste Deployment简介: **-api-paste.ini的解析

1 什么是Paste Deployment Paste Deployment是一种机制或者说是一种设计模式,它用于在应用WSGI Application和Server提供一个联系的桥梁,并且为用户提供一个接口,当配置好Paste Deployment之后,用户只需调用loadapp方法就可以使用现有的WSGI Application,而保持了WSGI Application对用户的透明性. 2 Paste Deployment中section简单描述 在paste deploy中,为了区分不同类