ajax发送csrf_token的不同方式:

方式一:

在ajax发送之前,做好处理,用到了beforeSend方法,把csrf_token写入到Header头内,csrf_token去jquery.cookie内取,但是,想要去cookie内取,首先要引用jquery.cookie.js文件;

jquery.cookie.js官网:http://plugins.jquery.com/cookie/

jquery-cookie官网:http://www.bootcdn.cn/jquery-cookie/

jquery-cookie的cdn:

  https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js

  <script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.js"></script>

    //ajax在发送之前,做的header头
    function csrfSafeMethod(method) {
        // 匹配method的请求模式,js正则匹配用test
        return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
    };

    // 为ajax请求做csrf_token
    $.ajaxSetup({
        beforeSend:function (xhr, settings) {
            // 在请求头设置一次csrf_token,除了上面正则匹配到的不带csrf_token,其他的都要带
            if(!csrfSafeMethod(settings.type)){
                xhr.setRequestHeader("x-CSRFToken", $.cookie("csrftoken"));
            }
        }
    });

beforeSend


方式二:

在ajax发送的时候加在data里:

data:{"csrfmiddlewaretoken":$("[name='csrfmiddlewaretoken']").val(), "k1":v1, "k2":"v2",}  # 这个的话,还要在body里去找{% csrf_token %}
data:{'user':user,'pwd':pwd,'csrfmiddlewaretoken':'{{ csrf_token }}'},    # 这个最方便,直接在这渲染了
# for example:
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>MyQuotion</title>
    <link rel="stylesheet" href="{% static 'bootstrap.min.css' %}">
    <script src="{% static 'jquery-3.2.1.js' %}"></script>
    <script src="{% static 'bootstrap.js' %}"></script>
</head>
<body>
<div class="container">
    <div class="row col-md-5 col-lg-offset-2">
        {% csrf_token %}
        <input type="text" class="form-control" id="user"/>
        <input type="password" class="form-control" id="pwd"/>
        <button class="btn btn-default" id="sure">确定</button>
    </div>
</div>
</body>
<script>
    $('#sure').click(function () {
        var user = $('#user').val();
        var pwd = $('#pwd').val();
        console.log(user,pwd);
        $.ajax({
            url:'http://127.0.0.1:8055/account/login/',
            type: 'POST',
            data:{'user':user,'pwd':pwd,"csrfmiddlewaretoken":$("[name='csrfmiddlewaretoken']").val(),},
            // 这一种直接在这里渲染成了字符串,所以,最简单
            <!--data:{'user':user,'pwd':pwd,'csrfmiddlewaretoken':'{{ csrf_token }}'},-->
            success:function (data) {
                alert(data)
            }
        })
    })
</script>
</html>

for example

Ajax解决csrf_token的不同方式的更多相关文章

  1. AJAX 解决什么问题?如何使用AJAX?AJAX 有什么问题需要注意?项目中哪里用到了AJAX?

    ajax 解决的问题就是“无刷新更新页面”,用传统的HTML 表单方式进行页面的更新时,每次都要将请求提交到服务器,服务器返回后再重绘界面,这样界面就会经历:提交→变白→重新显示这样一个过程,用户体验 ...

  2. 【转载】win10解决设置默认打开方式不生效问题(双击每次都要选择默认打开程序)

    win10解决设置默认打开方式不生效问题(双击每次都要选择默认打开程序) 以下文章 部分选自 https://blog.csdn.net/shan165310175/article/details/8 ...

  3. ajax之Content-Type决定form-data方式提交还是request-payloud等

    1.post请求的Content-Type为application/x-www-form-urlencoded,参数是在请求体中,即上面请求中的Form Data. 在servlet中,可以通过req ...

  4. Extjs6设置Store、Ajax、form的请求方式(GET、POST)

    Extjs6 设置Store.Ajax.form的请求方式(GET.POST) Ajax请求和Form的submit方法设置请求方式和原来一样,使用method : 'POST'设置 // 表单提交 ...

  5. Java之解决线程安全问题的方式三:Lock锁

    import java.util.concurrent.locks.ReentrantLock; /** * 解决线程安全问题的方式三:Lock锁 --- JDK5.0新增 * * 1. 面试题:sy ...

  6. 8、struct2解决中文乱码的方式

    首先建立一个jsp页面 列如 页面编码统一问题,这个最容易解决. <%@ page language="java" import="java.util.*" ...

  7. Django学习——ajax发送其他请求、上传文件(ajax和form两种方式)、ajax上传json格式、 Django内置序列化(了解)、分页器的使用

    1 ajax发送其他请求 1 写在form表单 submit和button会触发提交 <form action=""> </form> 注释 2 使用inp ...

  8. 《JavaScript权威指南》学习笔记之二十---XMLHttpRequest和AJAX解决方式

    一.AJAX概述 AJAX是Asynchronous JavaScript and XML的缩写.中文译作异步JavaScript和XML.AJAX 不是新的编程语言,而是一种使用现有标准的新方法.在 ...

  9. 解决ajax跨域几种方式

    发生跨域问题的原因: 浏览器的限制,出于安全考虑.前台可以正常访问后台,浏览器多管闲事报跨域问题,但其实前台已经访问到后台了. 跨域,协议.域名.端口任何一个不一样浏览器就认为是跨域. XHR(XML ...

随机推荐

  1. PHP 类名::class含义

    自 PHP 5.5 起,关键词 class 也可用于类名的解析. 使用 ClassName::class 可以获取一个字符串,包含了类 ClassName 的完全限定名称.这对使用了命名空间的类尤其有 ...

  2. go build -ldflags

    http://studygolang.com/articles/2052 ldflags 用法:[路径,非必需,除非你有目录层次]包名.变量 [path]packege.value go build ...

  3. CentOS6.5 安装Kafka集群

    1.安装zookeeper 参考文档:http://www.cnblogs.com/hunttown/p/5452138.html 2.下载:https://www.apache.org/dyn/cl ...

  4. CentOS7 开放服务端口

    CentOS 7 默认是firewall防火墙 如果你想让一个web服务可以被其它机子访问,就得开放这个服务的端口,不然就会被拦截 1. 开放端口命令 firewall-cmd --add-port= ...

  5. 从零开始一起学习SLAM | 不推公式,如何真正理解对极约束?

    自从小白向师兄学习了李群李代数和相机成像模型的基本原理后,感觉书上的内容没那么难了,公式推导也能推得动了,感觉进步神速,不过最近小白在学习对极几何,貌似又遇到了麻烦... 小白:师兄,对极几何这块你觉 ...

  6. 日期条控件 DateFieldControl

    日期条控件 书:163 <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns ...

  7. Nuxtjs初始

    今天去看vue的官网,才看了他的升级版-->Nuxtjs,https://nuxtjs.org/guide/installation可以点击链接进入他的官网查看文档 第一步,搭建项目之前的准备工 ...

  8. Python_summary

    Q: python中出现IndentationError:unindent does not match any outer indentation levelA:复制代码的时候容易出现缩进错误,虽然 ...

  9. Hibernate.编写xml文件无自动提示信息

    Hibernate.编写xml文件无自动提示信息 注意: 配置 xxxx.hbm.xml 文件的自动提示.和配置 hibernate.cfg.xml 文件的提示,操作步骤是一样的.只是复制的文件内容. ...

  10. RabbitMQ理论

    RabbitMQ理论   消息 = 有效载荷(数据) + 标签(包含载荷和收件人的信息)   信道:你的应用于RabbitMQ代理服务器之间的TCP连接(有唯一的ID),信道主要解决了每一个线程单独T ...