美文网首页
webpy源码分析(二): application的run()

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

作者: WillCheng | 来源:发表于2018-04-11 14:41 被阅读0次

上一讲: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.png

StaticMiddleware

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


123.png

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

LogMiddleware

123.png

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

相关文章

网友评论

      本文标题:webpy源码分析(二): application的run()

      本文链接:https://www.haomeiwen.com/subject/dusmhftx.html