程序代码:
from wsgiref.simple_server import make_server
from routes import Mapper,middleware
from webob import Request,Response
import webob.dec
import webob.exc
class Controller:
@webob.dec.wsgify
def __call__(self, req):
return Response("Hello World!")
class Router(object):
def __init__(self):
self.mapper = Mapper()
self.mapper.connect('/lixin',controller=Controller(), action='index',conditions={'method': ['GET']})
self.router = middleware.RoutesMiddleware(self.dispatch, self.mapper) #创建实例,调用的时候进行路由匹配,修改环境变量
@webob.dec.wsgify
def __call__(self, req):
urll = ['%s : %s' % (k,v) for k,v in sorted(req.environ.items())]
print '\n'.join(urll) #原始的环境变量
return self.router
@staticmethod
@webob.dec.wsgify
def dispatch(req):
urll = ['%s : %s' % (k,v) for k,v in sorted(req.environ.items())]
print '\n'.join(urll) #从这里可以看出来环境变量已经改变了
match = req.environ['wsgiorg.routing_args'][1]
if not match:
return webob.exc.HTTPNotFound()
app = match['controller']
return app
app = Router()
print app
print 'Listen port on 8000'
httpd = make_server('localhost', 8000, app)
httpd.serve_forever()
输出结果:
self.mapper = Mapper() 创建一个Mapper()
self.mapper.connect 注册一个路由
self.router = middleware.RoutesMiddleware(self.dispatch, self.mapper) 创建一个RoutesMiddleware对象,匹配路由,修改环境变量后,调用self.dispatch
基本上这一块的知识点掌握的还可以,终于可以往下进行了!!!