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对象。
WSGI和PASTE的更多相关文章
- WSGI and Paste学习笔记
The Problem Lots of web frameworks Zope, Quixote, Webware, SkunkWeb and Twisted Web etc Applications ...
- 探索 OpenStack 之(11):cinder-api Service 启动过程分析 以及 WSGI / Paste deploy / Router 等介绍
OpenStack 中的每一个提供 REST API Service 的组件,比如 cinder-api,nova-api 等,其实是一个 WSGI App,其主要功能是接受客户端发来的 HTTP R ...
- WSGI框架及Paste+Pastedeploy+route+webob开发
一.前言 WSGI服务器 一个Web服务器网关接口 (WSGI)服务器实现了WSGI接口的Web服务器端运行的Python的Web应用程序. 为什么需要WSGI? 传统的Web服务器不理解或有任何方式 ...
- 什么是 WSGI -- Python 中的 “CGI” 接口简介
今天在 git.oschina 的首页上看到他们推出演示平台,其中,Python 的演示平台支持 WSGI 接口的应用.虽然,这个演示平台连它自己提供的示例都跑不起来,但是,它还是成功的勾起了我对 W ...
- OpenStack Paste.ini详解(一)
问题背景 最近在研究openstack 服务的源代码,由于项目代码较多对其又不熟悉,刚开始就不知道从哪里开始入手分析.经过分析发现,在正式分析源码之前需要对python的wsgi.paste.rout ...
- Openstack Restful API 开发框架 Paste + PasteDeploy + Routes + WebOb
目录 目录 Paste PasteDeploy Routes WebOb 简介 WSGI入口 Paste和PasteDeploy 配置文件 pasteini 中间件的实现 Routes WebOb 参 ...
- Openstack入坑指南
什么是云计算 概念 云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息,可以按需求提供给计算机和其他设备.用户不需要了解”云“中的基础设施细节,不必具有相应的专业知识,也无需直接控 ...
- nova分析(3)—— nova-api
nova-api是nova对外提供Restful API的服务,Horizon.novaclient等均通过该api与nova进行通信. nova其实对外提供了多个api服务,包括下面这些服务: no ...
- 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(1)
还是先上图吧,无图无真相 别以为真懂Openstack!先别着急骂我,我也没有说我真懂Openstack 我其实很想弄懂Openstack,然而从哪里下手呢?作为程序员,第一个想法当然是代码,Code ...
随机推荐
- PAT-乙级-1016. 部分A+B (15)
1016. 部分A+B (15) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 正整数A的“DA(为1位整数)部 ...
- maven 解决 Eclipse is running in a JRE, but a JDK is
解决安装了maven插件的myeclipse每次开启报错 The Maven Integration requires that Eclipse be running in a JDK, becaus ...
- CloudTest 事务监控:千呼万唤始出来
SmartBear 数据表明,如果 Amazon 的加载时间延长 1 秒,那么一年就会减少 16 亿美元的营收.用户与网站互动的过程中,如果加载时间超过3秒,57% 的用户会流失.可见,网站的加载时间 ...
- Linux系统下如何配置SSH?如何开启SSH?
SSH作为Linux远程连接重要的方式,如何配置安装linux系统的SSH服务,如何开启SSH?下面来看看吧(本例为centos系统演示如何开启SSH服务). 查询\安装SSH服务 1.登陆linux ...
- UR #13 Ernd
考试的时候没有注意到可以将(a,b)放在二维平面上之后旋转坐标系,使得转移变成树状数组二维偏序 这样就算我想出来了第二个转移的斜率优化也没有什么卵用啊(摔西瓜 设g(i)表示当前站在第i个水果下面且第 ...
- 如何将sql server数据库转化成sqlite数据库
今天在将sql server转化为sqlite的数据库的时候,遇到不少的问题,在网上搜了很长时间,都没有找到合适的软件将sql server转化成sqlite,其中用到了SqliteDev软件,在转化 ...
- 安装Hadoop系列 — 新建MapReduce项目
1.新建MR工程 依次点击 File → New → Ohter… 选择 “Map/Reduce Project”,然后输入项目名称:mrdemo,创建新项目: 2.(这步在以后的开发中可能 ...
- CSS和JavaScript以及Ajax实现预加载图片的方法及优缺点分析
预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画 廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发 ...
- WINCE6.0+IMX515通过cfimager.exe烧录镜像文件
WINCE6.0+IMX515通过cfimager.exe烧录镜像文件 freescale提供了cfimager.exe工具,可在SD/MMC卡中烧录系统镜像文件和创建FAT文件,这样,我们可以不需要 ...
- git指令
返回当前目录路径: $ pwd 1.1 git add git add . #将文件先暂存到staging area, stages new and modified, without deleted ...