zoukankan      html  css  js  c++  java
  • 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对象。

  • 相关阅读:
    Java 连接 Memcached 服务
    Memcached命令-存储命令-查找命令-清理命令
    memcache安装
    Python爬虫模拟登录带验证码网站
    HashMap原理
    redis 在java中的使用
    redis 事务
    Redis命令续
    Redis命令
    ApplicationListener用法
  • 原文地址:https://www.cnblogs.com/zmlctt/p/4208919.html
Copyright © 2011-2022 走看看