Flask 首次运行:不要在生产环境中使用开发服务器

新手上路,请多包涵

我在 PyCharm Community Edition 中安装了 Flask 插件,我的 Flask 应用程序中只有这个简单的代码:

 from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return '<h1>Hello!</h1>'

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

我收到这条消息:

 WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead

* Restarting with stat
* Debugger is active!
* Debugger PIN: 123-456-789
* Running on http://127.0.0.1:5000/

为什么我在运行 Flask 时会收到此错误?


以前版本的消息是“不要在生产环境中使用开发服务器”。

原文由 Anatoly 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 6k
2 个回答

从 Flask 2.2 开始,开发服务器总是显示此警告,无法禁用它。开发服务器不适用于生产。它的设计目的不是特别高效、稳定或安全。请改用生产 WSGI 服务器。有关详细信息,请参阅 Flask 的部署文档

虽然该警告只是一个警告,但它并不是阻止您的应用程序运行的错误。如果您的应用无法运行,则说明您的代码存在其他问题。

该警告适用于开发服务器,而不是 Flask 本身。 Flask 框架适用于任何类型的应用程序和部署。

原文由 davidism 发布,翻译遵循 CC BY-SA 4.0 许可协议

要将应用程序部署到生产环境,一种选择是使用 Waitress,一种生产 WSGI 服务器。

这是在代码中使用 waitress 的示例。

 from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "<h1>Hello!</h1>"

if __name__ == "__main__":
    from waitress import serve
    serve(app, host="0.0.0.0", port=8080)

运行应用程序:

 $ python hello.py


Waitress 还提供了一个命令行实用程序 waitress-serve 。要使用它,您可以将代码修改为以下内容:

 from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "<h1>Hello!</h1>"

def create_app():
   return app

然后我们可以使用 waitress-serve 如下:

 waitress-serve --port=8080 --call hello:create_app


顺便说一句,8080 是默认端口。

要验证部署,请打开一个单独的窗口:

 % curl localhost:8080
<h1>Hello!</h1>%

或者直接在浏览器中 访问 http://localhost:8080/


部署应用程序的其他替代方案包括 Gunicorn 和 uWSGI。更多细节请参考 flask deploy 文档

原文由 Yuchen 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题