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插件

<script> $.ajax({

        url: "/ajax_res/", 

        type: "post",headers: {"X-CSRFToken":$.cookie("csrftoken")},data: {"name": name} 

        success: function(args){

            alert(args) 

            //...        }

    });</script>

或者用自己写一个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模板标签提供的csrf_token值,会自动生成一个input框--><script> $("#button_name").on("click",function{

        var name = $("#name").val();

        var csrfToken = $("[name="csrfmiddlewaretoken"]").val();$.ajax({            url:"/ajax_res/",  // 请求视图            type: "post",  // 请求方式// 携带数据,从{% csrf_token %}input框中获取csrfToken值,通过ajax方式提交后台,否则报错:Forbidden(CSRF token missing or incorrect.)            data: {"name": name, "csrfmiddlewaretoken": csrfToken}              success:function(args){

                alert(args)  // 返回数据//...            }

        });

    });</script>


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容