webpy源码分析(二): application的run()

上一讲:webpy源码分析(一):application的init()

run基本执行过程

webpy源码分析(二): application的run()_第1张图片
123.png

对于wsgi不熟悉的朋友可以先看看我的这篇文章

middleware

我修改了测试代码,给app.run()增加了中间件,一下是代码和执行结果:

webpy源码分析(二): application的run()_第2张图片
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                                                  

看看运行结果以及相关说明:

webpy源码分析(二): application的run()_第3张图片
123.png

StaticMiddleware

此为框架内实现的一个中间件,用于处理静态页面。


webpy源码分析(二): application的run()_第4张图片
123.png

其中StaticApp继承自SimpleHTTPRequestHandler,有兴趣的朋友可以help看下帮助文档。
为了确保能正常访问到静态页面,需要在测试程序执行目录中新建static目录,并在其中存放静态页面文件。

LogMiddleware

webpy源码分析(二): application的run()_第5张图片
123.png

日志中间件的实现相对简单,其对response_header函数的包装也是中间件介入调用过程的一种方式

你可能感兴趣的:(webpy源码分析(二): application的run())