将Flask dev服务器配置为在整个网络中可见

sa1*_*125 380 python werkzeug flask

我不确定这是否特定于Flask,但是当我在开发模式(http://localhost:5000)中运行应用程序时,我无法从网络上的其他计算机访问它(带http://[dev-host-ip]:5000).例如,在开发模式下使用Rails,它可以正常工作.我找不到任何关于Flask开发服务器配置的文档.知道应该配置什么来启用它吗?

Sha*_*ner 633

虽然这是可能的,但您不应在生产中使用Flask开发服务器.Flask开发服务器的设计不是特别安全,稳定或高效.请参阅有关部署正确解决方案的文档.


添加参数到您的app.run().默认情况下,它在localhost上运行,将其更改app.run(host= '0.0.0.0')为在您的计算机IP地址上运行.

快速入门页面上的"外部可见服务器"下的Flask站点上记录:

外部可见服务器

如果您运行服务器,您会注意到服务器只能从您自己的计算机上获得,而不能从网络中的任何其他计算机上获得.这是默认设置,因为在调试模式下,应用程序的用户可以在您的计算机上执行任意Python代码.如果禁用了调试或信任网络上的用户,则可以使服务器公开.

只需将run()方法的调用更改为如下所示:

app.run(host='0.0.0.0')

这告诉您的操作系统要监听公共IP.

  • 要设置为特定的ip app.run(host ="192.168.1.7",port = 5010),如果你的电脑有几个ip的话会很方便 (36认同)
  • 这对我不起作用。我使用了 `app.run(host="0.0.0.0", port=5000)`,但无法访问 http://myip:5000。我仍然只在 http://127.0.0.1:5000 工作 (6认同)
  • 在我的Mac上,我必须以某种方式显式地使用`flask run --host 0.0.0.0`使其工作。 (2认同)
  • 对我来说,禁用防火墙后它以前不起作用,但它对我有用。 (2认同)

Ari*_*ria 105

如果使用flask可执行文件启动服务器,则可以使用flask run --host=0.0.0.0更改默认值127.0.0.1并将其打开到非本地连接.其他答案描述的config和app.run方法可能是更好的做法,但这也很方便.

外部可见服务器如果您运行服务器,您会注意到服务器只能从您自己的计算机访问,而不能从网络中的任何其他计算机访问.这是默认设置,因为在调试模式下,应用程序的用户可以在您的计算机上执行任意Python代码.

如果禁用了调试器或信任网络上的用户,只需在命令行中添加--host = 0.0.0.0即可公开服务器:

flask run --host = 0.0.0.0这告诉您的操作系统监听所有公共IP.

参考:http://flask.pocoo.org/docs/0.11/quickstart/

  • 我不知道是否有人体验过它,但是我根据QuickStart文档首先尝试了这种方法,但是由于某种奇怪的原因,IP一直以“ 127.0.0.1”运行(我正确设置了Flask可执行文件,或者如此似乎不确定我在做什么错)。但是,在另一个答案中将“ app.run(host ='0.0.0.0')”添加到服务器文件后,我便能够跨网络访问该页面。还有其他人遇到我所描述的问题或有任何信息吗? (2认同)
  • 对我来说,flask运行--host = 0.0.0.0可解决此问题。我能够访问url -http:// <ip地址>:5000。首先,我使用命令-sudo firewall-cmd --zone = public --list-ports检查了计算机上打开的端口,然后才知道端口5000没有打开。我使用以下命令打开了此端口-sudo firewall-cmd --zone = public --permanent --add-port = 5000 / tcp,然后是sudo firewall-cmd --reload。然后,以-flask run --host = 0.0.0.0的方式运行flask应用程序 (2认同)

mir*_*ngu 21

如果您的cool应用程序从外部文件加载了配置,如下例所示,那么不要忘记使用HOST ="0.0.0.0"更新相应的配置文件

cool.app.run(
    host=cool.app.config.get("HOST", "localhost"),
    port=cool.app.config.get("PORT", 9000)
)            
Run Code Online (Sandbox Code Playgroud)


小智 15

将以下行添加到项目中

if __name__ == '__main__':
    app.debug = True
    app.run(host = '0.0.0.0',port=5005)
Run Code Online (Sandbox Code Playgroud)


Via*_*v Z 13

如果您在访问使用PyCharm部署的 Flask 服务器时遇到问题,请考虑以下事项:

PyCharm 不会直接运行您的主 .py 文件,因此if __name__ == '__main__':不会执行任何代码,并且任何更改(如app.run(host='0.0.0.0', port=5000))都不会生效。

相反,您应该使用运行配置来配置 Flask 服务器,特别是将其--host 0.0.0.0 --port 5000放入附加选项字段中。

运行 Flask 服务器 PyCharm 的配置

有关在 PyCharm 中配置 Flask 服务器的更多信息


Eve*_*ews 11

您还可以通过环境变量设置主机(以在面向 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
Run Code Online (Sandbox Code Playgroud)

请参阅如何获取所有可用的命令选项来设置环境变量?


nwi*_*llo 9

如果0.0.0.0方法不起作用,请尝试此操作

无聊的东西

我亲自进行了很多努力,以使我的应用可以通过本地服务器访问其他设备(笔记本电脑和手机)。我尝试了0.0.0.0方法,但是没有运气。然后,我尝试更改端口,但没有成功。因此,在尝试了一堆不同的组合之后,我找到了这个组合,它解决了我在本地服务器上部署应用程序的问题。

脚步

  1. 获取计算机的本地IPv4地址。这可以通过ipconfig在Windows以及ifconfiglinux和Mac上键入来完成。

IPv4(Windows)

请注意:以上步骤将在提供该应用程序的计算机上执行,而不是在您正在访问该应用程序的计算机上执行。另请注意,如果断开连接并重新连接到网络,IPv4地址可能会更改。

  1. 现在,只需使用获取的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
Run Code Online (Sandbox Code Playgroud)

将其保存到扩展名为.ps1(适用于PowerShell)的文件中,然后在启动您的应用程序之前对其运行。您可以将其保存在项目文件夹中,并以以下方式运行:

.\getIP.ps1; flask run -h $ipv4
Run Code Online (Sandbox Code Playgroud)

注意:我将上面的shell代码保存在getIP.ps1中。

凉。

  • Heewoon 这个 IP 地址是他的网络的本地地址。很可能你也有它。 (5认同)

Raj*_*dav 8

检查服务器上是否打开了特定端口以服务于客户端?

在Ubuntu或Linux发行版中

sudo ufw enable
sudo ufw allow 5000/tcp //allow the server to handle the request on port 5000
Run Code Online (Sandbox Code Playgroud)

配置应用程序以处理远程请求

app.run(host='0.0.0.0' , port=5000)


python3 app.py & #run application in background
Run Code Online (Sandbox Code Playgroud)


小智 7

对我来说,我遵循了上述答案并对其进行了一些修改:

  1. 只需在命令提示符下使用 ipconfig 获取您的 ipv4 地址
  2. 转到存在flask代码的文件
  3. 在主函数中写 app.run(host='your ipv4 address')

例如:

在此处输入图片说明


小智 6

转到 CMD(命令提示符)上的项目路径并执行以下命令:-

设置 FLASK_APP=ABC.py

SET FLASK_ENV=开发

烧瓶运行 -h [你的 IP] -p 8080

您将在 CMD 上获得以下 o/p:-

  • 服务 Flask 应用程序“expirement.py”(延迟加载)
    • 环境:发展
    • 调试模式:开启
    • 用 stat 重新启动
    • 调试器处于活动状态!
    • 调试器密码:199-519-700
    • http://[yourIP]:8080/ 上运行(按 CTRL+C 退出)

现在您可以使用http://[yourIP]:8080/ url在另一台机器上访问您的Flask应用程序


Sau*_*abh 5

.flaskenv在项目根目录下创建文件。

该文件中的参数通常为:

FLASK_APP=app.py
FLASK_ENV=development
FLASK_RUN_HOST=[dev-host-ip]
FLASK_RUN_PORT=5000
Run Code Online (Sandbox Code Playgroud)

如果您有虚拟环境,请激活它并执行pip install python-dotenv.

该包将使用该.flaskenv文件,并且其中的声明将自动跨终端会话导入。

然后你可以做flask run