无法将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的跨域支持:
- 安装跨域包:
pip install django-cors-headers - 修改
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
相关产品推荐
相关产品推荐

