paste deploy python ini 配置文件简单说明
配合 http://www.python.org/dev/peps/pep-0333/
http://pythonpaste.org/deploy/
看下面的example(从网络上改造而来,出处URL也搞忘记的),很快会对python的paste如何组织wsgi有一个简单的了解,
pastedeploylab.ini
[DEFAULT] key1=value1 key2=value2 key3=values [composite:pdl] use=egg:Paste#urlmap /:root /calc:calc [filter:logrequest] username = root password = root123 paste.filter_factory = pastedeploylab:LogFilter.factory [filter:testrequest] username = admin password = adminpaste.filter_factory = pastedeploylab:TestFilter.factory [app:calculator] description = This is an "+-*/" Calculator paste.app_factory = pastedeploylab:Calculator.factory [app:showversion] version = 1.0.0 paste.app_factory = pastedeploylab:ShowVersion.factory [pipeline:root] pipeline = logrequest testrequest showversion [pipeline:calc] pipeline = logrequest calculator
import osimport webobfrom webob import Requestfrom webob import Responsefrom paste.deploy import loadappfrom wsgiref.simple_server import make_server#Filterclass LogFilter(): def __init__(self,app): self.app = app def __call__(self,environ,start_response): print "filter:LogFilter is called." return self.app(environ,start_response) @classmethod def factory(cls, global_conf, **kwargs): print "in LogFilter.factory", global_conf, kwargs return LogFilterclass TestFilter(): def __init__(self,app): self.app = app def __call__(self,environ,start_response): print "filter:TestFilter is called." return self.app(environ,start_response) @classmethod def factory(cls, global_conf, **kwargs): print "in TestFilter.factory", global_conf, kwargs return TestFilter class ShowVersion(): def __init__(self): pass def __call__(self,environ,start_response): start_response("200 OK",[("Content-type", "text/plain")]) return ["Paste Deploy LAB: Version = 1.0.0",] @classmethod def factory(cls,global_conf,**kwargs): print print "in ShowVersion.factory:" print "global_conf=", global_conf print "kwargs =", kwargs return ShowVersion()class Calculator(): def __init__(self): pass def __call__(self,environ,start_response): req = Request(environ) res = Response() res.status = "200 OK" res.content_type = "text/plain" # get operands operator = req.GET.get("operator", None) operand1 = req.GET.get("operand1", None) operand2 = req.GET.get("operand2", None) print req.GET opnd1 = int(operand1) opnd2 = int(operand2) if operator == u'plus': opnd1 = opnd1 + opnd2 elif operator == u'minus': opnd1 = opnd1 - opnd2 elif operator == u'star': opnd1 = opnd1 * opnd2 elif operator == u'slash': opnd1 = opnd1 / opnd2 res.body = "%s /nRESULT= %d" % (str(req.GET) , opnd1) return res(environ,start_response) @classmethod def factory(cls,global_conf,**kwargs): print "in Calculator.factory", global_conf, kwargs return Calculator()if __name__ == '__main__': configfile="pastedeploylab.ini" appname="pdl" wsgi_app = loadapp("config:%s" % os.path.abspath(configfile), appname) server = make_server('localhost',8989,wsgi_app)server.serve_forever()