Bien que cela soit possible, vous ne devez pas utiliser le serveur de développement Flask en production. Le serveur de développement Flask n'est pas conçu pour être particulièrement sécurisé, stable ou efficace. Voir les documents sur le déploiement pour des solutions correctes.
Ajoutez un paramètre à votre app.run()
. Par défaut, il s'exécute sur localhost, remplacez-le par pour app.run(host= '0.0.0.0')
qu'il s'exécute sur l'adresse IP de votre machine.
Documenté sur le site Flask sous "Externally Visible Server" sur la page Quickstart :
Serveur visible de l'extérieur
Si vous exécutez le serveur, vous remarquerez que le serveur est uniquement disponible à partir de votre propre ordinateur, pas de tout autre sur le réseau. Il s'agit de la valeur par défaut car en mode débogage, un utilisateur de l'application peut exécuter du code Python arbitraire sur votre ordinateur. Si le débogage est désactivé ou si vous faites confiance aux utilisateurs de votre réseau, vous pouvez rendre le serveur accessible au public.
Modifiez simplement l'appel de la run()
méthode pour qu'elle ressemble à ceci:
app.run(host='0.0.0.0')
Cela indique à votre système d'exploitation d'écouter sur une IP publique.
mymacname.local
.flask run --host 0.0.0.0
pour le faire fonctionner.Si vous utilisez l'exécutable flask pour démarrer votre serveur, vous pouvez utiliser
flask run --host=0.0.0.0
pour modifier la valeur par défaut de 127.0.0.1 et l'ouvrir aux connexions non locales. Les méthodes config et app.run décrites dans les autres réponses sont probablement une meilleure pratique mais cela peut aussi être pratique.Référence: http://flask.pocoo.org/docs/0.11/quickstart/
la source
127.0.0.1
(j'ai configuré correctement mon exécutable Flask, ou du moins il me semblait, n'était pas sûr de ce que je faisais mal). Cependant, après avoir ajoutéapp.run(host='0.0.0.0')
comme indiqué dans une autre réponse dans mon fichier serveur, j'ai pu accéder à la page sur les réseaux. Quelqu'un d'autre a un problème comme celui que j'ai décrit ou a des informations à ce sujet?Essayez ceci si la méthode 0.0.0.0 ne fonctionne pas
Truc ennuyant
J'ai personnellement beaucoup lutté pour que mon application soit accessible à d'autres appareils (ordinateurs portables et téléphones portables) via un serveur local. J'ai essayé la méthode 0.0.0.0, mais pas de chance. Ensuite, j'ai essayé de changer le port, mais cela n'a tout simplement pas fonctionné. Donc, après avoir essayé un tas de combinaisons différentes, je suis arrivé à celui-ci, et cela a résolu mon problème de déploiement de mon application sur un serveur local.
Pas
ipconfig
sur Windows etifconfig
sur Linux et Mac.Remarque: l'étape ci-dessus doit être effectuée sur la machine sur laquelle vous utilisez l'application, et non sur la machine sur laquelle vous y accédez. Notez également que l'adresse IPv4 peut changer si vous vous déconnectez et vous reconnectez au réseau.
Maintenant, exécutez simplement l'application flask avec l'adresse IPv4 acquise.
flask run -h 192.168.X.X
Par exemple, dans mon cas (voir l'image), je l'ai exécuté comme:
flask run -h 192.168.1.100
Sur mon appareil mobile
Trucs en option
Si vous effectuez cette procédure sous Windows et utilisez Power Shell en tant que CLI et que vous ne parvenez toujours pas à accéder au site Web, essayez une commande CTRL + C dans le shell qui exécute l'application. Power Shell se fige parfois et il a besoin d'une pincée pour revivre. Cela pourrait même mettre fin au serveur, mais cela fait parfois l'affaire.
C'est ça. Donnez un coup de pouce si vous avez trouvé cela utile.
Quelques trucs plus optionnels
J'ai créé un court script Powershell qui vous obtiendra votre adresse IP chaque fois que vous en aurez besoin:
Enregistrez-le dans un fichier avec l'extension .ps1 (pour PowerShell) et exécutez-le avant de démarrer votre application. Vous pouvez l'enregistrer dans votre dossier de projet et l'exécuter en tant que:
Remarque: j'ai enregistré le code shell ci-dessus dans getIP.ps1.
Cool.👌
la source
Si votre
cool
application a sa configuration chargée à partir d'un fichier externe, comme dans l'exemple suivant, n'oubliez pas de mettre à jour le fichier de configuration correspondant avec HOST = "0.0.0.0"la source
Ajoutez des lignes ci-dessous à votre projet
la source
OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
netstat -na|findstr 5005
.Vérifiez si le port particulier est ouvert sur le serveur pour servir le client ou non?
dans la distribution Ubuntu ou Linux
Configurer l'application pour gérer les requêtes distantes
la source
Accédez à votre chemin de projet sur CMD (invite de commande) et exécutez la commande suivante: -
définir FLASK_APP = ABC.py
SET FLASK_ENV = développement
flask run -h [yourIP] -p 8080
vous obtiendrez o / p suivant sur CMD: -
Vous pouvez maintenant accéder à votre application flask sur une autre machine en utilisant http: // [yourIP]: 8080 / url
la source
Si vous rencontrez des problèmes pour accéder à votre serveur Flask, déployé à l'aide de PyCharm , prenez en compte les éléments suivants:
PyCharm n'exécute pas votre fichier .py principal directement, donc tout code
if __name__ == '__main__':
ne sera pas exécuté et aucune modification (commeapp.run(host='0.0.0.0', port=5000)
) ne prendra effet.Au lieu de cela, vous devez configurer le serveur Flask à l'aide de Run Configurations, en particulier, en le plaçant
--host 0.0.0.0 --port 5000
dans le champ Options supplémentaires .En savoir plus sur la configuration du serveur Flask dans PyCharm
la source
Pour moi, j'ai suivi la réponse ci-dessus et l'ai légèrement modifiée:
Par exemple:
la source
J'ai eu le même problème, j'utilise PyCharm en tant qu'éditeur et lorsque j'ai créé le projet, PyCharm a créé un serveur Flask. J'ai créé un serveur avec Python de la manière suivante;
essentiellement ce que je faisais était de créer un nouveau serveur mais flacon sinon python
J'espère que ça t'aide
la source
Cette réponse n'est pas uniquement liée au flacon, mais devrait être applicable pour tous les services ne pouvant pas se connecter à partir d'un autre problème d' hôte .
netstat -ano | grep <port>
pour voir si l'adresse est 0.0.0.0 ou ::. S'il s'agit de 127.0.0.1, c'est uniquement pour les requêtes locales.Aujourd'hui, je lance mon application flask comme d'habitude, mais j'ai remarqué qu'elle ne peut pas se connecter à partir d'un autre serveur. Ensuite, je cours
netstat -ano | grep <port>
, et l'adresse locale est::
ou0.0.0.0
(j'ai essayé les deux, et je sais que 127.0.0.1 autorise uniquement la connexion à partir de l'hôte local). Ensuite, j'ai utilisételnet host port
, le résultat est commeconnect to ...
. C'est très étrange. Ensuite, j'ai pensé que je ferais mieux de le vérifier avectcpdump -i any port <port> -w w.pcap
. Et j'ai remarqué que c'est comme ça:Ensuite, en vérifiant la
iptables --list
section OUTPUT, j'ai pu voir plusieurs règles:ces règles interdisent la sortie des paquets vitaux TCP lors de l'établissement d'une liaison. En les supprimant, le problème a disparu.
la source
aller au chemin du projet set FLASK_APP = ABC.py SET FLASK_ENV = development
flask run -h [yourIP] -p 8080 vous suivrez o / p sur CMD: - * Servant l'application Flask "expiration.py" (chargement paresseux) * Environnement: développement * Mode débogage: activé * Redémarrage avec stat * Le débogueur est actif ! * Code PIN du débogueur: 199-519-700 * Fonctionne sur http: // [yourIP]: 8080 / (Appuyez sur CTRL + C pour quitter)
la source
Vous pouvez également définir l'hôte (pour l'exposer sur une adresse IP réseau) et le port via des variables d'environnement.
Voir Comment obtenir toutes les options de commande disponibles pour définir les variables d'environnement?
la source
Créez un fichier
.flaskenv
dans le répertoire racine du projet.Les paramètres de ce fichier sont généralement:
Si vous disposez d'un environnement virtuel, activez-le et procédez comme suit
pip install python-dotenv
.Ce paquet va utiliser le
.flaskenv
fichier et les déclarations qu'il contient seront automatiquement importées à travers les sessions de terminal.Ensuite, vous pouvez faire
flask run
la source