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相关推荐

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

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

  2. 虚拟机创建的50个步骤以及100个知识点(仅作为个人笔记使用)

    网上大侠们分享的资料都非常好,就看你会不会用,如何使用,再次对本文所引用资料的作者表示感谢,如有侵权,请告知. 大致过程 参考资料 Icehouse 创建Instance代码分析 http://www ...

  3. Openstack入坑指南

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

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

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

  5. 【neutron】Neutron的基本原理与代码实现

    分享正文 大家好,很高兴今天能与大家分享一些Neutron的知识.今天分享的思路是:OpenStack网络基础.Neutron的软件实现.Nova虚拟机启动时的网络处理以及OVS流表分析. 一.Ope ...

  6. keyston api与代码router映射

    2 1      简要说明 OpenStackkeystone服务使用routes+paste+wsgi来实现urls映射到应用具体的action,并执行相关的请求动作. 其中:keystone的ur ...

  7. openstack neutron基本原理

    分享正文 大家好,很高兴今天能与大家分享一些Neutron的知识.今天分享的思路是:OpenStack网络基础.Neutron的软件实现.Nova虚拟机启动时的网络处理以及OVS流表分析. 一.Ope ...

  8. openstack基础之python WSGI,paste,Routes,webob

        在阅读OpenStack各个组件源码的过程中,发现所有的模块如nova,neutron等,都通过wsgi的方式对外提供restful API.     而且在使用wsgi的过程中,还涉及pas ...

  9. Web 开发规范 — WSGI

    目录 目录 WSGI 简介 为什么需要 WSGI 这个规范 WSGI 如何工作 WSGI的角色 Server 如何调用 Application application 的两个参数 applicatio ...

最新文章

  1. 实验七 访问列表配置
  2. 【算法】弗洛伊德(Floyd)算法
  3. SQL 2000 异数据库数据同步
  4. A beginner’s guide to Cache synchronization strategies--转载
  5. Spring 和 Spring Boot 最核心的 3 大区别,详解!
  6. [源码研究]Some debugger screenshot of Slf4jLogger creation
  7. 快速搭建LAMP环境
  8. educoder实训平台python顺序结构答案_传智播客升级实训课程,打造高分项目实战网课助力高校在线实训...
  9. 深入解读Linux内存管理系列(3)——MMU初始化和页表的建立
  10. mid制作乐谱_【图片】分享一个自己编写的打谱软件,支持生成简谱、乐谱演奏、MID输出_简谱吧_百度贴吧...
  11. c语言问号的用法及举例,问号的使用方法和另类用法有哪些
  12. Electron学习笔记(一) 配置, 创建, 设置, 监听
  13. python自动化webdriver_轻松自动化---selenium-webdriver(python) (六)
  14. 我的计算机制作幻灯片在哪,如何制作幻灯片呢?具体的步骤能教教我嘛?
  15. TiDB 在马上消费金融核心账务系统归档及跑批业务下的实践
  16. Postgresql skip locked跳过行锁消除行锁冲突等待
  17. Mysql多层子查询(收藏夹案例)
  18. 判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 =AABCD和s2 = BCDAA,返回1,给定s1=abcd和s2=ACBD,返回0.
  19. 2022-11-06 网工进阶(三十五)IP组播协议--PIM-SM工作原理(组播分发树的形成、ASM、SSM)
  20. 火狐浏览器获取event

热门文章

  1. 前端使用vue-i18n做中英文翻译
  2. Confluence 6 推荐的更新通知设置和禁用
  3. 自定义Spinner之IconSpinner
  4. 初创企业不上云拿什么“火拼”?
  5. Callable、Future和FutureTask
  6. JavaScript为unicode编码转换为中文
  7. Css Font 详细研究
  8. CSS那些事笔记(一入门)
  9. CSS FC布局指南
  10. 特斯拉上海超级工厂开工 预计今夏完成初期建设