Si bien esto es posible, no debe usar el servidor de desarrollo Flask en producción. El servidor de desarrollo de Flask no está diseñado para ser particularmente seguro, estable o eficiente. Consulte los documentos sobre la implementación de soluciones correctas.
Agregue un parámetro a su app.run()
. De forma predeterminada, se ejecuta en localhost, cámbielo a app.run(host= '0.0.0.0')
la dirección IP de su máquina.
Documentado en el sitio de Flask en "Servidor visible externamente" en la página de Inicio rápido :
Servidor visible externamente
Si ejecuta el servidor, notará que el servidor solo está disponible desde su propia computadora, no desde cualquier otro en la red. Este es el valor predeterminado porque en modo de depuración, un usuario de la aplicación puede ejecutar código Python arbitrario en su computadora. Si ha desactivado la depuración o confía en los usuarios de su red, puede hacer que el servidor esté disponible públicamente.
Simplemente cambie la llamada del run()
método para que se vea así:
app.run(host='0.0.0.0')
Esto le dice a su sistema operativo que escuche en una IP pública.
mymacname.local
.flask run --host 0.0.0.0
para que funcione.Si usa el ejecutable del matraz para iniciar su servidor, puede
flask run --host=0.0.0.0
cambiar el valor predeterminado de 127.0.0.1 y abrirlo a conexiones no locales. Los métodos config y app.run que describen las otras respuestas son probablemente una mejor práctica, pero esto también puede ser útil.Referencia: http://flask.pocoo.org/docs/0.11/quickstart/
fuente
127.0.0.1
(configuré mi ejecutable Flask correctamente, o eso parecía, no fue así). seguro de lo que estaba haciendo mal). Sin embargo, después de agregarapp.run(host='0.0.0.0')
como se indica en otra respuesta al archivo de mi servidor, pude acceder a la página a través de las redes. ¿Alguien más tiene un problema como el que describí o tiene alguna información al respecto?Pruebe esto si el método 0.0.0.0 no funciona
Cosas aburridas
Personalmente luché mucho para que mi aplicación fuera accesible a otros dispositivos (computadoras portátiles y teléfonos móviles) a través de un servidor local. Probé el método 0.0.0.0, pero no tuve suerte. Luego intenté cambiar el puerto, pero simplemente no funcionó. Entonces, después de probar varias combinaciones diferentes, llegué a esta y resolvió mi problema de implementar mi aplicación en un servidor local.
Pasos
ipconfig
en Windows yifconfig
en Linux y Mac.Tenga en cuenta: El paso anterior se debe realizar en la máquina en la que está sirviendo la aplicación, y no en la máquina en la que está accediendo a ella. También tenga en cuenta que la dirección IPv4 podría cambiar si se desconecta y se vuelve a conectar a la red.
Ahora, simplemente ejecute la aplicación de matraz con la dirección IPv4 adquirida.
flask run -h 192.168.X.X
Por ejemplo, en mi caso (ver la imagen), lo ejecuté como:
flask run -h 192.168.1.100
En mi dispositivo móvil
Cosas opcionales
Si está realizando este procedimiento en Windows y está utilizando Power Shell como CLI, y aún no puede acceder al sitio web, pruebe con un comando CTRL + C en el shell que ejecuta la aplicación. Power Shell se congela a veces y necesita un pellizco para revivir. Hacer esto podría incluso terminar el servidor, pero a veces funciona.
Eso es. Dale "me gusta" si te parece útil.
Algunas cosas más opcionales
He creado un breve script de Powershell que le proporcionará su dirección IP cuando la necesite:
Guárdelo en un archivo con extensión .ps1 (para PowerShell) y ejecútelo antes de iniciar su aplicación. Puede guardarlo en su carpeta de proyecto y ejecutarlo como:
Nota: guardé el código de shell anterior en getIP.ps1.
Genial.
fuente
Si su
cool
aplicación tiene su configuración cargada desde un archivo externo, como en el siguiente ejemplo, no olvide actualizar el archivo de configuración correspondiente con HOST = "0.0.0.0"fuente
Agregue las siguientes líneas a su proyecto
fuente
OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
netstat -na|findstr 5005
.¿Verifica si el puerto particular está abierto en el servidor para servir al cliente o no?
en Ubuntu o distribución de Linux
Configure la aplicación para manejar solicitudes remotas
fuente
Vaya a la ruta de su proyecto en CMD (símbolo del sistema) y ejecute el siguiente comando: -
establecer FLASK_APP = ABC.py
SET FLASK_ENV = desarrollo
frasco ejecutar -h [yourIP] -p 8080
obtendrá siguiente o / p en CMD: -
Ahora puede acceder a su aplicación de matraz en otra máquina utilizando http: // [yourIP]: 8080 / url
fuente
Si tiene problemas para acceder a su servidor Flask, implementado usando PyCharm , tenga en cuenta lo siguiente:
PyCharm no ejecuta su archivo .py principal directamente, por
if __name__ == '__main__':
lo que no se ejecutará ningún código y los cambios (comoapp.run(host='0.0.0.0', port=5000)
) no tendrán efecto.En su lugar, debe configurar el servidor Flask usando Configuraciones de ejecución, en particular, colocando
--host 0.0.0.0 --port 5000
en el campo Opciones adicionales .Más información sobre la configuración del servidor Flask en PyCharm
fuente
Tuve el mismo problema, utilizo PyCharm como editor y cuando creé el proyecto, PyCharm creó un servidor Flask. Lo que hice fue crear un servidor con Python de la siguiente manera;
Básicamente lo que hice fue crear un nuevo servidor, pero un matraz, si no Python
Espero que te ayude
fuente
Esta respuesta no se relaciona únicamente con el matraz, sino que debe ser aplicable para que todos no puedan conectarse al servicio desde otro problema de host .
netstat -ano | grep <port>
para ver si la dirección es 0.0.0.0 o ::. Si es 127.0.0.1, entonces es solo para las solicitudes locales.Hoy ejecuto mi aplicación de matraz como de costumbre, pero noté que no se puede conectar desde otro servidor. Luego ejecuto
netstat -ano | grep <port>
, y la dirección local es::
o0.0.0.0
(probé ambas, y sé que 127.0.0.1 solo permite la conexión desde el host local). Entonces solíatelnet host port
, el resultado es comoconnect to ...
. Esto es muy raro Entonces pensé que sería mejor comprobarlotcpdump -i any port <port> -w w.pcap
. Y noté que todo es así:Luego, al revisar la
iptables --list
sección SALIDA, pude ver varias reglas:Estas reglas prohíben la salida de paquetes vitales tcp en el protocolo de enlace. Al eliminarlos, el problema se ha ido.
fuente
Para mí seguí la respuesta anterior y la modifiqué un poco:
P.ej:
fuente
ir a la ruta del proyecto conjunto FLASK_APP = ABC.py SET FLASK_ENV = desarrollo
frasco ejecutado -h [yourIP] -p 8080 seguirá o / p en CMD: - * Sirviendo la aplicación Flask "expirement.py" (carga diferida) * Entorno: desarrollo * Modo de depuración: activado * Reinicio con stat * El depurador está activo ! * PIN del depurador: 199-519-700 * Ejecutando en http: // [yourIP]: 8080 / (Presione CTRL + C para salir)
fuente
También puede configurar el host (para exponerlo en una red con dirección IP) y el puerto a través de variables de entorno.
Consulte ¿Cómo obtener todas las Opciones de comando disponibles para establecer variables de entorno?
fuente
Crear archivo
.flaskenv
en el directorio raíz del proyecto.Los parámetros en este archivo son típicamente:
Si tiene un entorno virtual, actívelo y realice una
pip install python-dotenv
.Este paquete va a usar el
.flaskenv
archivo, y las declaraciones dentro de él se importarán automáticamente en las sesiones de terminal.Entonces puedes hacer
flask run
fuente