Ajax解决csrf_token的不同方式
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的不同方式的更多相关文章
- AJAX 解决什么问题?如何使用AJAX?AJAX 有什么问题需要注意?项目中哪里用到了AJAX?
ajax 解决的问题就是“无刷新更新页面”,用传统的HTML 表单方式进行页面的更新时,每次都要将请求提交到服务器,服务器返回后再重绘界面,这样界面就会经历:提交→变白→重新显示这样一个过程,用户体验 ...
- 【转载】win10解决设置默认打开方式不生效问题(双击每次都要选择默认打开程序)
win10解决设置默认打开方式不生效问题(双击每次都要选择默认打开程序) 以下文章 部分选自 https://blog.csdn.net/shan165310175/article/details/8 ...
- ajax之Content-Type决定form-data方式提交还是request-payloud等
1.post请求的Content-Type为application/x-www-form-urlencoded,参数是在请求体中,即上面请求中的Form Data. 在servlet中,可以通过req ...
- Extjs6设置Store、Ajax、form的请求方式(GET、POST)
Extjs6 设置Store.Ajax.form的请求方式(GET.POST) Ajax请求和Form的submit方法设置请求方式和原来一样,使用method : 'POST'设置 // 表单提交 ...
- Java之解决线程安全问题的方式三:Lock锁
import java.util.concurrent.locks.ReentrantLock; /** * 解决线程安全问题的方式三:Lock锁 --- JDK5.0新增 * * 1. 面试题:sy ...
- 8、struct2解决中文乱码的方式
首先建立一个jsp页面 列如 页面编码统一问题,这个最容易解决. <%@ page language="java" import="java.util.*" ...
- Django学习——ajax发送其他请求、上传文件(ajax和form两种方式)、ajax上传json格式、 Django内置序列化(了解)、分页器的使用
1 ajax发送其他请求 1 写在form表单 submit和button会触发提交 <form action=""> </form> 注释 2 使用inp ...
- 《JavaScript权威指南》学习笔记之二十---XMLHttpRequest和AJAX解决方式
一.AJAX概述 AJAX是Asynchronous JavaScript and XML的缩写.中文译作异步JavaScript和XML.AJAX 不是新的编程语言,而是一种使用现有标准的新方法.在 ...
- 解决ajax跨域几种方式
发生跨域问题的原因: 浏览器的限制,出于安全考虑.前台可以正常访问后台,浏览器多管闲事报跨域问题,但其实前台已经访问到后台了. 跨域,协议.域名.端口任何一个不一样浏览器就认为是跨域. XHR(XML ...
随机推荐
- mybatis test条件判断 如何引用 传入的 list参数中的map中的值
<select id="query" resultType="map"> select * from ${tbName} <where> ...
- 20165321预备作业3:Linux安装及命令入门
Linux安装 在老师给的VirtualBox的网站上面,我下载了VirtualBox的最新版本,安装成功后,我又下载了Ubuntu.但是,发现无论是哪个版本的Ubuntu都无法在VirtualBox ...
- vue2.3时使用手机调试,提示媒体已断开的解决方案
参考链接:http://www.xitonghe.com/jiaocheng/windows7-9623.html 1.在当前版本vue下开发,发现只能在localhost时调试,不能使用电脑的ip, ...
- android js与控件交互初探。
1.创建一个mainacvity 在oncreate中加入, mWeb是一个webview组件,网络权限记得自己加. <uses-permission android:name="an ...
- Git操作说明
Git操作说明 1.将本地项目上传到GitHub 1) 首先在GitHub上注册帐户 2) 在GitHub上创建仓库 3) Pc安装Git客户端(Git Bach) 4) 打开 ...
- Container(容器)与 Injector(注入)
Container(容器): History: containerd于2014年出生于Docker,最初是Docker引擎的低层运行时管理器.继2017年3月被CNCF接受之后,containerd已 ...
- mysql----------阿里云RDS导入导出
1.这是阿里云rds如何将导出的物理备份文件,导入到自建库里面: https://help.aliyun.com/knowledge_detail/5973700.html?spm=5176.7766 ...
- Ubuntu 16.04卸载一些不必要的预装软件
卸载libreoffices ~$ sudo apt-get remove libreoffice-common 卸载Amazon的链接 ~$ sudo apt-get remove unity-we ...
- 初识Vue,简单的todolist
vue开发源码:https://vuejs.org/js/vue.js todolist代码: <!DOCTYPE html> <html lang="en"&g ...
- LeetCode119.杨辉三角II
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] 进阶: 你可以优化你的算法到 O ...