开发服务器 — Flask 文档
开发服务器
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