[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应用,类似与路由的功能.
[app:home] use = egg:Paste#static document_root = %(here)s/htdocsapp类型的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.dbfilter-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: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]段是大小写敏感的.此外,在应用中也能修改全局配置的值.
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.