WSGI就是一个标准,WSGI server就是实现了这个标准的一个容器。这个标准相似于以下的东东:python
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标准了。web
而WSGI的server其实作的事情也很简单,能够参考http://blog.csdn.net/sraing/article/details/8455242。json
至于paste则是用于配置WSGI的URL和对应APP的工具,具体的能够参考http://blog.csdn.net/sonicatnoc /article/details/6539716。简单的说就是经过paste,我能把/index映射到XXX.py的 handle_index(status, response_headers)上去。api
paste的配置文件中有下面几项是比较常见的:app
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对象。工具