Paste 实例

来源:互联网 发布:区域语言软件 编辑:程序博客网 时间:2024/04/28 08:16
目录(?)

[+]

本文地址:http://blog.csdn.net/spch2008/article/details/9005885

Paste环境准备

1. 下载paste,放于eclipse目录中

     paste库:http://download.csdn.net/detail/spch2008/5500979

2.目录结构

   

现在将之前的程序改写,改用Paste进行部署。


LoadApp

[python] view plaincopyprint?
  1. ''''' 
  2. Created on 2013-6-2 
  3.  
  4. @author: spch2008 
  5. '''  
  6.   
  7. from wsgiref.simple_server import make_server  
  8.   
  9. import routes.middleware  
  10. import webob.dec  
  11. import webob.exc  
  12. from paste.deploy import loadapp  
  13.   
  14. class Controller:  
  15.     @webob.dec.wsgify  
  16.     def __call__(self, req):  
  17.         return webob.Response("Hello World!")  
  18.   
  19.   
  20.    
  21. class Router(object):  
  22.     def __init__(self):  
  23.          
  24.         self._mapper = routes.Mapper()  
  25.         self._mapper.connect('/spch',    
  26.                         controller=Controller(),    
  27.                         action='index',    
  28.                         conditions={'method': ['GET']})    
  29.           
  30.          
  31.         self._router = routes.middleware.RoutesMiddleware(self._dispatch, self._mapper)  
  32.      
  33.     @classmethod  
  34.     def app_factory(cls, global_config, **local_config):    
  35.         return cls()  
  36.      
  37.     @webob.dec.wsgify  
  38.     def __call__(self, req):  
  39.           
  40.         return self._router  
  41.  
  42.     @staticmethod  
  43.     @webob.dec.wsgify  
  44.     def _dispatch(req):  
  45.         match = req.environ['wsgiorg.routing_args'][1]  
  46.                   
  47.         if not match:  
  48.             return webob.exc.HTTPNotFound()  
  49.           
  50.         app = match['controller']    
  51.         return app  
  52.           
  53.   
  54. if __name__ == "__main__":  
  55.         
  56.     app = loadapp('config:C:/paste.ini', name='hello')   
  57.     httpd = make_server('localhost'8282, app)    
  58.     httpd.serve_forever()   

需要在类中添加一个app_factory方法,然后通过loadapp获得实例对象。

paste.ini放于C盘中,文件内容如下:

[plain] view plaincopyprint?
  1. [app:hello]    
  2. paste.app_factory = MyRoute:Router.app_factory  


Composite Applications

[python] view plaincopyprint?
  1. def factory(loader, global_conf, **local_conf):  
  2.     print (local_conf)  
  3.     return Router()  
  4.   
  5. if __name__ == "__main__":  
  6.         
  7.     app = loadapp('config:D:/paste.ini', name='hello')   
  8.     httpd = make_server('localhost'8282, app)    
  9.     httpd.serve_forever()    

paste.ini配置内容为

[plain] view plaincopyprint?
  1. [composite:hello]  
  2. use = call:MyRoute:factory  
  3. date = 2013  
  4. author = spch2008  
local_conf输出:{'date': '2013', 'author': 'spch2008'}


另一个例子,但此例没调试成,因为可能由于windows没有egg概念吧(猜想!)

[plain] view plaincopyprint?
  1. [composite:main]  
  2. use = egg:Paste#urlmap  
  3. / = mainapp  
  4. /files = staticapp  
  5.   
  6. [app:mainapp]  
  7. use = egg:MyApp  
  8.   
  9. [app:staticapp]  
  10. use = egg:Paste#static  
  11. document_root = /path/to/docroot  

main使用Paste的urlmap程序,进行url匹配。
匹配"/"转向mainapp段;“/files”转向staticapp段。


Filter Composition

[plain] view plaincopyprint?
  1. [app:main]  
  2. use = egg:MyEgg  
  3. filter-with = printdebug  
  4.   
  5. [filter:printdebug]  
  6. use = egg:Paste#printdebug  

可以使用pipeline进行filter

[plain] view plaincopyprint?
  1. [pipeline:main]  
  2. pipeline = filter1 filter2 filter3 app  
  3.   
  4. [filter:filter1]