Flask 模块启动源码分析

  1. 通过flask启动脚本,实例化FlaskGroup类,实例化过程会配置routes、run、shell指令。
    然后通过该类的main方法加载项目环境变量(安装依赖python-dotenv 可以加载环境变量配置文件.env或者.flaskenv)以及初始化项目启动类ScriptInfo的实例。
    这个过程会检查项目并抛出项目异常。

  2. 执行run命令。
    通过DispatchingApp类在实例化过程中,调用ScriptInfo对象的load_app方法加载app(--reload 参数或FLASK_DEBUG 控制app单线程启动还是双线程启动)。
    DispatchingApp类实现了可回调方法call(self, environ, start_response)
    通过WSGI工具包Werkzeug,加载DispatchingApp的对象以及相关参数开始运行项目。
    (Werkzeug是一个WSGI工具包,可以作为一个Web框架的底层库。)

  3. load_app方法执行内容(实例化app)。
    • 如果有设置FLASK_APP的值,将查找并导入对应的模块或者包(可以指定app名称,FLASK_APP=app:micro),
    没有设置app名称时,将在导入的模块或者包中查找变量名为app或者application的FLASK实例,没有时再其他FLASK实例的变量,还是没有时继续查找可回调函数(函数名为create_app或者make_app,返回值是FLASK实例)
    • 如果没有设置FLASK_APP的值,将直接查找wsgi.py和app.py,同时也会匹配到名为wsgi和app的包

  4. 热重载方式。
    默认通过检查文件属性的方式进行监测(可以安装依赖包watchdog,Werkzeug会自动检测)

你可能感兴趣的:(Flask 模块启动源码分析)