解除中间件csrf_token的保护机制的办法

原理:django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。当用post提交数据的时候,django会去检查是否有一个csrf的随机字符串,如果没有就会报错

全局:

  中间件 django.middleware.csrf.CsrfViewMiddleware

局部:

  @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。/n@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

解决办法:

  通过form提交:

   需要在表单里面添加   {%csrf_token%} 标签

  通过ajax提交:

    方法一:

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

$.ajax({url: "/cookie_ajax/",type: "POST",data: {"username": "Q1mi","password": 123456,"csrfmiddlewaretoken": $("[name = 'csrfmiddlewaretoken']").val()  // 使用jQuery取出csrfmiddlewaretoken的值,拼接到data中},success: function (data) {console.log(data);}
})

  方法二:

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

$.ajax({url: "/cookie_ajax/",type: "POST",headers: {"X-CSRFToken": $.cookie('csrftoken')},  // 从Cookie取csrftoken,并设置到请求头中data: {"username": "Q1mi", "password": 123456},success: function (data) {console.log(data);}
})

  方三:

    或者用自己写一个getCookie方法:适用于全局

    这是一段js代码,设置全局

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');function csrfSafeMethod(method) {// these HTTP methods do not require CSRF protectionreturn (/^(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

    

转载于:https://www.cnblogs.com/wy3713/p/9677493.html

Django的crfs_token解决办法相关推荐

  1. DJANGO中,用QJUERY的AJAX的json返回中文乱码的解决办法

    和网上其它用JAVA或是PHP的实现不太一样, DJANGO中的解决办法如下: 后端样例: def render_to_json_response(context, **response_kwargs ...

  2. 小米4支持html5,针对在webview模式中,小米魅族手机不支持html5原生video的control的解决办法![原创]...

    其实,解决办法就是,重新写个control控制功能,.同样用流行的video.js可以实现 第一步就是增加个播放的图片..要不然没有按钮多难看! webkit-playsinline> 上面的视 ...

  3. Django 无法加载静态文件(js,css,image)解决办法

    Django 无法加载静态文件(js,css,image)解决办法 按照这个配置成功: https://jingyan.baidu.com/article/8cdccae92ffc16315413cd ...

  4. django中,kindeditor存到数据库的html,前台html标签被自动转义的解决办法

    2019独角兽企业重金招聘Python工程师标准>>> 1,使用kindeditor进行了上传图片功能,存储到后台的html代码为: <img src="/stati ...

  5. Python3.4 Django MySQL MySQL-python 安装不成功解决办法 Unable to find vcvarsall.bat 错误

    解决办法: 1.安装pymysql pip install pymysql 2.在Django项目中找到跟settings.py在同一个目录下的__init__.py 添加如下代码 import py ...

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

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

  7. 关于python django开发过程中的常见的问题及解决办法总结

    以下网址基本已包含大部分常见问题及解决办法,后续会更新 http://www.cnblogs.com/lilinpging/p/7804137.html http://www.cnblogs.com/ ...

  8. [Django]我的第一个网页,报错啦~(自己实现过程中遇到问题以及解决办法)

    环境配置: python :2.7.13 django:1.10.5 OS:Win7(64位)& Centos7 问题描述  解决办法   global name 'render' is no ...

  9. Django中的跨域解决办法 基于后端的跨域解决方案

    Django中的跨域解决办法 基于后端的跨域解决方案 1 何为跨域 在浏览器中,只要发送请求的URL的协议.域名.端口号这三者中的任意一个与当前页面地址的协议.域名.端口号不同,则称之为跨域.当发生这 ...

  10. 详解python框架django为例,还没开始写代码前的花式坑——解决办法和排错思路。pycharm解释器配置,虚拟环境venv配置,使用命令行。

    如果你现在赶项目,就直接跳到符合的标题查看解决办法.如果你对理论思考不太感冒,也可以直接跳到指定标题. 如果你是学习者,极客,时间充足,希望你能够耐心的看下去,因为你在这里,不仅仅可以找到解决办法,更 ...

最新文章

  1. css 如何 重设 外部样式的属性值_IT兄弟连 HTML5教程 CSS3揭秘 CSS常见的样式属性和值5...
  2. klee错误汇报二:KLEE的optimize选项的一个困惑
  3. chrome调试手机webview中页面
  4. R语言:ts() 时间序列的建立
  5. C_C++指针指针应用详解
  6. J2EE WEBWORK FRAMEWORK安全隐患
  7. 英语(10)---脱口而出的英语
  8. 2022年,ICPC比赛、CCPC比赛、CCF-CSP考试、蓝桥杯比赛、天梯赛日程
  9. 算法设计与分析重点总结
  10. 科罗拉多大学波尔得分校计算机科学,科罗拉多大学波尔得分校院系设置
  11. web开发第三方登陆之facebook登陆
  12. 【测试开发】Pytest—Html测试报告定制及封装
  13. python中不同文件之间使用所谓的全局变量
  14. 有道翻译软件下载地址
  15. 如何解决error: failed to push some refs to ‘git@github.com:......git pull冲突问题
  16. leetcode【135】Candy【c++版,双数组,单数组,坡峰坡谷】
  17. .NET-房贷计算器
  18. 加密技术和PKI系统
  19. python光棍节快乐_光棍节快乐的祝福语12条
  20. Uipath Studio流程设计器介绍

热门文章

  1. BGPVRP5.0的10条选路原则,以及NE20的IBGP负载均衡
  2. asp 开发app_从零开始实现 ASP.NET Core MVC 的插件式开发(七) 问题汇总及部分问题解决方案...
  3. c语言写的程序如何移植,完全由C语言编写,高度可移植,超级牛逼的软件定时器!...
  4. zeromq源码分析笔记之架构
  5. python 绘制图表生成svg文件_使用Python创建SVG
  6. php上搭建dvwa,使用phpstudy在windows上搭建DVWA
  7. VI.Multidocument Transactions
  8. [渝粤教育] 西南科技大学 文学概论 在线考试复习资料
  9. [渝粤教育] 西南科技大学 企业生产运作管理 在线考试复习资料2021版
  10. 【sklearn第十六讲】集成方法