美文网首页
django在Ajax请求中提交csrfToken

django在Ajax请求中提交csrfToken

作者: 背负代码的宇智波 | 来源:发表于2018-12-19 16:34 被阅读0次

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>

相关文章

  • django在Ajax请求中提交csrfToken

    django中使用ajax请求响应,如果后使用的是视图方法最简单的是用在方法前引用@csrf_exempt装饰器就...

  • Django 通过Ajax局部刷新更新Table

    在Python Django框架中,通过Ajax方式向后台提交查询请求,返回数据,前台局部刷新Table的方式完成...

  • CSRF

    Django中的实现 内部函数 process_request将请求中的csrftoken存在request的ME...

  • django+vue axios的post请求403 csrf

    Django-REST-framework的所有post请求都需要带上csrftoken。resfull框架自带一...

  • Java篇-ajax

    一 : Ajax的阐述 面发起请求,会将请求发送给浏览器内核中的Ajax引擎,Ajax引擎会提交请求到​服务器端,...

  • java poi导出Excel

    由于ajax请求不能下载,故先利用ajax将请求数据提交到后台,存入redis,并返回一个uuid,然后在ajax...

  • django中Ajax提交post请求,csrf_token问题

    一、form表单提交post请求 二、ajax提交post请求:【只要通过某种方式将页面中产生的cookie取出并...

  • drf 取消csrf token校验

    背景 因为csrftoken的校验一般是后端放在html模板中, 然后前端在提交form表单时一起提交给后端做校验...

  • 基本概念和用法-路由 2-5

    AJAX请求不会留下History历史记录 在2005年左右,兴起了叫ajax的技术,有了ajax像后台提交数据的...

  • strict-origin-when-cross-origin

    提交表单发送ajax请求时,chrome 请求返回Referrer Policy: strict-origin-w...

网友评论

      本文标题:django在Ajax请求中提交csrfToken

      本文链接:https://www.haomeiwen.com/subject/vwbjkqtx.html