Flask at first run: Do not use the development server in a production environment
我在PyCharm Community Edition中安装了Flask插件,而我的flask应用程序中只有以下简单代码:
1 2 3 4 5 6 7 8 9 | from flask import Flask app = Flask(__name__) @app.route('/') def index(): return 'Hello!' if __name__ =="__main__": app.run(debug=True) |
我收到此消息:
1 2 3 4 5 6 7 | 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时出现此错误?
该消息的先前版本显示为"请勿在生产环境中使用开发服务器。" sub>
官方教程讨论了将应用程序部署到生产环境。一种选择是使用生产WSGI服务器Waitress。其他服务器包括Gunicorn和uWSGI。
When running publicly rather than in development, you should not use
the built-in development server (flask run ). The development server
is provided by Werkzeug for convenience, but is not designed to be
particularly efficient, stable, or secure.Instead, use a production WSGI server. For example, to use Waitress,
first install it in the virtual environment:
1 $ pip install waitressYou need to tell Waitress about your application, but it doesn’t use
FLASK_APP like flask run does. You need to tell it to import and call
the application factory to get an application object.
1
2 $ waitress-serve --call 'flaskr:create_app'
Serving on http://0.0.0.0:8080
或者,您可以在代码中使用
1 2 3 4 5 6 7 8 9 10 11 | from flask import Flask app = Flask(__name__) @app.route("/") def index(): return"Hello!" if __name__ =="__main__": from waitress import serve serve(app, host="0.0.0.0", port=8080) |
1 | $ python hello.py |
除非您告知开发服务器它正在开发模式下运行,否则它将假定您正在生产环境中使用它,并警告您不要这样做。开发服务器不适用于生产环境。它的设计目的不是特别高效,稳定或安全。
通过将
1 2 | export FLASK_ENV=development flask run |
如果您在PyCharm(或可能的任何其他IDE)中运行,则可以在运行配置中设置环境变量。
开发模式默认情况下启用调试器和重新加载器。如果您不需要这些,请将
但是,该警告只是警告,并不是阻止您的应用运行的错误。如果您的应用无法运行,则您的代码还有其他问题。
如果以上答案对某些人(如我之前的我)不起作用,我认为以下答案将起作用(我认为适用于Mac用户)
输入以下命令进行烧瓶运行
1 2 3 | $ export FLASK_APP = hello.py $ export FLASK_ENV = development $ flask run |
或者,您可以执行以下操作(我还没有尝试过,但是在线上有一篇资源对此进行了讨论)
1 2 | $ export FLASK_APP = hello.py $ python -m flask run |
来源:更多