Django 如何让ajax的POST方法带上CSRF令牌
Posted 蔷薇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django 如何让ajax的POST方法带上CSRF令牌相关的知识,希望对你有一定的参考价值。
大家知道,在大前端领域,有一种叫做ajax的东东,即“Asynchronous javascript And XML”(异步 JavaScript 和 XML),它被用来在不刷新页面的情况下,提交和请求数据。如果Django服务器接收的是一个通过ajax发送过来的POST请求的话,那么将很麻烦。何也?因为在ajax中,没有办法像form表单中那样携带{% csrf_token %}
令牌。那怎么办呢?好办!在你的前端模版的JavaScript代码处,添加下面的代码:
// 使用jQuery库 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]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) === (name + ‘=‘)) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } var csrftoken = getCookie(‘csrftoken‘); function csrfSafeMethod(method) { // 这些HTTP方法不要求CSRF包含 return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); } $.ajaxSetup({ beforeSend: function(xhr, settings) { if (!csrfSafeMethod(settings.type) && !this.crossDomain) { xhr.setRequestHeader("X-CSRFToken", csrftoken); } } });
上面代码的作用就是让你的ajax的POST方法带上CSRF需要的令牌,它依赖jQuery库,必须提前加载jQuery。这也是Django官方提供的解决方案,请参考。
至此。
以上是关于Django 如何让ajax的POST方法带上CSRF令牌的主要内容,如果未能解决你的问题,请参考以下文章
Django - 使用 Ajax 的 POST 方法错误“POST /......./ HTTP/1.1”405 0