Wenn ich einen einfachen Webserver starte, der mit Flask durch Debuggen von VScode erstellt wurde, kann ich problemlos lokal darauf zugreifen, aber nicht von außen.
Starten Sie das Debuggen, indem Sie F5 auf VScode für die folgende run.py
drücken
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)
anfangen
* 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)
Ich kann problemlos lokal darauf zugreifen
$ curl http://localhost:5000/
Hello, World!
Von außen nicht zugänglich
$ curl http://192.168.xxx.yyy:5000/
curl: (7) Failed to connect to 192.168.206.129 port 80: Connection refused
Ich frage mich, ob einige Leute am selben Ort stecken bleiben, also werde ich es posten.
Wenn ich gegoogelt habe "Flasche kann nicht extern veröffentlicht werden", gibt es viele Leute, die aus folgenden Gründen verstopft sind.
Flask erlaubt standardmäßig keine externe Offenlegung. Wenn Sie es daher nach außen veröffentlichen möchten, müssen Sie wie unten gezeigt explizit 0.0.0.0 angeben.
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')
Wenn 0.0.0.0 oben nicht geholfen hat, war es normalerweise so. Sie können es nach außen öffnen, indem Sie die Firewall deaktivieren oder den Port öffnen, den Sie verwenden möchten.
Selbst wenn Sie die beiden oben genannten Lösungen ausprobieren und möglicherweise immer noch nicht lösen können, stolpern Sie möglicherweise an derselben Stelle wie ich.
Wenn Sie F5 mit VScode starten, werden die Einstellungen von launch.json
geladen.
Auf dieser Grundlage startet VScode das Programm, indem er den Startbefehl auf nette Weise drückt.
Meine launch.json
, die dieses Mal automatisch generiert wurde, war wie folgt.
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
}
]
}
Der aus dieser launch.json
generierte Befehl lautet
flask run --no-debugger --no-reload
Ich fühle mich so.
Anscheinend musste in diesem Teil host = '0.0.0.0' angegeben werden.
Host- und Portspezifikationen zu Argumenten in launch.json
hinzugefügt
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
}
]
}
Es ist jetzt möglich, es nach außen zu öffnen.
$ curl http://localhost:5000/
Hello, World!
Als ich es mit F5 gestartet habe, wird der von VScode ausgeführte Befehl ordnungsgemäß ausgegeben. Wenn Sie von Anfang an hierher schauen, haben Sie es vielleicht schon früher bemerkt
#In der ersten Zeile-m flask run --no-debugger --no-Es heißt richtig neu laden
$ /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)
Sie müssen sich die Protokolle genau ansehen ...
Recommended Posts