关于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 相关文章推荐
Python2随机数列生成器简单实例
Sep 04 Python
Python将多个excel表格合并为一个表格
Feb 22 Python
Python中dict和set的用法讲解
Mar 28 Python
远程部署工具Fabric详解(支持Python3)
Jul 04 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
Python对接 xray 和微信实现自动告警
Sep 17 Python
numpy:np.newaxis 实现将行向量转换成列向量
Nov 30 Python
解决Jupyter NoteBook输出的图表太小看不清问题
Apr 16 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
May 04 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
Apr 14 Python
pytorch 实现在测试的时候启用dropout
May 27 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
php实现天干地支计算器示例
2014/03/14 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
将List对象列表转换成JSON格式的类实现方法
2016/07/04 Javascript
js仿支付宝多方框输入支付密码效果
2016/09/27 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
js实现京东秒杀倒计时功能
2019/01/21 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
在vue中使用console.log无效的解决
2020/08/09 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
基于Python爬取爱奇艺资源过程解析
2020/03/02 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
建筑工程专业毕业生自荐信
2013/10/19 职场文书
网络教育自我鉴定
2013/11/01 职场文书
毕业生面试求职信
2014/06/23 职场文书
学校清明节活动总结
2014/07/04 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
防汛工作情况汇报
2014/10/28 职场文书
2016公司年会通知范文
2015/04/25 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
MySQL 全文检索的使用示例
2021/06/07 MySQL
nginx之queue的具体使用
2022/06/28 Servers