django在Ajax请求中提交csrfToken

django中使用ajax请求响应,如果后使用的是视图方法最简单的是用在方法前引用@csrf_exempt装饰器就行了,但是如果我们使用的是视图类总是报

path('farmer/taskdelete/',TaskDeleteFarmerView.as_view(),name='taskdelete_framer')AttributeError: 'function' object has no attribute 'as_view'

在ajax请求提交csrfToken则会解决这个问题最简单的就是在ajax请求前加上

$.ajaxSetup({

data: {csrfmiddlewaretoken: '{{ csrf_token }}'},

        });

第二种方式:

从获取当前页面的get请求的响应中cookie里获取csrfToken,再写入当前post请求的请求头中;

需要引入:jquery.cookie.js插件

或者用自己写一个getCookie方法:

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');

第三种方法:

django模板标签提供{% csrf_token %}在前端生成input框,如果在settings.py文件中开启了该中间件,每次post请求就需要提交django自动生成的csrfToken;

将{% csrf_token %}生成的input框的value通过ajax传参来提交;


{% csrf_token %}


你可能感兴趣的:(django在Ajax请求中提交csrfToken)