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的更多相关文章

  1. WSGI and Paste学习笔记

    The Problem Lots of web frameworks Zope, Quixote, Webware, SkunkWeb and Twisted Web etc Applications ...

  2. 探索 OpenStack 之(11):cinder-api Service 启动过程分析 以及 WSGI / Paste deploy / Router 等介绍

    OpenStack 中的每一个提供 REST API Service 的组件,比如 cinder-api,nova-api 等,其实是一个 WSGI App,其主要功能是接受客户端发来的 HTTP R ...

  3. WSGI框架及Paste+Pastedeploy+route+webob开发

    一.前言 WSGI服务器 一个Web服务器网关接口 (WSGI)服务器实现了WSGI接口的Web服务器端运行的Python的Web应用程序. 为什么需要WSGI? 传统的Web服务器不理解或有任何方式 ...

  4. 什么是 WSGI -- Python 中的 “CGI” 接口简介

    今天在 git.oschina 的首页上看到他们推出演示平台,其中,Python 的演示平台支持 WSGI 接口的应用.虽然,这个演示平台连它自己提供的示例都跑不起来,但是,它还是成功的勾起了我对 W ...

  5. OpenStack Paste.ini详解(一)

    问题背景 最近在研究openstack 服务的源代码,由于项目代码较多对其又不熟悉,刚开始就不知道从哪里开始入手分析.经过分析发现,在正式分析源码之前需要对python的wsgi.paste.rout ...

  6. Openstack Restful API 开发框架 Paste + PasteDeploy + Routes + WebOb

    目录 目录 Paste PasteDeploy Routes WebOb 简介 WSGI入口 Paste和PasteDeploy 配置文件 pasteini 中间件的实现 Routes WebOb 参 ...

  7. Openstack入坑指南

    什么是云计算 概念 云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息,可以按需求提供给计算机和其他设备.用户不需要了解”云“中的基础设施细节,不必具有相应的专业知识,也无需直接控 ...

  8. nova分析(3)—— nova-api

    nova-api是nova对外提供Restful API的服务,Horizon.novaclient等均通过该api与nova进行通信. nova其实对外提供了多个api服务,包括下面这些服务: no ...

  9. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(1)

    还是先上图吧,无图无真相 别以为真懂Openstack!先别着急骂我,我也没有说我真懂Openstack 我其实很想弄懂Openstack,然而从哪里下手呢?作为程序员,第一个想法当然是代码,Code ...

随机推荐

  1. 第一章 Spring整体框架和环境搭建

    1.Spring 的整体架构 Spring框架主要由7大模块组成,它们提供了企业级开发需要的所有功能,而且每个模块都可以单独使用,也可以和其他模块组合使用,灵活且方便的部署可以使开发的程序更加简洁灵活 ...

  2. 关​于​h​i​b​e​r​n​a​t​e​中​双​向​外​键​关​联​o​n​e​-​t​o​-​o​n​e​的​p​r​o​p​e​r​t​y​-​r​e​f​=​的​问​题(转)

    大家都知道hibernate中的one-to-one映射主要有两种策略,(1)一对一主键关联(单向和双向).(2)一对一外键映射(单项和双向).本文主要讲解一下,一对一外键映射中的双向问题,在此前先通 ...

  3. win8系统中PL/SQL Developer连接Oracle出现的问题

    注意:所有软件最后不要安装在program files (x86)下  PL/SQL Developer显示Not logged on 以管理员的身份打开PL/SQL Developer 2.   t ...

  4. 荣誉,还是苦逼?| 也议全栈工程师和DevOps

    引言 全栈工程师(本文称「全栈」开发者)和 DevOps 无疑是近期最火的词汇,无论是国外还是国内.而且火爆程度远超于想象. 全栈和 DevOps,究竟是我们的新职业方向,还是仅仅创业公司老板的心头所 ...

  5. HDU 2992 Hotel booking(BFS+DFS 或者 SPFA+Floyd)

    点我看题目 题意 : 一个司机要从1点到达n点,1点到n点中有一些点有宾馆,司机的最长开车时间不能超过10小时,所以要在10小时之内找到宾馆休息,但是为了尽快的走到n点,问最少可以经过几个宾馆. 思路 ...

  6. web页面浮动回到顶部功能和浮动广告

    实现测试浮动回到顶部 法一:用js实现<%@ Page Language="C#" AutoEventWireup="true" CodeBehind=& ...

  7. 不同VLAN之间互相通信

    前话 我们经常到机房上课,想必对机房后面那层叠的跟DVD一样的机器有印象吧,那些就是交换机. 交换机作用是什么? 我这里度娘一下: 交换机(Switch)意为"开关"是一种用于电( ...

  8. CheckBoxList 获取与设置选中的值

    /// <summary> ///CheckBoxListHelper 的摘要说明 ///CheckBoxList获取与设置选中的值 /// </summary> public ...

  9. Android 自定义android控件EditText边框背景

    在我们进行Android应用界面设计和时候,为了界面风格的统一,我们需要对一些控件进行自定义.比如我们的应用采用的蓝色风格,但是 android的EditText控制获得焦点后显示的却是黄色的边框背景 ...

  10. 在XML里的XSD和DTD以及standalone的使用

    有关XML结构中的XSD和DTD以及standalone的使用 XmlDeclaration declare= document.CreateXmlDeclaration("1.0" ...