idea 启动Flask时host设置和端口设置,以及host=0.0.0.0和127.0.0.1的区别

1.问题背景:

    在Idea 2018.3 Ultimate Edition中创建一个Python Flask应用,Python版本是3.8.7版本,Flask代码如下:

from flask import Flask
app = Flask(__name__)
if __name__ == '__main__':
    app.run()

    启动方式:在启动应用的congfig中进行配置,页面如下:

这样子启动之后,发现本地可以正常访问,现在需要让公司的内网同事也能正常访问,但是在公司内网的其他同事通过内网IP访问失败,原因是端口不通

2.解决Flask服务在idea中内网访问不通的问题

2.1 怀疑是端口的问题

    同事通过ping命令检查我的ip发现可以访问,包没有丢失没有延时,排除了ip的问题,就是端口的问题了,我怀疑是5000端口被防火墙给拦截掉了,所以就把端口改为8080试试,然后修改代码如下:

app.run(port=int("8080"))

然后启动服务,发现日志中显示启动的端口还是5000,修改没起作用:

后来在网上查看,发现要在run configuration中的Additional options中配置才起作用,所以就在 run configuration中的Additional options加了参数--port=8080,重新启动之后端口变为了8080,如图:

然后让同事访问,还是不通。如果防火墙拦截端口,我也没设置过那些端口被拦截那些端口不被拦截,所以修改端口的解决方案纯属瞎搞,病急乱投医,但是后来想我的防火墙都关闭了,端口被防火墙拦截的情况也不存在,因为别的同事还能访问我的1521的端口,所以问题还是出在网络上。

2.2网络的问题是什么?

Flask在启动的时候执行app.run()的时候可以指定host,我就想既然用默认的不行就指定下host,然后直接copy网上的改为

app.run(host="0.0.0.0", port=int("8080"))

重新启动之后发现同事还是访问不了,最后就搁浅了放到第二天再搞,第二天发现启动后的ip还是127.0.0.1,修改未生效,最后就在run configuration中的Additional options加了一个配置--host=172.*.*.*.*(我的内网地址),然后启动之后同事就可以访问了,大功告成。

网络的问题是什么?我的内网ip上没有监听到8080端口。原因是什么?

1.Flask的app.run()方法中的host参数在代码中不起作用,原因是因为在Idea中使用  RunConfiguration启动服务的时候,服务启动的相关参数需要在RunConfiguration中设置,在app.run()方法中不起作用,因为我们从启动日志中可以发现:

D:\Program Files\Python38\python.exe" -m flask run --port=8080

可以看出idea在为我们启动服务的时候,是在读取RunConfiguration中设置去启动的,并不是运行代码中的app.run(),为了验证app.run的代码没有问题,我们使用python 启动该脚本,app.run(port=int("8081"))

执行 python TestFlask.py,输出日志如下:

 a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:8081/ (Press CTRL+C to quit)

2.127.0.0.1只能在本地访问,内网中是访问不通的。由于Flask的启动的时候host参数没起作用,所以Flask启动的host还是默认参数,127.0.0.1,源码解释如下:

 修改RunConfiguration中Additional options的--host="0.0.0.0"或者内网ip后同事都可以访问。

关于0.0.0.0我们可以理解如下:

问题复盘:

 1.遇到问题要冷静的客观分析,不能病急乱投医,毫无根据的提出所谓的解决方案;

2.对于日志要仔细的查看,根据日志获取关键有用信息;

3.要明白工具的使用原理,不能想当然的认为工具的运行原理;

4.网络相关的知识需要去学习和积累

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值