Ich bin mir nicht sicher, ob dies Flask-spezifisch ist, aber wenn ich eine App im Dev-Mode laufen lasse ( http://localhost:5000
), kann ich von anderen Rechnern im Netzwerk nicht darauf zugreifen (mit http://[dev-host-ip]:5000
). Mit Rails im Dev-Modus, zum Beispiel, funktioniert es gut. Ich konnte keine Dokumente zur Konfiguration des Flask-Dev-Servers finden. Irgendeine Idee, was konfiguriert werden sollte, um dies zu aktivieren?
Antworten
Zu viele Anzeigen?Obwohl dies möglich ist, sollten Sie den Flask Dev-Server nicht in der Produktion verwenden. Der Flask Dev-Server ist nicht dafür ausgelegt, besonders sicher, stabil oder effizient zu sein. Siehe die Dokumentationen auf Einsatz von für korrekte Lösungen.
El --host
Option zu flask run
oder die host
Parameter zu app.run()
steuert, auf welche Adresse der Entwicklungsserver hört. Standardmäßig läuft er auf localhost
ändern Sie es in flask run --host=0.0.0.0
(o app.run(host="0.0.0.0")
), um auf allen IP-Adressen Ihres Rechners zu laufen.
0.0.0.0
ist ein spezieller Wert, den Sie nicht direkt im Browser verwenden können. Sie müssen zur tatsächlichen IP-Adresse des Rechners im Netzwerk navigieren. Möglicherweise müssen Sie auch Ihre Firewall anpassen, um den externen Zugriff auf den Anschluss zuzulassen.
Der Flachmann Schnellstart-Dokumente Dies wird im Abschnitt "Extern sichtbarer Server" erläutert:
Wenn Sie den Server starten, werden Sie feststellen, dass der Server nur von Ihrem eigenen Computer aus zugänglich ist, nicht von anderen Computern im Netzwerk. Dies ist die Voreinstellung, da im Debugging-Modus ein Benutzer der Anwendung beliebigen Python-Code auf Ihrem Computer ausführen kann.
Wenn Sie den Debugger deaktiviert haben oder den Benutzern in Ihrem Netzwerk vertrauen, können Sie den Server öffentlich zugänglich machen, indem Sie einfach
--host=0.0.0.0
in die Befehlszeile:$ flask run --host=0.0.0.0
Dadurch wird Ihr Betriebssystem angewiesen, alle öffentlichen IPs abzuhören.
Wenn Sie die flask
um Ihren Server zu starten, verwenden Sie flask run --host=0.0.0.0
um den Standardwert von 127.0.0.1 zu ändern und ihn für nicht-lokale Verbindungen zu öffnen.
Wenn Sie den Server starten, werden Sie feststellen, dass der Server nur von Ihrem eigenen Computer aus zugänglich ist, nicht von anderen Computern im Netzwerk. Dies ist die Voreinstellung, da im Debugging-Modus ein Benutzer der Anwendung beliebigen Python-Code auf Ihrem Computer ausführen kann.
Wenn Sie den Debugger deaktiviert haben oder den Benutzern in Ihrem Netzwerk vertrauen, können Sie den Server öffentlich zugänglich machen, indem Sie einfach
--host=0.0.0.0
in die Befehlszeile:$ flask run --host=0.0.0.0
Dadurch wird Ihr Betriebssystem angewiesen, alle öffentlichen IPs abzuhören.
Versuchen Sie dies, wenn die 0.0.0.0-Methode nicht funktioniert
Langweiliges Zeug
Ich persönlich habe viel damit gekämpft, meine App über einen lokalen Server für andere Geräte (Laptops und Handys) zugänglich zu machen. Ich habe es mit der 0.0.0.0-Methode versucht, aber ohne Erfolg. Dann habe ich versucht, den Port zu ändern, aber es hat einfach nicht funktioniert. Nachdem ich also eine Reihe verschiedener Kombinationen ausprobiert hatte, kam ich zu dieser, und sie löste mein Problem, meine App auf einem lokalen Server bereitzustellen.
Schritte
- Ermitteln Sie die lokale IPv4-Adresse Ihres Computers. Dies kann durch Eingabe von
ipconfig
unter Windows undifconfig
unter Linux und Mac.
Bitte beachten Sie: Der obige Schritt muss auf dem Rechner ausgeführt werden, auf dem Sie die Anwendung bereitstellen, und nicht auf dem Rechner, auf dem Sie auf die Anwendung zugreifen. Beachten Sie auch, dass sich die IPv4-Adresse ändern kann, wenn Sie die Verbindung zum Netzwerk trennen und wieder herstellen.
-
Führen Sie nun einfach die Flask-Anwendung mit der erworbenen IPv4-Adresse aus.
flask run -h 192.168.X.X
In meinem Fall (siehe Bild) habe ich es z. B. so ausgeführt:
flask run -h 192.168.1.100
Auf meinem mobilen Gerät
Optionales Material
Wenn Sie diese Prozedur unter Windows durchführen und Power Shell als CLI verwenden und Sie immer noch nicht auf die Website zugreifen können, versuchen Sie es mit dem Befehl STRG + C in der Shell, in der die Anwendung ausgeführt wird. Power Shell friert manchmal ein und benötigt einen kurzen Tastendruck, um wieder zu funktionieren. Dies kann sogar dazu führen, dass der Server beendet wird, aber manchmal klappt es.
Das war's. Geben Sie einen Daumen hoch, wenn Sie dies hilfreich fanden.
Einige weitere optionale Dinge
Ich habe ein kurzes Powershell-Skript erstellt, das Ihnen Ihre IP-Adresse liefert, wann immer Sie sie brauchen:
$env:getIp = ipconfig
if ($env:getIp -match '(IPv4[\sa-zA-Z.]+:\s[0-9.]+)') {
if ($matches[1] -match '([^a-z\s][\d]+[.\d]+)'){
$ipv4 = $matches[1]
}
}
echo $ipv4
Speichern Sie es in einer Datei mit der Erweiterung .ps1 (für PowerShell), und führen Sie es aus, bevor Sie Ihre Anwendung starten. Sie können die Datei in Ihrem Projektordner speichern und sie ausführen als:
.\getIP.ps1; flask run -h $ipv4
Hinweis: Ich habe den obigen Shellcode in getIP.ps1 gespeichert.
Cool.
Hinzufügen host='0.0.0.0' to
app.run`.
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Wenn Sie OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
unter Windows, haben Sie entweder keine Berechtigung, den Anschluss zu verwenden, oder er wird von etwas anderem verwendet, was Sie mit netstat -na|findstr 5000
.
Prüfen Sie, ob der betreffende Port auf dem Server geöffnet ist, um den Client zu bedienen oder nicht?
in Ubuntu oder einer Linux-Distribution
sudo ufw enable
sudo ufw allow 5000/tcp //allow the server to handle the request on port 5000
Konfigurieren Sie die Anwendung für die Bearbeitung von Fernanfragen
app.run(host='0.0.0.0' , port=5000)
python3 app.py & #run application in background
- See previous answers
- Weitere Antworten anzeigen