198 votes

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».

280voto

Yuchen Zhong Points 2600

Le tutoriel officiel décrit le déploiement d'une application à la production. Une option est d'utiliser la Serveuse, une production de serveur WSGI. D'autres serveurs comprennent Gunicorn et uWSGI.

Lors de l'exécution de public plutôt que dans le développement, vous ne devez pas utiliser l'intégré dans le serveur de développement (flask run). Le serveur de développement est fourni par Werkzeug pour des raisons de commodité, mais n'est pas conçu pour être particulièrement efficace, stable, ou sécurisé.

Au lieu de cela, utilisez une production de serveur WSGI. Par exemple, pour utiliser la Serveuse, tout d'abord l'installer dans l'environnement virtuel:

$ pip install waitress

Vous devez dire à la Serveuse au sujet de votre demande, mais elle ne l'utilise pas FLASK_APP comme fiole terme n'. Vous avez besoin de le dire à l'importation et à l'appel l'application en usine pour obtenir une demande d'objet.

$ 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 de l'aide de la CLI la commande.

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

116voto

davidism Points 5946

Sauf si vous dites le serveur de développement qu'il s'exécute en mode de développement, il va supposer que vous êtes à l'utiliser en production et vous avertir de ne pas. Le serveur de développement n'est pas prévu pour une utilisation en production. Il n'est pas conçu pour être particulièrement efficace, stable, ou sécurisé.

Activer le mode de développement par la mise en au FLASK_ENV variable d'environnement development.

export FLASK_ENV=development
flask run

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

Mode de développement permet le débogueur et reloader par défaut. Si vous ne voulez pas de ces, pass --no-debugger ou --no-reloader de la run commande.


Cet avertissement est juste un avertissement cependant, ce n'est pas une erreur empêchant l'exécution de votre application. Si votre application ne fonctionne pas, il y a autre chose de mal avec votre code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X