Python Paste Deployment

来源:互联网 发布:linux 黑客工具 编辑:程序博客网 时间:2024/06/05 23:42

本文参照着官方文档编写,官网地址:点击打开链接

什么是Paste Deployment

    Paste Deployment是用来发现和配置WSGI的系统.对于WSGI使用者来说,它提供了简单的方法(loadapp)通过配置文件来启动WSGI应用.对于WSGI的开发者来说,只需要给自己的应用提供一套简单的入口点即可.

安装

    $ sudo pip install PasteDeploy

配置文件详解

      一个配置文件分为不同的section,section的声明如下:[type:name],第一部分是section的类型(type),第二部分是名字(name),通常来说type有app,composite,filter,pipeline,每个section内容都是形如key=value类型.其中,#是注释符.
    先来看一个典型的配置文件内容:
[composite:main]use = egg:Paste#urlmap/ = home/blog = blog/wiki = wiki/cms = config:cms.ini[app:home]use = egg:Paste#staticdocument_root = %(here)s/htdocs[filter-app:blog]use = egg:Authentication#authnext = blogapproles = adminhtpasswd = /home/me/users.htpasswd[app:blogapp]use = egg:BlogAppdatabase = sqlite:/home/me/blog.db[app:wiki]use = call:mywiki.main:applicationdatabase = sqlite:/home/me/wiki.db
    下面详细说说每个section
[composite:main]use = egg:Paste#urlmap/ = home/blog = blog/cms = config:cms.ini
    中括号的内容为声明,该段声明了一个名字为main的composite类型的section,下面的都是key=value的具体配置,composite类型将会根据URL把请求分发到不同的WSGI应用.use = egg:Paste#urlmap表示使用Paste库中urlmap应用,urlmap是一个通用的composite应用,它的作用是根据URL中前缀把请求分发到不同的WSGI应用,类似与路由的功能.
        此外,该配置文件中还有home,blog,wiki和config:cms.ini应用.其中config:cms.ini应用是调用其他配置文件cms.ini,该配置文件中可能定义了多个应用.
    接着将下一个section
[app:home]use = egg:Paste#staticdocument_root = %(here)s/htdocs
    app类型的section声明的是一个具体的应用,调用的module由use中值指定.在home这个应用中,use = egg:Paste#static,它的作用是显示静态的页面,它接收一个配置项:document_root,值是从全局配置[DEFAULT]提取,方法是使用变量替换,形如:%(var_name)s的形式.
    然后是:
[filter-app:blog]use = egg:Authentication#authnext = blogapproles = adminhtpasswd = /home/me/users.htpasswd[app:blogapp]use = egg:BlogAppdatabase = sqlite:/home/me/blog.db
    filter-app类型表示你把一个过滤器应用在一个应用上,use是使用的代码,next指定的是被应用过滤器过滤的app.所以这个section的意思是将过滤器blog应用在应用blogapp上.
    最后
[app:wiki]use = call:mywiki.main:applicationdatabase = sqlite:/home/me/wiki.db
    这个section和之前的最大的不同在于,它直接指定了执行的函数而不是使用Egg的入口点.use的值包含两个部分,它们以冒号分隔,左边的部分module的全名,右边是变量路径,它是module的一部分,在这里左边是mywiki.main,右边是application.


    你可以在一个配置文件中指定多个应用,每个应用在其各自的段中,即使只有一个app,也要将其写到section中去.
   指定运行application的python代码有两种:

   第一种:指向其他的URI或者name    

[app:myapp]use = config:another_config_file.ini#app_name# or any URI:任意的URI[app:myotherapp]use = egg:MyApp# or a callable from a module:某个模块中的可调用[app:mythirdapp]use = call:my.project:myapplication# or even another section:其他的section[app:mylastapp]use = myotherapp

    第二种:直接指向实现代码

[app:myapp]paste.app_factory = myapp.modulename:app_factory
    这种方式key=value中的key是protocol,告诉paste deploy即将加载的类型,在这个例子中是app_factory,是一个应用工厂方法,value是具体加载的模块和方法.

    全局配置[DEFAULT]

    有些应用需要读取某些固定的信息,这些信息便存在与全局配置中,[DEFAULT]段是大小写敏感的.此外,在应用中也能修改全局配置的值.

    filter

    作用于WSGI应用上,以app为参数,返回过滤后的应用.例如:

[app:main]use = egg:MyEggfilter-with = printdebug[filter:printdebug]use = egg:Paste#printdebug# and you could have another filter-with here, and so on...
    在应用main中,filter-with指定printdebug为其filter,同样在filter printdebug中也可以使用filter-with指定其filter,从而将处理延续下去.

    filter-app 

    filter-app也是用来处理应用,是filter的不同写法,在前面的例子中涉及到,不再举例

    pipiline

    pipeline实际上是多个filter处理一个应用.pipeline便于对一个应用添加多个过滤器.例如

[pipeline:main]pipeline = filter1 egg:FilterEgg#filter2 filter3 app[filter:filter1]...
    这就在app前指定了三个filter.





1 0
原创粉丝点击