問題描述:
Vue3 + Django3 前端使用axios發送POST請求,django無法接收
前端控制台報錯403
後端終端報錯
原因分析:
因為設定請求頭X-CSRFToken
解決方案:
通過axios請求攔截器,設定請求頭X-CSRFToken,值為Cookie中的csrftoken值
import axios from 'axios'
const req = axios.create({...})
req.interceptors.request.use((config)=>{
config.headers['X-Requested-With'] = 'XMLHttpRequest';
let regex = /.*csrftoken=([^;.]*).*$/; // 用于從cookie中比對csrftoken值
if(document.cookie.match(regex) === null){
config.headers['X-CSRFToken'] = null;
}else{
config.headers['X-CSRFToken'] = document.cookie.match(regex)[1]; // 手動指派X-CSRFToken
}
return config
})