Python Paste Deployment

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

什么是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#static
document_root = %(here)s/htdocs

[filter-app:blog]
use = egg:Authentication#auth
next = blogapp
roles = admin
htpasswd = /home/me/users.htpasswd

[app:blogapp]
use = egg:BlogApp
database = sqlite:/home/me/blog.db

[app:wiki]
use = call:mywiki.main:application
database = 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#static
document_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#auth
next = blogapp
roles = admin
htpasswd = /home/me/users.htpasswd

[app:blogapp]
use = egg:BlogApp
database = sqlite:/home/me/blog.db
    filter-app类型表示你把一个过滤器应用在一个应用上,use是使用的代码,next指定的是被应用过滤器过滤的app.所以这个section的意思是将过滤器blog应用在应用blogapp上.
    最后
[app:wiki]
use = call:mywiki.main:application
database = 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:MyEgg
filter-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.





你可能感兴趣的:(Python Paste Deployment)