如何调试 Flask 应用程序

问题描述 投票:0回答:14

如何调试 Flask 中的错误? 打印到控制台? 向页面闪现消息? 或者是否有更强大的选项可以在出现问题时找出发生了什么?

python debugging flask
14个回答
242
投票

出现错误时,在调试模式下运行应用程序将在浏览器中显示交互式回溯和控制台。从 Flask 2.2 开始,要在调试模式下运行,请将

--app
--debug
选项传递给
flask
命令。

$ flask --app example --debug run

在 Flask 2.2 之前,这是由

FLASK_ENV=development
环境变量控制的。您仍然可以使用
FLASK_APP
FLASK_DEBUG=1
代替上面的选项。

对于 Linux、Mac、Windows 上的 Linux 子系统、Windows 上的 Git Bash 等:

$ export FLASK_APP=example
$ export FLASK_DEBUG=1
$ flask run

对于 Windows CMD,请使用

set
而不是导出:

set FLASK_DEBUG=1

对于 PowerShell,请使用

$env
:

$env:FLASK_DEBUG = "1"

如果您使用

app.run()
方法而不是
flask run
命令,请传递
debug=True
以启用调试模式。

无论开发模式如何,回溯也会打印到运行服务器的终端。

如果您使用 PyCharm、VS Code 等,您可以利用其调试器通过断点单步执行代码。运行配置可以指向调用

app.run(debug=True, use_reloader=False)
的脚本,或者将其指向
venv/bin/flask
脚本并像在命令行中一样使用它。您可以禁用重新加载器,但重新加载会终止调试上下文,您将不得不再次捕获断点。

您还可以通过在要开始调试的视图中调用

set_trace
来使用 pdb、pudb 或其他终端调试器。


除了块之外,请确保不要使用太宽泛的内容。用一个包罗万象的

try... except...
包围你的所有代码将会消除你想要调试的错误。一般来说这是不必要的,因为 Flask 已经通过显示调试器或 500 错误并将回溯打印到控制台来处理异常。


59
投票

您可以将

app.run(debug=True)
用于 Werkzeug 调试器 edit,如下所述,我应该知道。


33
投票

1.1.x
文档,您可以通过将环境变量导出到 shell 提示符来启用调试模式:

export FLASK_APP=/daemon/api/views.py  # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

28
投票

还可以使用 Flask 调试工具栏 扩展来获取嵌入在渲染页面中的更多详细信息。

from flask import Flask
from flask_debugtoolbar import DebugToolbarExtension
import logging

app = Flask(__name__)
app.debug = True
app.secret_key = 'development key'

toolbar = DebugToolbarExtension(app)

@app.route('/')
def index():
    logging.warning("See this message in Flask Debug Toolbar!")
    return "<html><body></body></html>"

按如下方式启动应用程序:

FLASK_APP=main.py FLASK_DEBUG=1 flask run

22
投票

如果您使用的是 Visual Studio Code,请替换

app.run(debug=True)

app.run()

打开内部调试器禁用 VS Code 调试器时会出现。


14
投票

如果您想调试 Flask 应用程序,只需转到 Flask 应用程序所在的文件夹即可。不要忘记激活您的虚拟环境并将控制台中的行粘贴到“mainfilename”更改为 Flask 主文件。

export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

为 Flask 应用程序启用调试器后,几乎每个错误都会打印在控制台或浏览器窗口上。 如果您想弄清楚发生了什么,可以使用简单的 print 语句,也可以使用 console.log() 作为 javascript 代码。


13
投票

当作为

python app.py
而不是
flask
命令运行时,您可以将
debug=True
传递给
app.run

if __name__ == "__main__":
    app.run(debug=True)
$ python app.py

12
投票

要在 Flask 中激活调试模式,您只需在 Windows 的

set FLASK_DEBUG=1
上输入
CMD
,或者在 Linux 终端上输入
export FLASK_DEBUG=1
,然后重新启动您的应用程序,就可以了!!


10
投票

在您的虚拟环境中安装

python-dotenv

在项目根目录中创建一个 .flaskenv。项目根目录是指包含 app.py 文件的文件夹

在此文件中写入以下内容:

FLASK_APP=myapp 
FLASK_ENV=development

现在发出以下命令:

flask run

6
投票

使用虚拟环境激活

export FLASK_DEBUG=true

可以配置

export FLASK_APP=app.py  # run.py
export FLASK_ENV = "development"

开始

flask run

结果

 * Environment: development
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: xxx-xxx-xxx

如果你改变

export FLASK_DEBUG=false

 * Environment: development
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

5
投票

对于 Windows 用户:

打开 Powershell 并 cd 到您的项目目录。

在 Powershell 中使用这些突击队,所有其他东西在 Powershell 中都不起作用。

$env:FLASK_APP = "app"  
$env:FLASK_ENV = "development"

3
投票

如果您有 PyCharm Professional,则可以创建 Flask 服务器运行配置并启用

FLASK_DEBUG
复选框。转到
Run > Edit Configurations
,选择或创建
Flask server
配置,然后启用
FLASK_DEBUG
复选框。单击“确定”,然后单击“运行”按钮。


0
投票

您可以使用以下命令安装 python-dotenv

pip install python-dotenv
然后创建
.flask_env
.env
文件 文件的内容可以是:

FLASK_APP=myapp
FLASK_DEBUG=True

0
投票

除了其他答案之外,如果您仍然没有看到日志消息,您可能需要调整应用程序的记录器级别:

app.logger.setLevel(logging.DEBUG)

@app.route('/'):
def index():
    app.logger.info('Request made')
    ...

我相信日志级别默认为

WARNING

© www.soinside.com 2019 - 2024. All rights reserved.