通过flask启动脚本,实例化FlaskGroup类,实例化过程会配置routes、run、shell指令。
然后通过该类的main方法加载项目环境变量(安装依赖python-dotenv 可以加载环境变量配置文件.env或者.flaskenv)以及初始化项目启动类ScriptInfo的实例。
这个过程会检查项目并抛出项目异常。执行run命令。
通过DispatchingApp类在实例化过程中,调用ScriptInfo对象的load_app方法加载app(--reload 参数或FLASK_DEBUG 控制app单线程启动还是双线程启动)。
DispatchingApp类实现了可回调方法call(self, environ, start_response)
通过WSGI工具包Werkzeug,加载DispatchingApp的对象以及相关参数开始运行项目。
(Werkzeug是一个WSGI工具包,可以作为一个Web框架的底层库。)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的包热重载方式。
默认通过检查文件属性的方式进行监测(可以安装依赖包watchdog,Werkzeug会自动检测)
Flask 模块启动源码分析
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 从Flask 0.11版本开始,官方就建议使用flask run命令来取代app.run()方法运行开发服务器。尽...
- 构建一个Web应用:利用search4letters这个函数,让人们都可以在web上访问这个函数 Python F...