深入浅出Flask(4) --Flask run and Python py
讨论一个小问题,关于启动Flask程序的两种方式。
对于Flask run指令,如果你只是配置了app.config['debug']=True的话,会发现并没有启动调试模式;
对于Python demo.py,如果你使用了flask-dotenv扩展后,创建了0.11版本之后Flask推荐使用的".env"和'.flaskenv"文件,并在".flaskenv"种配置了:"FLASK_ENV=development",你会发现同样没有启动调试模式。
看完两个例子,大家心中应该有了答案,也就是说Flask run指令对应的是.env的配置;普通的Python指令使用的是Debug=True配置,那么这两个到底有什么区别呢?
简单来说,Flask run是服务器层面上的操作,告诉你使用的是development服务器;而普通的Python指令只是从config中读取到Debug==True而已,他并不知道服务器到底有没有运行,也不关心这个。
从代码层面上猜测,Flask-cli.py中配置了run指令的方法,即使也使用到了config中的变量,并不影响开发服务器的运行,同样我们使用普通的python指令时也仅仅读一下Debug而已。殊途同归, 他们都能启动开发服务器。
之所以没有贴源码分析,毕竟这两种方式都不是在生产环境中使用的,毕竟Werkzeug提供的只是简易的服务器,到最后更多是使用Nginx,因此也没必要分析的太深,等详细学习源码的时候再做扩展。
还有:
除此之外,对于.flaskenv,尽管我们可以设置FLASK_ENV等值,但要注意如果运行前我们在外部更改了这个值,外部更改得到的值优先度是最高的,其次是.env中的值,最后才是.flaskenv中的值。
这也是为什么在Pycharm集成的Flask Cli中,FLASK_ENV和FLASK_DEBUG的值是固定的,不会因为在.flaskenv中改变而改变,调整这个值必须通过下图中设置改变:

最后:
FLASK_DEBUG值一般不推荐手动设置,毕竟development开启时一般是默认设置Debug开启的
以上