Django的crfs_token解决办法
解除中间件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解决办法相关推荐
- DJANGO中,用QJUERY的AJAX的json返回中文乱码的解决办法
和网上其它用JAVA或是PHP的实现不太一样, DJANGO中的解决办法如下: 后端样例: def render_to_json_response(context, **response_kwargs ...
- 小米4支持html5,针对在webview模式中,小米魅族手机不支持html5原生video的control的解决办法![原创]...
其实,解决办法就是,重新写个control控制功能,.同样用流行的video.js可以实现 第一步就是增加个播放的图片..要不然没有按钮多难看! webkit-playsinline> 上面的视 ...
- Django 无法加载静态文件(js,css,image)解决办法
Django 无法加载静态文件(js,css,image)解决办法 按照这个配置成功: https://jingyan.baidu.com/article/8cdccae92ffc16315413cd ...
- django中,kindeditor存到数据库的html,前台html标签被自动转义的解决办法
2019独角兽企业重金招聘Python工程师标准>>> 1,使用kindeditor进行了上传图片功能,存储到后台的html代码为: <img src="/stati ...
- Python3.4 Django MySQL MySQL-python 安装不成功解决办法 Unable to find vcvarsall.bat 错误
解决办法: 1.安装pymysql pip install pymysql 2.在Django项目中找到跟settings.py在同一个目录下的__init__.py 添加如下代码 import py ...
- Django中ajax发送post请求,报403错误CSRF验证失败解决办法
今天学习Django框架,用ajax向后台发送post请求,直接报了403错误,说CSRF验证失败:先前用模板的话都是在里面加一个 {% csrf_token %} 就直接搞定了CSRF的问题了:很显 ...
- 关于python django开发过程中的常见的问题及解决办法总结
以下网址基本已包含大部分常见问题及解决办法,后续会更新 http://www.cnblogs.com/lilinpging/p/7804137.html http://www.cnblogs.com/ ...
- [Django]我的第一个网页,报错啦~(自己实现过程中遇到问题以及解决办法)
环境配置: python :2.7.13 django:1.10.5 OS:Win7(64位)& Centos7 问题描述 解决办法 global name 'render' is no ...
- Django中的跨域解决办法 基于后端的跨域解决方案
Django中的跨域解决办法 基于后端的跨域解决方案 1 何为跨域 在浏览器中,只要发送请求的URL的协议.域名.端口号这三者中的任意一个与当前页面地址的协议.域名.端口号不同,则称之为跨域.当发生这 ...
- 详解python框架django为例,还没开始写代码前的花式坑——解决办法和排错思路。pycharm解释器配置,虚拟环境venv配置,使用命令行。
如果你现在赶项目,就直接跳到符合的标题查看解决办法.如果你对理论思考不太感冒,也可以直接跳到指定标题. 如果你是学习者,极客,时间充足,希望你能够耐心的看下去,因为你在这里,不仅仅可以找到解决办法,更 ...
最新文章
- css 如何 重设 外部样式的属性值_IT兄弟连 HTML5教程 CSS3揭秘 CSS常见的样式属性和值5...
- klee错误汇报二:KLEE的optimize选项的一个困惑
- chrome调试手机webview中页面
- R语言:ts() 时间序列的建立
- C_C++指针指针应用详解
- J2EE WEBWORK FRAMEWORK安全隐患
- 英语(10)---脱口而出的英语
- 2022年,ICPC比赛、CCPC比赛、CCF-CSP考试、蓝桥杯比赛、天梯赛日程
- 算法设计与分析重点总结
- 科罗拉多大学波尔得分校计算机科学,科罗拉多大学波尔得分校院系设置
- web开发第三方登陆之facebook登陆
- 【测试开发】Pytest—Html测试报告定制及封装
- python中不同文件之间使用所谓的全局变量
- 有道翻译软件下载地址
- 如何解决error: failed to push some refs to ‘git@github.com:......git pull冲突问题
- leetcode【135】Candy【c++版,双数组,单数组,坡峰坡谷】
- .NET-房贷计算器
- 加密技术和PKI系统
- python光棍节快乐_光棍节快乐的祝福语12条
- Uipath Studio流程设计器介绍
热门文章
- BGPVRP5.0的10条选路原则,以及NE20的IBGP负载均衡
- asp 开发app_从零开始实现 ASP.NET Core MVC 的插件式开发(七) 问题汇总及部分问题解决方案...
- c语言写的程序如何移植,完全由C语言编写,高度可移植,超级牛逼的软件定时器!...
- zeromq源码分析笔记之架构
- python 绘制图表生成svg文件_使用Python创建SVG
- php上搭建dvwa,使用phpstudy在windows上搭建DVWA
- VI.Multidocument Transactions
- [渝粤教育] 西南科技大学 文学概论 在线考试复习资料
- [渝粤教育] 西南科技大学 企业生产运作管理 在线考试复习资料2021版
- 【sklearn第十六讲】集成方法