web-dev-qa-db-fra.com

Flask lors de la première exécution: n'utilisez pas le serveur de développement dans un environnement de production

J'ai installé le plugin Flask dans PyCharm Community Edition et j'ai juste ce code simple dans mon application flask:

from flask import Flask
app = Flask(__name__)

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

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

Et je reçois ce message:

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/

Pourquoi est-ce que j'obtiens cette erreur lorsque j'exécute Flask?


Une version précédente du message indiquait "N'utilisez pas le serveur de développement dans un environnement de production".

44
Anatoly

À moins que vous n'indiquiez au serveur de développement qu'il fonctionne en mode développement, il supposera que vous l'utilisez en production et vous avertira de ne pas le faire. Le serveur de développement n'est pas destiné à être utilisé en production. Il n'est pas conçu pour être particulièrement efficace, stable ou sécurisé.

Activez le mode de développement en définissant le FLASK_ENV variable d'environnement à development.

export FLASK_ENV=development
flask run

Si vous exécutez dans PyCharm (ou probablement tout autre IDE), vous pouvez définir des variables d'environnement dans la configuration d'exécution.

Le mode de développement active le débogueur et le rechargeur par défaut. Si vous n'en voulez pas, passez --no-debugger ou --no-reloader à la commande run.


Cet avertissement n'est cependant qu'un avertissement, ce n'est pas une erreur empêchant votre application de s'exécuter. Si votre application ne fonctionne pas, il y a un autre problème avec votre code.

31
davidism

Le didacticiel officiel traite du déploiement d'une application en production. Une option consiste à utiliser Waitress, un serveur WSGI de production. Les autres serveurs incluent Gunicorn et uWSGI.

Lorsque vous exécutez publiquement plutôt qu'en développement, vous ne devez pas utiliser le serveur de développement intégré (flask run). Le serveur de développement est fourni par Werkzeug pour plus de commodité, mais n'est pas conçu pour être particulièrement efficace, stable ou sécurisé.

Utilisez plutôt un serveur WSGI de production. Par exemple, pour utiliser Waitress, installez-le d'abord dans l'environnement virtuel:

$ pip install waitress

Vous devez informer votre serveuse de votre application, mais elle n'utilise pas FLASK_APP Comme flask run does. Vous devez lui dire d'importer et d'appeler l'usine d'application pour obtenir un objet d'application.

$ waitress-serve --call 'flaskr:create_app'
Serving on http://0.0.0.0:8080

Ou vous pouvez utiliser waitress.serve() dans le code au lieu d'utiliser la commande CLI.

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
44
Yuchen Zhong