在开发Flask应用时,默认的内置开发服务器只能在本地(localhost,即127.0.0.1)访问——这意味着你只能在自己的电脑上打开应用,同一局域网内的手机、平板或其他电脑都无法连接。但实际开发中,我们常需要在不同设备上测试应用(比如看手机端适配效果),或是给同事演示进度。今天就用两种简单方法,教你配置Flask应用,让它在局域网内“开放访问”,全程无需复杂网络知识,新手也能快速上手。

一、先搞懂:为什么默认无法局域网访问?

Flask的内置开发服务器默认绑定“localhost(127.0.0.1)”,这是出于安全考虑——开发模式下开启的调试功能(如代码自动重载、错误详情页)存在风险,若直接开放到网络,可能被局域网内其他设备执行恶意代码。

要实现局域网访问,核心是将服务器绑定的IP从“127.0.0.1”改为“0.0.0.0”。“0.0.0.0”不是具体的IP地址,而是表示“监听当前设备所有可用的网络接口”——无论是有线网卡、无线网卡的IP,其他设备只要在同一局域网,就能通过这些IP访问应用。

二、前提准备:确认两件事

在开始配置前,先完成两个基础检查,避免后续踩坑:

  1. 确保设备在同一局域网:所有要访问Flask应用的设备(如手机、另一台电脑),需连接同一个WiFi或通过网线接入同一路由器(比如电脑连WiFi,手机也连同一个WiFi)。
  2. 记录开发机的IPv4地址:后续其他设备访问时,需要用这个IP。
    查看IPv4地址的方法(以Linux系统为例):
    打开终端,输入以下命令,找到“inet”开头的地址(如192.168.1.105,不是127.0.0.1):
    ip addr show
    
    (Windows系统可通过“cmd→ipconfig”查看,macOS通过“终端→ifconfig”查看)。

三、方法1:用flask run命令直接配置(适合命令行启动)

如果平时习惯用flask run命令启动应用(比如通过设置FLASK_APP环境变量指定入口文件),只需在命令后加--host=0.0.0.0参数,即可让应用局域网可见。

操作步骤:

  1. 进入项目目录:打开终端,用cd命令切换到Flask项目所在文件夹(比如项目在/home/user/my_flask_app):
    cd /home/user/my_flask_app
    
  2. 设置Flask入口文件(可选):若未配置过FLASK_APP环境变量,需先指定入口文件(假设入口文件是app.py):
    export FLASK_APP=app.py
    
    (若需要开启调试模式,可再执行export FLASK_DEBUG=True,但注意:调试模式仅用于开发,正式环境必须关闭)。
  3. 启动应用并指定host:执行以下命令,让服务器监听所有网络接口:
    flask run --host=0.0.0.0
    
    启动成功后,终端会显示类似以下信息,说明已绑定0.0.0.0,端口默认是5000:
    * Serving Flask app 'app.py'
    * Debug mode: on
    * Running on all addresses (0.0.0.0)
      Running on http://192.168.1.105:5000
      Running on http://127.0.0.1:5000
    

其他设备访问方式:

在同一局域网的设备上打开浏览器,输入“开发机IPv4地址:端口号”,比如:

http://192.168.1.105:5000

就能看到Flask应用的界面了(若端口不是5000,需替换成实际端口,比如http://192.168.1.105:8080)。

四、方法2:修改app.run()代码(适合python app.py启动)

如果习惯用python app.py命令启动应用(即入口文件中通过app.run()启动服务器),只需在app.run()中添加host='0.0.0.0'参数,无需每次输命令时加参数,更适合长期使用。

操作步骤:

  1. 打开入口文件:用文本编辑器(如nano、VS Code)打开Flask入口文件(通常是app.pywsgi.py)。
  2. 修改app.run()方法:找到if __name__ == '__main__':代码块,在app.run()中添加host='0.0.0.0',示例如下:
    from flask import Flask
    app = Flask(__name__)
    
    # 示例路由
    @app.route('/')
    def hello():
        return "Hello, 局域网访问成功!"
    
    if __name__ == '__main__':
        # host='0.0.0.0' 允许局域网访问,port指定端口(默认5000)
        # debug=True 开启调试模式(开发用,正式环境删除)
        app.run(debug=True, port=5000, host='0.0.0.0')
    
  3. 启动应用:在终端进入项目目录,执行以下命令启动应用:
    python app.py
    
    启动成功后,终端会显示与方法1类似的信息,提示“Running on http://192.168.1.105:5000”。

其他设备访问方式:

和方法1一致,在其他设备浏览器输入“开发机IPv4地址:端口号”即可访问,比如http://192.168.1.105:5000

五、常见问题:访问失败怎么办?

如果其他设备无法访问,可按以下步骤排查:

  1. 检查IP是否正确:确认输入的IPv4地址是开发机的局域网IP(不是公网IP),可重新执行ip addr show核对。
  2. 检查端口是否冲突:若终端提示“Address already in use”,说明5000端口被占用,可修改port参数(比如port=8080),访问时用新端口(如http://192.168.1.105:8080)。
  3. 关闭防火墙(临时测试):Linux系统默认防火墙可能拦截端口,可临时关闭防火墙测试(测试后建议重新开启):
    # Ubuntu/Debian系统关闭防火墙
    sudo ufw disable
    # CentOS/Rocky Linux系统关闭防火墙
    sudo systemctl stop firewalld
    
    若关闭后能访问,说明是防火墙拦截,可通过以下命令开放指定端口(比如开放5000端口),无需长期关闭防火墙:
    # Ubuntu/Debian开放5000端口
    sudo ufw allow 5000
    # CentOS/Rocky Linux开放5000端口
    sudo firewall-cmd --add-port=5000/tcp --permanent
    sudo firewall-cmd --reload
    

六、重要提醒:开发服务器不适合正式环境

需要特别注意:Flask内置的开发服务器仅用于本地开发和测试,它的性能差、安全性低,无法应对多用户并发访问。如果要将应用部署到互联网(让外网用户访问),必须使用专业的WSGI服务器(如Gunicorn、uWSGI)搭配Nginx,具体部署方案可参考Flask官方文档或后续的部署教程。

通过以上两种方法,你已经能轻松让Flask应用在局域网内被其他设备访问——无论是测试手机端适配,还是和同事协作开发,都能更高效。记住核心逻辑:绑定0.0.0.0监听所有网络接口,用开发机的局域网IP+端口访问,遇到问题先排查IP、端口和防火墙。