前言
Flask是Python著名的web框架,其特点是轻量简单易扩展。
Flask源码量挺多的,本文从比较高的维度整体看一下Flask关键结构的实现原理,文中不会细究太多细节,不多废话,开搞。
考虑篇幅长度,分多篇文章来讨论,本文系列文章以Flask 1.0.2 为基准。
前置背景知识
Flask依赖于werkzeug与jinja这两个核心库,werkzeug是HTTP与WSGI相关的工具集,而jinja主要用于渲染前端模板文件。
Flask框架满足WSGI协议,其功能简单而言就是将HTTP数据转为environ包含请求中所有的信息以及start_response回调函数传递给web框架对象,形象如图:
如果依旧不清晰,可以参考此前的旧文「实现满足WSGI协议的Web服务」。
Flask应用启动流程
从Flask最基本的使用开始,代码如下。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "hello 懒编程"
if __name__ == '__main__':
app.run()
在代码中,通过Flask(__name__)
实例化了Flask类,对应的__init__()方法如下
# flask/app.py
classs Flask(_PackageBoundObject):
def __init__(...):
# 对每次请求,创建一个处理通道。
self.config = self.make_config()
self.view_functions = {
}
self.error_handler_spec = {
}
self.before_request_funcs = {
}
self.before_first_request_funcs = []
self.after_request_funcs = {
}
self.teardown_request_funcs = {