有三种方式。您可以在每个 axios 调用的标头中手动包含令牌,您可以xsrfHeaderName
在每个调用中设置 axios ,或者您设置一个默认的xsrfHeaderName
.
1.手动添加
假设您已将令牌的值存储在名为 的变量中csrfToken
。在 axios 调用中设置标题:
// ...
method: 'post',
url: '/api/data',
data: {...},
headers: {"X-CSRFToken": csrfToken},
// ...
2.xsrfHeaderName
通话设置:
添加这个:
// ...
method: 'post',
url: '/api/data',
data: {...},
xsrfHeaderName: "X-CSRFToken",
// ...
然后在您的settings.py
文件中,添加以下行:
CSRF_COOKIE_NAME = "XSRF-TOKEN"
3. 设置默认标题
您可以为 axios 设置默认标头,而不是在每次调用中定义标头。
在您导入 axios 以进行调用的文件中,在您的导入下方添加以下内容:
axios.defaults.xsrfHeaderName = "X-CSRFToken";
然后在您的settings.py
文件中,添加以下行:
CSRF_COOKIE_NAME = "XSRF-TOKEN"
检查这个答案
这是如何手动添加它的示例:
class Axios extends React.Component{
constructor(){
super()
this.state = {
persons: []
}
}
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie !== '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
var CSRF_TOKEN=getCookie('csrftoken');
post(){
axios.post('http://127.0.0.1:8000/api/create', {
title: 'titan',
body: 'this is working',
headers:{
'X-CSRFToken':CSRF_TOKEN,
'Accept': 'application/json',
'Content-Type': 'application/json',
},
})
.then(function (response) {
console.log(response);
})
}
get(){
axios.get('http://127.0.0.1:8000/api').then(Response=>{
console.log(Response.data)
})
}
componentDidMount(){
this.post();
this.get();
}
render(){
return(
<div>
<h1>fetch</h1>
</div>
)
}
}
export default Axios;