开发服务器

Flask 提供了一个 run 命令,用于使用开发服务器运行应用程序。在调试模式下,此服务器提供交互式调试器,并在代码更改时重新加载。

警告

请勿在部署到生产环境时使用开发服务器。它仅用于本地开发。它并非设计为高效、稳定或安全。

请参阅 部署到生产环境 以了解部署选项。

命令行

flask run CLI 命令是运行开发服务器的推荐方式。使用 --app 选项来指向您的应用程序,并使用 --debug 选项来启用调试模式。

$ flask --app hello run --debug

这会启用调试模式,包括交互式调试器和重载器,然后在 https://127.0.0.1:5000/ 上启动服务器。使用 flask run --help 查看可用选项,并参阅 命令行界面 以获取有关配置和使用 CLI 的详细说明。

地址已被占用

如果另一个程序已在使用端口 5000,当服务器尝试启动时,您将看到一个 OSError。它可能包含以下消息之一

  • OSError: [Errno 98] 地址已被占用

  • OSError: [WinError 10013] 尝试以其访问权限禁止的方式访问套接字

要么识别并停止另一个程序,要么使用 flask run --port 5001 选择不同的端口。

您可以使用 netstatlsof 来识别哪个进程 ID 正在使用端口,然后使用其他操作系统工具停止该进程。以下示例显示进程 ID 6847 正在使用端口 5000。

$ netstat -nlp | grep 5000
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 6847/python

macOS Monterey 及更高版本会自动启动一个使用端口 5000 的服务。您可以选择禁用此服务,而不是使用不同的端口,方法是在“系统偏好设置”中搜索“AirPlay 接收器”并将其关闭。

重新加载时延迟的错误

当使用带有重载器的 flask run 命令时,即使您在代码中引入语法错误或其他初始化错误,服务器也会继续运行。访问该站点将显示该错误的交互式调试器,而不是崩溃服务器。

如果在调用 flask run 时已经存在语法错误,它将立即失败并显示回溯,而不是等到站点被访问时才失败。这旨在使错误在初始阶段更明显,同时仍然允许服务器处理重新加载时的错误。

在代码中

也可以使用 Python 通过 Flask.run() 方法启动开发服务器。此方法接受类似于 CLI 选项的参数来控制服务器。与 CLI 命令的主要区别在于,如果在重新加载时出现错误,服务器将崩溃。debug=True 可以传递以启用调试模式。

将调用放在主代码块中,否则稍后尝试使用生产服务器导入和运行应用程序时会产生干扰。

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