You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将Flutter与Django REST API连接,始终提示连接被拒绝

解决Flutter连接Django API时的连接被拒绝问题

你遇到的连接被拒绝问题,主要是本地地址访问限制、Django配置或网络设置导致的,以下是具体解决步骤:

1. 替换本地IP地址

在模拟器/真机中,127.0.0.1指向的是设备自身,而非运行Django服务的电脑。你需要换成电脑的局域网IP地址:

  • Windows:打开命令提示符,执行ipconfig,找到IPv4地址(比如192.168.1.100)
  • Mac/Linux:打开终端,执行ifconfig或ip addr,找到对应网卡的IPv4地址
    修改Flutter代码中的URL:
var url = Uri.parse("http://192.168.1.100:8000/todoget/");

2. 配置Django允许外部访问

修改Django项目的settings.py文件:

  • 将ALLOWED_HOSTS设置为允许你的局域网IP或所有地址(开发环境可用):
    ALLOWED_HOSTS = ['192.168.1.100', 'localhost', '127.0.0.1']
    # 或开发环境简化为:ALLOWED_HOSTS = ['*']
    
  • 启动Django服务时,监听所有网络接口,确保外部设备能访问:
    python manage.py runserver 0.0.0.0:8000
    

3. 解决跨域问题(如果需要)

如果浏览器或Flutter因跨域策略被拦截,需要配置Django的跨域支持:

  1. 安装跨域包:
    pip install django-cors-headers
    
  2. 修改settings.py:
    • 在INSTALLED_APPS中添加:
      INSTALLED_APPS = [
          # 其他应用
          'corsheaders',
      ]
      
    • 在MIDDLEWARE中添加(放在CommonMiddleware之前):
      MIDDLEWARE = [
          'corsheaders.middleware.CorsMiddleware',
          'django.middleware.common.CommonMiddleware',
          # 其他中间件
      ]
      
    • 添加跨域允许配置:
      CORS_ALLOW_ALL_ORIGINS = True  # 开发环境使用,生产环境请指定具体域名
      

4. 检查防火墙设置

确保电脑的防火墙没有阻止8000端口的入站连接,可临时关闭防火墙测试,或在防火墙规则中允许Django服务通过8000端口。

5. 修正Flutter代码的语法问题

你的原代码中async缺少函数定义,正确的写法应该是:

Future<void> fetchTodoData() async {
  try {
    var url = Uri.parse("http://192.168.1.100:8000/todoget/");
    var response = await http.get(url);
    print(response.statusCode.toString());
  } catch (e) {
    print(e.toString());
  }
}

内容的提问来源于stack exchange,提问作者Abhinav singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 07:50:18