• 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.网络相关的知识需要去学习和积累

  • 相关阅读:
    应用程序日志管理工具
    商场积分体系设计 购物中心会员管理系统
    SQL关联表更新
    重庆东微电子推出高性能抗射频干扰MEMS硅麦放大器芯片
    计算机毕业设计——简单的网页设计
    【Vue 开发实战】基础篇 # 6:双向绑定和单向数据流不冲突
    c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现)
    一键自动化博客发布工具,用过的人都说好(segmentfault篇)
    Qt第十八章:Qt Designer窗口切换
    解决eclipse中的Java文件,使用idea打开的乱码问题
  • 原文地址:https://blog.csdn.net/tony_java_2017/article/details/126480569