如何调试Flask应用程序

Kim*_*mmy 97 python debugging flask

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

dav*_*ism 100

在开发模式下运行应用程序将在出现错误时在浏览器中显示交互式回溯和控制台.要在开发模式下运行,请设置FLASK_ENV=development环境变量,然后使用该flask run命令(请记住也指向FLASK_APP您的应用程序).

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

export FLASK_APP=myapp
export FLASK_ENV=development
flask run
Run Code Online (Sandbox Code Playgroud)

对于Windows CMD,请使用set而不是导出:

set FLASK_ENV=development
Run Code Online (Sandbox Code Playgroud)

对于PowerShell,请使用$env:

$env:FLASK_ENV = "development"
Run Code Online (Sandbox Code Playgroud)

在Flask 1.0之前,它由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或其他终端调试器.


除了块之外,一定不要使用太宽泛的东西.使用catch-all围绕所有代码try... except...将使您想要调试的错误无效.一般来说,这是不必要的,因为Flask已经通过显示调试器或500错误并将回溯打印到控制台来处理异常.


bnl*_*cas 28

您可以使用app.run(debug=True)WERKZEUG调试器 编辑如下所述,我应该知道.

  • 实际上,当你使用`debug = True`运行时,你实际上正在使用Werkzeug debuger,所以它不是 - 或者---) (7认同)

Édo*_*pez 15

0.11文档中,您可以通过导出环境变量来启用调试模式:

export FLASK_APP=/daemon/api/views.py  # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Run Code Online (Sandbox Code Playgroud)

  • 如果它解释了实际的调试模式,那么这个答案会更有帮助.它不仅仅是允许在浏览器中进行调试吗?不幸的是,由于我正在开发一个REST API,这对我来说并没有多大帮助. (2认同)

Tus*_*har 11

当运行 aspython app.py而不是flask命令时,您可以传递debug=Trueapp.run.

if __name__ == "__main__":
    app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
$ python app.py
Run Code Online (Sandbox Code Playgroud)


tur*_*ula 10

还可以使用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>"
Run Code Online (Sandbox Code Playgroud)

启动应用程序如下:

FLASK_APP=main.py FLASK_DEBUG=1 flask run
Run Code Online (Sandbox Code Playgroud)


小智 10

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

app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

app.run()
Run Code Online (Sandbox Code Playgroud)

打开内部调试器时会出现禁用VS Code调试器的情况.

  • 您可以分享一个工作设置示例吗?我已经在环境中定义了FLASK_APP,默认配置不起作用。我尝试了这个-https://pastebin.com/v8hBQ2vv和许多类似的排列,但无济于事。 (3认同)

omk*_*dav 9

如果要调试flak应用程序,只需转到flask应用程序所在的文件夹,别忘了激活您的虚拟环境并将行粘贴到控制台中,将“ mainfilename”更改为flask main文件。

export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0
Run Code Online (Sandbox Code Playgroud)

启用flask应用程序的调试器后,几乎所有错误都会打印在控制台或浏览器窗口上。如果您想弄清楚是什么,可以使用简单的打印语句,也可以将console.log()用于javascript代码。

  • 请编辑您的答案以提供一些叙述性的答案。谢谢。(此外,您似乎重复了一行。) (3认同)

Man*_*ngh 7

python-dotenv在您的虚拟环境中安装。

在您的项目根目录中创建一个 .flaskenv。通过项目根目录,我的意思是包含您的 app.py 文件的文件夹

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

FLASK_APP=myapp 
FLASK_ENV=development
Run Code Online (Sandbox Code Playgroud)

现在发出以下命令:

flask run
Run Code Online (Sandbox Code Playgroud)


小智 7

要在 Flask 中激活调试模式,您只需set FLASK_DEBUG=1CMDfor windows 或export FLASK_DEBUG=1Linux 终端上键入,然后重新启动您的应用程序,您就可以开始了!!


小智 6

使用虚拟环境激活

export FLASK_DEBUG=true
Run Code Online (Sandbox Code Playgroud)

你可以配置

export FLASK_APP=app.py  # run.py
export FLASK_ENV = "development"
Run Code Online (Sandbox Code Playgroud)

开始

flask run
Run Code Online (Sandbox Code Playgroud)

结果

 * 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
Run Code Online (Sandbox Code Playgroud)

如果你改变

export FLASK_DEBUG=false

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


小智 5

对于 Windows 用户:

打开 Powershell 并 cd 进入您的项目目录。

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

$env:FLASK_APP = "app"  
$env:FLASK_ENV = "development"
Run Code Online (Sandbox Code Playgroud)