Running Flask by " Flask run"vs从编辑器运行(Windows 10).



如果我通过命令" Flask run"运行我的Flask应用程序,不仅app.run中的参数被忽略(使调试器为假并选择默认端口5000),而且对脚本所做的更改也被忽略,例如将url_prefix更改为"/view "当我保存修改后的脚本时,cmd提示符甚至不会响应。这样,更改只有在停止脚本然后再次运行后才有效。
当应用程序脚本通过VSCode命令(Ctrl+F5或播放按钮)运行时,这种情况不会发生:通过这些,脚本按照编写的方式执行,并且在保存脚本后立即识别更改。为什么会这样呢?

from flask import Flask
from views import views
app = Flask(__name__)
app.register_blueprint(views, url_prefix="/")
if __name__ == '__main__':
app.run(debug=True, port=8000)
C:Users*******Documentsflask_quick_website>flask run
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

flask可执行文件通过从代码中导入app对象来工作。这类似于像gunicorn这样的WSGI服务器的工作方式(如果你不确定这是什么,请研究一下)。

至于当你用VSCode运行脚本时,或者事实上,如果你通过运行python app.py或类似的方式启动python可执行文件,那么if __name__ == '__main__':块内的任何东西都会被执行,在你的情况下是app.run调用。

还要注意你的app.run调用传递了debug=True参数。如果你研究一下Flask的源代码,在run函数中,use_reloader参数被设置为与debug相同的值,所以在这种情况下,如果调试是True,则自动重新加载程序会运行。


那么如何使自动加载器与flask命令一起工作?传递--reload标志:

flask run --reload

您也可以将环境设置为development来实现相同的功能。在windows:

> set FLASK_ENV=development
> flask run

参见环境和调试特性了解更多信息。