前言

今天学习Django框架,用ajax向后台发送post请求,直接报了403错误,说CSRF验证失败;先前用模板的话都是在里面加一个 {% csrf_token %} 就直接搞定了CSRF的问题了;很显然,用ajax发送post请求这样就白搭了;

文末已经更新更简单的方法,上面的略显麻烦

上网上查了一下,看了几个别人的博客,才知道官网也早有说明解决办法,大致流程就是:

就是新建一个JavaScript文件,然后把网上给的代码粘贴进去,然后在你使用ajax的页面把它引入一下;当然,如果你在网上找到的解决代码包含JQuery的话,那就需要在引入的JQuery之后引入了(毕竟解决代码不唯一,网上一找一堆,基本都是对的,原生JS和带JQuery的都有);

文末会附上我使用的JS相关代码,也可以去网上找!

如果上述没有解决你的问题,那就说明你和我踩了同样的一个小坑........

用了上面查到的方法,直接就解决了我的问题,但是随着我对代码修修改改、清除了相关页面的cookie,吃个饭再运行,竟然又报403的CSRF错误了;百思不得其解的我又去Django官网看了一下相关部分的文档,一堆英文看看大概找到了问题;

我发现我把html页面里面原先加的 {% csrf_token %} 这个东西给删掉了,加上谷歌的相关页面cookie被我一清除,csrftoken就被咔嚓了,再刷新页面,去html页面里也找不到 {% csrf_token %} ,没有了csrftoken那个cookie值,即使有相关的JS代码也毛用没有了;

打个比方:

你吃饭需要工具,也就是筷子,但是饭都没有,你拿个筷子吃什么呀!!!

这里的筷子就是解决问题的JS代码,而饭就是这个 {% csrf_token %} ,更确切说因该是浏览器中的叫 csrftoken 的 cookie;

两者都有了,才能彻底解决吃饭的问题;

总结下来:

使用ajax发送post请求时,html页面里一定要有 {% csrf_token %},在body里应该就没什么大问题;

然后引入相关的JS解决代码;

补充一下,和表单没什么太大关系,因为我的html页面里就没有表单,直接通过点击按钮发送的ajax请求;

需要引入的相关JS代码

$(document).ajaxSend(function(event, xhr, settings) {

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;

}

function sameOrigin(url) {

// url could be relative or scheme relative or absolute

var host = document.location.host; // host + port

var protocol = document.location.protocol;

var sr_origin = '//' + host;

var origin = protocol + sr_origin;

// Allow absolute or scheme relative URLs to same origin

return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||

(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||

// or any other URL that isn't scheme relative or absolute i.e relative.

!(/^(\/\/|http:|https:).*/.test(url));

}

function safeMethod(method) {

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

}

if (!safeMethod(settings.type) && sameOrigin(settings.url)) {

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

}

});

简单方法

首先在你需要发起ajax post请求的页面的里面随便一个地方加上 {% crsr_token %}

然后浏览器里查看源码,会有这么一个隐藏标签:

在发起ajax post 请求时,组织json参数时,以下面这种方式使其成为参数,前两个参数是我自定义的请自行忽略,其中键值对中的键名为input标签的name名,值就为其value值

csrf = $('input[name="csrfmiddlewaretoken"]').val();

params = {'sku_id': sku_id, 'count': count, 'csrfmiddlewaretoken': csrf};

这样就可以把csrf中的参数传递给后端,就不会有403错误了,相比前面用了好大一段JS代码要简洁的多

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持谷谷点程序。

python token post403原因_Django中ajax发送post请求 报403错误CSRF验证失败解决方案相关推荐

  1. ajax的post请求出现403错误,如何解决Django中ajax发送post请求报403错误CSRF验证失败的问题...

    如何解决Django中ajax发送post请求报403错误CSRF验证失败的问题 发布时间:2021-02-05 14:23:57 来源:亿速云 阅读:92 作者:小新 这篇文章主要介绍了如何解决Dj ...

  2. Django中ajax发送post请求,报403错误CSRF验证失败解决办法

    今天学习Django框架,用ajax向后台发送post请求,直接报了403错误,说CSRF验证失败:先前用模板的话都是在里面加一个 {% csrf_token %} 就直接搞定了CSRF的问题了:很显 ...

  3. python token post403原因_Django的POST请求时因为开启防止csrf,报403错误,及四种解决方法...

    Django默认开启防止csrf(跨站点请求伪造)攻击,在post请求时,没有上传 csrf字段,导致校验失败,报403错误 解决方法1: 注释掉此段代码,即可. 缺点:导致Django项目完全无法防 ...

  4. ajax json 403,解决 Ajax 发送 post 请求出现 403 Forbidden 的三种方式

    众所周知前端向后台发送 post 请求时,必须验证 csrf,否则会报错 403 Forbidden.使用 Django Form 表单可以直接在表单里面添加 {% csrf_token %} 即可, ...

  5. ajax 调用服务器接口报403错误解决办法

    发现问题 在前端页面中远程调用服务器接口时报403错误,而直接在浏览器访问则不会报错. Ajax调用结果: 浏览器调用结果: 报403原因 经过分析发现是因为前端和服务器的域名不同而触发了防盗链机制. ...

  6. Python网络编程:使用requests.post发送POST请求

    Python网络编程:使用requests.post发送POST请求 在Python中,requests是一个强大的库,它可以用于发送HTTP请求并且处理响应.requests.post()函数是这个 ...

  7. 原生php ajax post_使用原生ajax发送post请求完整案例

    搜索热词 使用ajax发送数据实现前后台的交互,我想是web开发最基础的技能了.近来dz开发因为不兼容jquery,所以只能使用原生js发送数据,不想还遇到很多问题.在这里分析总结一下.先来一个使用a ...

  8. 原声ajax发送post请求,原生JS实现ajax 发送post请求

    1. [代码]原生JS实现ajax 发送post请求 var oStr = ''; var postData = {}; var oAjax = null; //post提交的数据 postData ...

  9. 使用Ajax发送http请求(getpost请求)

    目录 同步和异步 同步和异步的概念 异步更新网站 Ajax Ajax 的概念 发送 Ajax 请求的五个步骤 Ajax 请求:get 请求举例 Ajax 请求:post 请求举例 XMLHttpReq ...

最新文章

  1. linux 后台进程
  2. (2)shiro角色资源权限
  3. BUUCTF-Reverse:xor(涉及异或脚本编写)
  4. 看了一个月c能学java_学过一点C语言的可以自学java吗?应该怎样开始?
  5. linux 生成o 文件,急,linux为什么生成不了.o驱动程序文件
  6. return 返回值的问题
  7. Java中的List你真的会用吗
  8. 第二节:Css重写样式
  9. php读取图片输出,php读取图片流输出到页面图片
  10. JSR-303 数据校验学习
  11. 理解CSS3属性transition
  12. 远程服务器学习总结篇1:ssh
  13. IATF16949认证辅导,FMEA和CP的顾客额外批准,对供应链安全的管理(适用时)
  14. win7计算机启动遇到错误怎么办,W7电脑系统出现Windows错误恢复该怎么办
  15. 小学计算机上机评分表,海安市实验小学信息技术学科素养考核方案
  16. 鸿蒙OS分布式任务调度,鸿蒙子系统解读-分布式任务调度篇(下)
  17. pyqt5 失焦 监听无操作 定时器
  18. uni-app下载和使用
  19. 一对情侣用计算机电影,一个剧情电影,讲述一对情侣谈恋爱的故事
  20. python 网络编程基础

热门文章

  1. 2021年最全Android屏幕适配的度量单位px dp(dip) ppi dpi sp pt的区别(最详细,屏幕尺寸,屏幕分辨率,屏幕兼容,屏幕适配)
  2. Oracle数据库登录方式
  3. 手机快充,是手机数据线的功劳还是充电头的功劳?
  4. 机器学习实战2.3. k-近邻算法例子-识别手写数字
  5. 卖萌鸡尾酒 (贪心)
  6. windows系统里面搜索文件内容
  7. QQ聊天气泡拖动效果实现
  8. 学习linux RHEL 8第一天
  9. bootstrap特点
  10. JUnit测试使用教程