flask请求流程,源码走读

flask依赖werkezug和jinja2,flask处在中间,为两种建立一座桥梁,前者实现WSGI,后者处理模板。Flask 也绑定了一些通用的标准库包,比如 logging 。其它所有一切取决于扩展。


什么是WSGI?

  Web服务网关接口,属于一套协议。是Python web开发中 web服务器与web应用程序之间数据交互的约定。网关协议的本质是为了解耦,实现web服务器和web应用程序的分离,WSGI就是一个支持WSGI的web服务器与Python web应用程序之间的约定。

一个WSGI服务器需要实现两个函数:

  1.解析http请求,为应用程序提供environ字典

  2.实现start response函数,用于处理响应状态和响应头

整个过程应该是这样的:
  1.从客户端获取到请求

  2.通过get_env获得environ变量

  3.调用应用程序,传入environ和start_response函数,并获得响应数据进行处理

  4.将处理后的数据返回给客户端

在源码中是流程这样的:

  启动程序,app.run()调用werkezug下的run_simple方法启动服务,等待请求

  

   请求过来调用WSGIRequestHandler类下的handle_one_request方法开始处理请求

  

  run_wsgi实现三个方法: start_response返回write,write处理响应头、状态。execute启动Flask的__call__,传入environ(请求过来的原始数据)和start_response(头和状态),并接受响应数据进行处理

   

   execute方法就是去执行Flask

  

   走到这里,一个请求下来,WSGI的任务已经完成一大半,开始进入到Flask

 application_iter = app(environ, start_response)  # 调用Flask的__call__方法

  Flask完成的功能就是从__call__方法开始的

   调用wsgi_app方法

  

WSGIRequestHandler

猜你喜欢

转载自www.cnblogs.com/aizhinong/p/12741741.html