我不确定这是否只针对 Flask,但是当我在开发模式下运行应用程序(http://localhost:5000
)时,我无法从网络中的其他计算机访问它(使用http://[dev-host-ip]:5000
)例如,在Rails的开发模式下,一切都很正常。我找不到任何有关Flask开发服务器配置的文档。您有什么想法可以启用此功能吗?
--host
选项或app.run()
方法的host
参数控制开发服务器监听的地址。默认情况下,它在localhost
上运行,请将其更改为flask run --host=0.0.0.0
(或app.run(host="0.0.0.0")
),以在您机器的所有IP地址上运行。
0.0.0.0
是一个特殊的值,您不能直接在浏览器中使用它,需要导航到网络上计算机的实际IP地址。您可能还需要调整防火墙以允许外部访问该端口。--host=0.0.0.0
到命令行中使服务器公开可用。”$ flask run --host=0.0.0.0
这告诉你的操作系统要监听所有公共IP地址。
flask
可执行文件启动服务器,请使用flask run --host=0.0.0.0
来更改默认值从127.0.0.1,并将其开放给非本地连接。
If you run the server you will notice that the server is only accessible from your own computer, not from any other in the network. This is the default because in debugging mode a user of the application can execute arbitrary Python code on your computer.
If you have the debugger disabled or trust the users on your network, you can make the server publicly available simply by adding
--host=0.0.0.0
to the command line:$ flask run --host=0.0.0.0
This tells your operating system to listen on all public IPs.
如果0.0.0.0方法不起作用,请尝试以下方法
无聊的东西
我曾经在将我的应用程序通过本地服务器访问到其他设备(笔记本电脑和手机)时遇到了很多麻烦。我尝试过0.0.0.0方法,但并没有成功。然后我尝试改变端口,但还是不行。所以,在尝试了很多不同的组合之后,我找到了这个方法,并解决了我的问题。
步骤
ipconfig
,在Linux和Mac上键入 ifconfig
来实现。请注意:以上步骤需要在您提供应用程序的计算机上执行,而不是在您访问它的计算机上执行。此外,请注意,如果您断开并重新连接到网络,则IPv4地址可能会更改。
现在,只需使用获取的IPv4地址运行 flask 应用程序。
flask run -h 192.168.X.X
例如,在我的情况下(请参见图像),我运行如下:
flask run -h 192.168.1.100
在我的移动设备上
可选的东西
如果您正在Windows上执行此过程,并且使用Power Shell作为CLI,但仍无法访问网站,则尝试在运行应用程序的shell中键入 CTRL + C 命令。Power Shell有时会冻结,需要一点刺激才能恢复。这样做可能会终止服务器,但有时会奏效。
就是这样了。如果您觉得这有帮助,请点个赞。
一些更多的可选内容
我创建了一个简短的PowerShell脚本,每当您需要时都可以获取您的IP地址:
$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
将其保存为.ps1扩展名(用于PowerShell)的文件,并在启动应用程序之前运行它。您可以将其保存在项目文件夹中,并按以下方式运行:
.\getIP.ps1; flask run -h $ipv4
注意: 我将上述 shellcode 保存在 getIP.ps1 中。
很酷。
--host
值。 - W1ck3d在app.run
中添加host='0.0.0.0'
。
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
如果在Windows上出现OSError: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissions
错误,要么是您没有使用该端口的权限,要么是其他程序正在使用该端口,您可以通过使用 netstat -na|findstr 5000
命令找到。
检查特定端口在服务器上是否开放以为客户端提供服务?
在Ubuntu或Linux发行版中
sudo ufw enable
sudo ufw allow 5000/tcp //allow the server to handle the request on port 5000
配置应用程序以处理远程请求
app.run(host='0.0.0.0' , port=5000)
python3 app.py & #run application in background
如果您的酷炫
应用程序的配置是从外部文件加载的,就像以下示例一样,请不要忘记使用HOST="0.0.0.0"更新相应的配置文件。
cool.app.run(
host=cool.app.config.get("HOST", "localhost"),
port=cool.app.config.get("PORT", 9000)
)
如果你在访问使用PyCharm部署的Flask服务器时遇到问题,请注意以下事项:
PyCharm不会直接运行您的主要.py文件,因此任何出现在if __name__ == '__main__':
中的代码都不会被执行,并且任何更改(比如app.run(host='0.0.0.0', port=5000)
)也不会生效。
相反,您应该使用运行配置来配置Flask服务器,具体而言是将--host 0.0.0.0 --port 5000
放入附加选项字段中。
有关在PyCharm中配置Flask服务器的更多信息,请参见配置Flask服务器
您还可以通过环境变量设置主机(以在面向网络的IP地址上公开它)和端口。
$ export FLASK_APP=app.py
$ export FLASK_ENV=development
$ export FLASK_RUN_PORT=8000
$ export FLASK_RUN_HOST=0.0.0.0
$ flask run
* Serving Flask app "app.py" (lazy loading)
* Environment: development
* Debug mode: on
* Running on https://0.0.0.0:8000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 329-665-000
进入命令提示符(CMD)并转到项目路径,执行以下命令:
set FLASK_APP=ABC.py
SET FLASK_ENV=development
flask run -h [yourIP] -p 8080
在CMD上会得到以下输出:
现在,您可以使用http://[yourIP]:8080/ url在另一台设备上访问您的Flask应用程序。