开发服务器 — Flask 文档

来自菜鸟教程
Flask/docs/2.0.x/server
跳转至:导航、​搜索

开发服务器

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

警告

部署到生产时不要使用开发服务器。 它仅供在本地开发期间使用。 它的设计目的不是特别高效、稳定或安全。

有关部署选项,请参阅 部署选项


命令行

flask run 命令行脚本是运行开发服务器的推荐方式。 它需要设置 FLASK_APP 环境变量以指向您的应用程序,并需要设置 FLASK_ENV=development 以完全启用开发模式。

这将启用开发环境,包括交互式调试器和重新加载器,然后在 http://localhost:5000/ 上启动服务器。 使用 flask run --help 查看可用选项,使用 命令行界面 获取有关配置和使用 CLI 的详细说明。

笔记

在 Flask 1.0 之前,不支持 FLASK_ENV 环境变量,您需要通过导出 FLASK_DEBUG=1 来启用调试模式。 这仍然可以用于控制调试模式,但您应该更喜欢设置如上所示的开发环境。


地址已被使用

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

  • OSError: [Errno 98] Address already in use
  • OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions

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

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

MacOS Monterey 及更高版本会自动启动使用端口 5000 的服务。 要禁用该服务,请转到“系统偏好设置”、“共享”并禁用“AirPlay 接收器”。


懒加载或急切加载

flask run 命令与重新加载器一起使用时,即使您在代码中引入语法错误或其他初始化错误,服务器也会继续运行。 访问该站点将显示错误的交互式调试器,而不是使服务器崩溃。 此功能称为“延迟加载”。

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

要覆盖此行为并始终立即失败,即使在重新加载时,请传递 --eager-loading 选项。 要始终保持服务器运行,即使在初始调用时,请传递 --lazy-loading


在代码中

作为 flask run 命令的替代,也可以使用 Flask.run() 方法从 Python 启动开发服务器。 此方法采用类似于 CLI 选项的参数来控制服务器。 与 CLI 命令的主要区别在于,如果重新加载时出现错误,服务器将崩溃。

可以通过 debug=True 来启用调试器和重新加载器,但仍然需要 FLASK_ENV=development 环境变量才能完全启用开发模式。

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

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