Vue请求Django REST Framework接口返回结果与Postman不一致如何解决
问题原因
你拿到的返回对象是request库未执行完成的请求实例,不是接口返回的业务数据,核心错误有2点:
- 异步请求逻辑错误写在了Vuex的mutations中,你直接将
request.post()返回的请求对象赋值给了this.endpoint,没有等待请求响应返回就直接传递参数调用后续方法 - Vuex的mutations仅支持同步状态修改,所有异步网络请求必须放到actions中执行
修复步骤
1. 配置Django跨域(必须项,否则浏览器会拦截跨域请求)
安装依赖:pip install django-cors-headers
修改Django项目settings.py:
INSTALLED_APPS = [ # ... 其他原有配置 'corsheaders', ] MIDDLEWARE = [ # 放在最顶部 'corsheaders.middleware.CorsMiddleware', # ... 其他原有配置 ] # 开发环境配置,生产环境请替换为你的前端域名 CORS_ALLOW_ALL_ORIGINS = True
2. 修正auth.js代码
将请求逻辑从mutations迁移到actions中,正确处理异步返回结果:
const actions = { async get_twitch_user_token_uri({ commit }) { commit(GET_TWITCH_TOKEN_URI); try { const url = "http://localhost:8000/api/auth/login"; // 等待请求响应返回,拿到后端数据 const response = await request.post(url); commit(GET_TWITCH_TOKEN, response.data); commit(GET_TWITCH_TOKEN_SUCCESS); } catch (err) { commit(GET_TWITCH_TOKEN_FAILURE); console.error('请求失败:', err); } }, } const mutations = { [GET_TWITCH_TOKEN_URI](state) { state.authenticating = true; // 移除原有的请求逻辑 }, // 其余原有mutation保持不变 }
3. 可选校验项
确认你的request库实例配置了Content-Type: application/json请求头,否则POST请求可能无法被Django DRF正常解析;同时确认Django的views.py中已经导入from django.conf import settings,避免读取配置时报错。
内容的提问来源于stack exchange,提问作者NiceShyGuy
相关产品推荐
相关产品推荐

