Lorsque je démarre un simple serveur Web construit avec Flask en déboguant depuis VScode, je peux y accéder localement sans aucun problème, mais je ne peux pas y accéder de l'extérieur.
Démarrez le débogage en appuyant sur F5 sur VScode pour le run.py
suivant
run.py
from flask import Flask, make_response, jsonify
app = Flask(__name__)
@app.route('/')
def hello_world():
return "Hello, World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
commencer
* Serving Flask app "flask/run.py"
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Je peux y accéder localement sans aucun problème
$ curl http://localhost:5000/
Hello, World!
Non accessible de l'extérieur
$ curl http://192.168.xxx.yyy:5000/
curl: (7) Failed to connect to 192.168.206.129 port 80: Connection refused
Je me demande si certaines personnes restent coincées au même endroit, alors je vais le poster.
Lorsque je googlé "Flask ne peut pas être publié en externe", il y a beaucoup de gens qui sont obstrués par les causes suivantes.
Flask n'autorise pas la divulgation externe par défaut. Par conséquent, si vous souhaitez le publier vers l'extérieur, vous devez spécifier explicitement 0.0.0.0 comme indiqué ci-dessous.
run.py
from flask import Flask, make_response, jsonify
app = Flask(__name__)
@app.route('/')
def hello_world():
return "Hello, World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port='5000')
Si 0.0.0.0 ci-dessus n'a pas aidé, c'était généralement ceci. Vous pouvez l'ouvrir vers l'extérieur en désactivant le pare-feu ou en ouvrant le port que vous souhaitez utiliser.
Même si vous essayez les deux solutions ci-dessus, si vous ne l'avez pas encore résolu, vous risquez de trébucher au même endroit que moi.
Lorsque vous démarrez F5 avec VScode, les paramètres de launch.json
sont chargés.
Sur cette base, VScode démarrera le programme en appuyant correctement sur la commande de démarrage.
Mon launch.json
qui a été généré automatiquement cette fois était le suivant.
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Flask",
"type": "python",
"request": "launch",
"module": "flask",
"env": {
"FLASK_APP": "flask/run.py"
},
"args": [
"run",
"--no-debugger",
"--no-reload"
],
"jinja": true
}
]
}
La commande générée à partir de ce launch.json
est
flask run --no-debugger --no-reload
Je me sens comme cela.
Apparemment, il était nécessaire de spécifier host = '0.0.0.0' dans cette partie.
Ajout des spécifications d'hôte et de port aux arguments dans launch.json
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Flask",
"type": "python",
"request": "launch",
"module": "flask",
"env": {
"FLASK_APP": "flask/run.py"
},
"args": [
"run",
"--no-debugger",
"--no-reload",
"--host=0.0.0.0",
"--port=5000"
],
"jinja": true
}
]
}
Il est désormais possible de l'ouvrir vers l'extérieur.
$ curl http://localhost:5000/
Hello, World!
Quand je l'ai démarré avec F5, la commande exécutée par VScode est sortie correctement. Si vous regardez ici depuis le début, vous avez peut-être remarqué plus tôt
#Sur la première ligne-m flask run --no-debugger --no-Il dit recharger correctement
$ /home/user/.local/share/virtualenvs/flask-FhE9rMZ_/bin/python /home/user/.vscode/extensions/ms-python.python-2019.10.44104/pythonFiles/ptvsd_launcher.py --default --client --host localhost --port 34251 -m flask run --no-debugger --no-reload
* Serving Flask app "flask/run.py"
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Vous devez regarder de près les journaux ...