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. JS 8-1 OOP概念与继承

    function Foo(){ this.y=2; } typeof Foo.prototype; Foo.prototype.x = 1; var obj3= new Foo(); obj3.x; ...

  2. log4j.properties配置详解与实例-全部测试通过[转]

    最近使用log4j写log时候发现网上的写的都是千篇一律,写的好的嘛不全,写的全一点的嘛没有一点格式,看着累.这里把网上收集到的整理了一下,并且全部都在机器上测试成功了.这么好的文档估计没有了吧? # ...

  3. 线程中使用SaveFileDialog不能弹出窗体

    在子线程中使用 SaveFileDialog 无法弹出窗体,主要是我们需要用主线程去处理SaveFileDialog , 我们可以将子线程进行如下设置: public partial class Fo ...

  4. unity3d-游戏实战突出重围,第二天 制作血条

    using UnityEngine; using System.Collections; public class xt : MonoBehaviour { //红色血条 public Texture ...

  5. 41.SEO----前端SEO技巧

    一.搜索引擎工作原理 当我们在输入框中输入关键词,点击搜索或查询时,然后得到结果.深究其背后的故事,搜索引擎做了很多事情. 在搜索引擎网站,比如百度,在其后台有一个非常庞大的数据库,里面存储了海量的关 ...

  6. echo 内容显示颜色

    一,字体显示颜色 #字体颜色:30m-37m 黑.红.绿.黄.蓝.紫.青.白str=”要显示的字体“echo -e "\033[30m ${str}\033[0m"      ## ...

  7. msyql 移动某一列数据到某列 & 字段加前缀

    #移动数据 UPDATE dcs_organize_user AS a, dcs_organize_user AS b SET a.SHORTTELNO=b.USERTELNO WHERE a.id= ...

  8. Oracle数据库分区相干知识点

    Partition Characteristics:1.Partition Key;2.Partitioning Strategies Partitioning Strategies:1. range ...

  9. c#关于字符串格式化

    1. 如何使用文化来格式化日期 如: /// <summary> /// 根据语言获取文化名称 /// </summary> /// <returns></r ...

  10. [3]传奇3服务器源码分析一 DBServer

    留存 服务端下载地址: 点击这里