我正在链接django进行反应。
我正在尝试从react app.js从使用tokenAuthentication的Django-rest-framework端点http://127.0.0.1:8000/api/get-token获取令牌。 我已经设置了corsheader和restframework。当我通过命令行使用标记击中端点时,它将起作用。现在,我需要在我的react app.js中使用令牌。我收到状态为200的响应,但找不到令牌。由于我是新来的反应者,因此我不确定是否遗漏了一些东西。 //App.js
componentDidMount() {
try {
const data = {username: 'user', password: 'password'};
fetch('http://127.0.0.1:8000/api/get-token/', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(data)
}).then(function(response) {
console.log(response.token);
})
} catch (e) {
console.log(e);
}
}
如果您需要更多信息,请告诉我
我在settings.py中尝试了TokenAuthentication和BasicAuthentication
REST_FRAMEWORK = {
...
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
...
}
答案 0 :(得分:2)
使用提取时,首先必须使用.response.json()
read the response stream。
这是您的代码示例,在提取后带有一个额外的then
,以返回一个包含您的数据(使用JSON解析)的新承诺:
componentDidMount() {
try {
const data = {username: 'user', password: 'password'};
fetch('http://127.0.0.1:8000/api/get-token/', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(data)
}).then(function(response) {
return response.json();
}).then(function(data) {
console.log(data.token);
})
} catch (e) {
console.log(e);
}
}
注意:如果从服务器接收的数据不是JSON,则应使用response.text()
来将响应解析为字符串。