上一讲:webpy源码分析(一):application的init()
run基本执行过程
123.png对于wsgi不熟悉的朋友可以先看看我的这篇文章
middleware
我修改了测试代码,给app.run()增加了中间件,一下是代码和执行结果:
123.png中间件会接收一个框架定义的wsgi处理函数,通过这个参数可以使其介入http请求的处理过程,但是中间件函数本身只会执行一次。具体如何介入Http请求的处理,请看下面
middleware深入研究
我们再次修改测试代码中的middleware1:
def middleware_func1(wsgi):
def handle_in_middleware(env, start_resp):
logger.info('do something before, like modify env, etc.')
result = wsgi(env, start_resp)
logger.info('do something with the result')
return itertools.chain(result,
['return by middleware'.encode('utf-8')])
logger.info('middleware1 offered a new wsgi')
return handle_in_middleware
def middleware_func2(wsgi):
logger.info('i am middleware_func2, i do nothing')
return wsgi
看看运行结果以及相关说明:
123.pngStaticMiddleware
此为框架内实现的一个中间件,用于处理静态页面。
123.png
其中StaticApp继承自SimpleHTTPRequestHandler,有兴趣的朋友可以help看下帮助文档。
为了确保能正常访问到静态页面,需要在测试程序执行目录中新建static目录,并在其中存放静态页面文件。
LogMiddleware
123.png日志中间件的实现相对简单,其对response_header函数的包装也是中间件介入调用过程的一种方式
网友评论