关于django 1.10 CSRF验证失败的解决方法


Posted in Python onAugust 31, 2019

最近工作闲,没事自学django,感觉这个最烦的就是各版本提供的api函数经常有变化,不是取消了就是参数没有了,网上搜到的帖子也没说明用的是什么版本的django,所以经常出现搬运过来的代码解决不了问题的情况,不过基本上遇到的坑不多,最坑的就是在提交post表单时弄了两天的CSRF验证失败问题,特此记录一下,我用的是django 1.10.3:

关于django 1.10 CSRF验证失败的解决方法

如果你不想使用这个功能,直接找到settings.py中的'django.middleware.csrf.CsrfViewMiddleware',这一行,直接给丫注释掉,就不用启动CSRF检查了,一了白了,当然了如果你是练手的时候这么干还行,正式一点的项目还是启用最好,省的被人搞跨站攻击,到时候加班倒霉挨骂的还是你。

关于django 1.10 CSRF验证失败的解决方法

关于跨站攻击简单说一下我的理解,就是比如说你登录了一个交友网站后,才可以修改提交自己的基本资料,此时登录后cooikes就被记录到本机了,你的基友嫉妒你,他做了一个假页面A发给你,引诱你点击或填写提交后,直接把数据提交给了真正的交友网站,由于你之前已经登录并且cooikes被记录下来了,所以这次提交虽然是从假页面A提交过去的,但是交友网站校验是通过的,所以就可以任意修改提交数据,比如说把你的年龄恶意修改成60的一个老头儿,导致你长期吃狗粮。。。

继续说正事,那么如果想开启怎么办呢,首先把刚才注释的'django.middleware.csrf.CsrfViewMiddleware'还是放开吧,然后继续如下步骤:

1、首先弄个表单提交页面search_form_post.html(该页面模拟搜索并显示在数据库里保存的汽车列表),注意在from表单内增加{% csrf_token %}标签,代码如下:

<!DOCTYPE html>
 <html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>搜索汽车</title>
 </head>
 <body>
  <form action="" method="post">
   {% csrf_token %}
   <input type="text" name="q"><input type="checkbox" name="chk_contains">是否模糊搜索
   <input type="submit" value="Search">
  </form>
 {{ message }}
 <p>
 {% for car in car_list %}
  <li>
   {{ car.brand }}
  </li>
 {% endfor %}
 </body>
 </html>

2、在你的apps模块的views.py增加一个处理搜索提交的方法,代码如下:

from django.shortcuts import render
 
 
 def search_form_post(request):
  car_list = None
 
  if 'q' in request.POST:
   message = '你搜索的是: %r' % request.POST['q']
   if 'chk_contains' in request.POST:
    car_list = Car.objects.filter(brand__contains=request.POST['q'])
   else:
    car_list = Car.objects.filter(brand=request.POST['q'])
  else:
   message = '请输入要搜索的内容并点击搜索'
 
  return render(request, "search_form_post.html", {'message': message, 'car_list': car_list})

注意上边关键的地方来了,django 1.10直接使用render方法就可以了,{% csrf_token %}标签才会被自动替换为下图一样的隐藏域,我就是因为用的get_template("search_form_post.html").render(context),所以老是替换的值为空,因为当你使用这种方式加载模板的时候,不会自动替换{% csrf_token %}标签,当然也有解决办法,就是使用context.update(csrf(request)),来自己替换,不过挺麻烦的,还是用render方法自动替换方便

关于django 1.10 CSRF验证失败的解决方法

然后第三个参数,一定要使用{}花括号的字典数据类型,不要使用什么元祖、列表之类的数据类型了,这样模板内的变量才能被正确替换显示出来,我被坑主要就是{% csrf_token %}标签不被自动替换+模板内变量不显示,剩下的就是去urls.py里配置url去试试吧

关于django 1.10 CSRF验证失败的解决方法

以上这篇关于django 1.10 CSRF验证失败的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python正则表达式匹配ip地址实例
Oct 09 Python
在Python中使用next()方法操作文件的教程
May 24 Python
python开发之tkinter实现图形随鼠标移动的方法
Nov 11 Python
python Django模板的使用方法
Jan 14 Python
Python线程指南详细介绍
Jan 05 Python
python 巧用正则寻找字符串中的特定字符的位置方法
May 02 Python
解决已经安装requests,却依然提示No module named requests问题
May 18 Python
django的ORM操作 删除和编辑实现详解
Jul 24 Python
Flask框架学习笔记之模板操作实例详解
Aug 15 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
Mar 30 Python
Anaconda使用IDLE的实现示例
Sep 23 Python
python 提高开发效率的5个小技巧
Oct 19 Python
详解python中的模块及包导入
Aug 30 #Python
详解Python self 参数
Aug 30 #Python
Python 70行代码实现简单算式计算器解析
Aug 30 #Python
Python类中方法getitem和getattr详解
Aug 30 #Python
Python paramiko模块使用解析(实现ssh)
Aug 30 #Python
django中上传图片分页三级联动效果的实现代码
Aug 30 #Python
python实现生成Word、docx文件的方法分析
Aug 30 #Python
You might like
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
JavaScript 版本自动生成文章摘要
2008/07/23 Javascript
js parseInt(&quot;08&quot;)未指定进位制问题
2010/06/19 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
jquery移动listbox的值原理及代码
2013/05/03 Javascript
浅析JavaScript动画
2015/06/10 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
微信小程序自定义胶囊样式
2020/12/27 Javascript
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
对python多线程中Lock()与RLock()锁详解
2019/01/11 Python
Python安装与基本数据类型教程详解
2019/05/29 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
利用python计算时间差(返回天数)
2019/09/07 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
好习惯伴我成长演讲稿
2014/05/21 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python