ajax如何加csrf,Ajax请求如何设置csrf_token

本文详细介绍了在Django中使用Ajax时如何设置和处理CSRF Token,包括从隐藏input获取、从cookie读取并设置请求头,以及使用`csrfSafeMethod`和`ajaxSetup`进行统一配置。同时提醒注意确保cookie中的csrftoken存在,并在必要时使用`ensure_csrf_cookie`装饰器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 方式一

通过获取隐藏的input标签中的csrfmiddlewaretoken值,放置在data中发送。

$.ajax({

url: "/cookie_ajax/",

type: "POST",

data: {

"username": "yang",

"password": 123,

// 使用jQuery取出csrfmiddlewaretoken的值,拼接到data总

"csrfmiddlewaretoken": $("[name="csrfmiddlewaretoken"]").val()

},

success: function(data){

console.log(data);

}

})

2. 方式二

通过获取返回的cookie中的字符串,放置在请求头中发送。

注意: 需要引入一个jquery.cookie.js插件。

$.ajax({

url: "/cookie_ajax/",

type: "POST",

// 从Cookie取csrftoken, 并设置到请求头中

headers: {"X-CSRFToken": $.cookie("csrftoken")},

data: {

"username": "yang",

"password": 123

},

success: function(data){

console.log(data)

}

})

或者用自己写一个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");

每一次都这么写太麻烦了,可以使用$.ajaxSetup()方法为ajax请求统一设置。

function csrfSafeMethod(method){

// these HTTP methods do not require CSRF protection

return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method);

}

$.ajaxSetup({

beforeSend: function(xhr, settings){

if (!csrfSafeMethod(settings.type) && !this.crossDomain){

xhr.setRequestHeader("X-CSRFToken", csrftoken);

}

}

})

注意:

如果使用从cookie中取csrftoken的方式,需要确保cookie存在csrftoken值。

如果你的视图渲染的HTML文件中没有包含{% csrf_token %}, Django可能不会设置CSRFtoken的cookie。

这个时候需要使用ensure_csrf_cookie()装饰器强制设置Cookie。

django.views.decorators.csrf import ensure_csrf_cookie

@ensure_csrf_cookie

def login(request):

pass

js 中ajax请求时设置 http请求头中的x-requestd-with&equals; ajax

今天发现 AngularJS 框架的$http服务提供的$http.get() /$http.post()的ajax请求中没有带 x-requested-with字段. 这样的话,后端的php 就无法 ...

如何在ajax请求中设置特殊的RequestHeader

现在ajax应用已经相当广泛了,有很多不错的ajax框架可供使用.ajax是一个异步请求,也主要是一种客户端的脚本行为.那么,如何在请求之前为请求添加特殊的一些头部信息呢? 下面是一个简单的例子,我用 ...

ajax请求中设置特殊的RequestHeader

现在ajax应用已经相当广泛了,有很多不错的ajax框架可供使用.ajax是一个异步请求,也主要是一种客户端的脚本行为.那么,如何在请求之前为请求添加特殊的一些头部信息呢? 下面是一个简单的例子,我用 ...

ajax请求头设置 &vert; header 传token

$('.w-entry-btn').on('tap',function(){ var urlAddress = '/api/address'; var valToken = JSON.parse(lo ...

ajax 使用 三种方法 设置csrf&lowbar;token的装饰器

1. CSRF中间件   CSRF跨站请求伪造 2. 补充两个装饰器  from django.views.decorators.csrf import csrf_exempt, csrf_prote ...

AJAX请求提交数据

1,AJAX准备知识:JSON JSON指的是JavaScript对象表示方法(JavaScript Object Notation) JSON是轻量级的文本数据交换格式 JSON独立于语言 JSON ...

django系列6--Ajax04 请求设置&lpar;设置csrf&lowbar;token&rpar;

Ajax请求设置csrf_token 官方文档 csrf_token: https://docs.djangoproject.com/en/1.11/ref/csrf/ CSRF 跨站请求攻击,简单地 ...

随机推荐

从感知器到SVM

这篇文章主要是分析感知器和SVM处理分类问题的原理,不涉及求解 感知器: 感知器要解决的是这样的一个二分类问题:给定了一个线性可分的数据集,我们需要找到一个超平面,将该数据集分开.这个超平面的描述如下 ...

centos 安装maven

1.环境: 操作系统:centos7 maven:apache-maven-3.3.9-bin.tar.gz 2.安装JDK(1.7) 3.安装maven mkdir -p /opt/usr/loca ...

Smallest Bounding Rectangle - uva10173

Smallest Bounding Rectangle Given the Cartesian coordinates of n(>0)2-dimensional points, write a ...

Codeforces Round &num;135 &lpar;Div&period; 2&rpar; E&period; Parking Lot 线段数区间合并

E. Parking Lot time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

JavaScript实现评论点赞功能

通过分析评论功能的逻辑关系,学会如何使用JavaScript实现评论.回复.点赞等各种功能 1.学会JavaScript处理日期和时间. 2.掌握Dom操作中的添加/删除子节点方法. 3.使用setT ...

【做题】Codeforces Round &num;453 &lpar;Div&period; 1&rpar; D&period; Weighting a Tree——拆环

前言:结论题似乎是我的硬伤…… 题意是给你一个无向图,已知连接到每一个点的边的权值和(为整数,且属于区间[-n,n]),需要求出每条边权值的一个合法解(都要是在区间[-2*n^2,2*n^2]内的整数 ...

su&colon; cannot set user id&colon; Resource temporarily unavailable问题解决

操作环境 SuSE11sp1 问题现象 执行su - test命令切换失败,提示"su: cannot set user id: Resource temporarily unavailab ...

用php实现交互式工具——How do I write a command-line interactive PHP script&quest;

I want to write a PHP script that I can use from the command line. I want it to prompt and accept in ...

L1-046&period; 整除光棍(模拟竖式计算除法)

L1-046. 整除光棍 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 翁恺 这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1 ...

toad调用存储过程,存储过程调用sql 类

1.定义一个sql 类Hello DROP JAVA SOURCE NEWXZXT."Hello"; CREATE OR REPLACE AND RESOLVE JAVA SOUR ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值