1 django+ajax请求携带headers头
前后端不分离模式,如何取到csrftoken
方式1:
导入一下js文件:
// 根据cookie的name获取对应的值
function getCookie(name) {
let cookieValue = null;
if (document.cookie && document.cookie !== '') {
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i].trim();
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
function csrfSafeMethod(method) {
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
// 如果每次发送请求前,都要你加上csrftoken请求头,是不是很不方便
// 在每次发送ajax请求之前会提前加载 ajaxSetup
$.ajaxSetup({
// 自动携带 X-CSRFTOKEN 请求头
beforeSend: function (xhr, settings) {
// 判断是否可以发送该请求头:
if (!csrfSafeMethod(settings.type)) {
xhr.setRequestHeader("X-CSRFTOKEN", getCookie('csrftoken'))
}
}
})
方式2:
<form id='f1'>
<input ...
</form>
$.ajax({
url:"/sms/login/",
type:"POST",
data:$("#f1").serialize() // 获取form表单中所有的键值对
})
# 好处,不需要加csrf header

浙公网安备 33010602011771号