Flask
overview
背景
Flask以及它所使用的wsgi库werkzeug和模板引擎jinja2都是由Armin Ronacher和他的团队开发的。实际上Armin Ronacher早就开发出来了werkzeug开源库,旨在为框架封装一个良好的底层的API接口,但过了一段时间,Armin发现还是自己来先做一个吧,然后Flask就诞生了。
任务
分析从发起HTTP请求到响应请求之间的流程
涉及源代码文件:
- Flask源码
- app.py
- werkzeug源码
- serving.py
python基本库源码
- SocketServer.py
- BaseHTTPServer.py
先来看一个最小的Flask应用:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run()
显而易见,app.run
是核心代码。我们来看一下app.py
中相关的代码:
<app.py>
def run(self, host=None, port=None, debug=None, **options):
from werkzeug.serving import run_simple
run_simple(host, port, self, **options)
<serving.py>
def run_simple(hostname, port, application, ...,
request_handler=None, static_files=None, ...):
srv = make_server(hostname, port, application, threaded,
processes, request_handler,
passthrough_errors, ssl_context,
fd=fd)
srv.serve_forever()
def make_server(host