关于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操作SQLite简明教程
Jul 10 Python
Python切片用法实例教程
Sep 08 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
Jan 11 Python
Python实现PS滤镜碎片特效功能示例
Jan 24 Python
python利用pandas将excel文件转换为txt文件的方法
Oct 23 Python
Python数据可视化教程之Matplotlib实现各种图表实例
Jan 13 Python
python随机在一张图像上截取任意大小图片的方法
Jan 24 Python
python使用selenium实现批量文件下载
Mar 11 Python
Linux上使用Python统计每天的键盘输入次数
Apr 17 Python
解析Tensorflow之MNIST的使用
Jun 30 Python
Python 制作查询商品历史价格的小工具
Oct 20 Python
Pytorch 如何实现LSTM时间序列预测
May 17 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和XSL stylesheets转换XML文档
2006/10/09 PHP
PHP安全配置
2006/12/06 PHP
php数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
PHP读取大文件的类SplFileObject使用介绍
2014/04/09 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
JavaScript经典效果集锦
2010/07/06 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
vue+iview写个弹框的示例代码
2017/12/05 Javascript
详解ES6语法之可迭代协议和迭代器协议
2018/01/13 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
2018/02/21 Javascript
Vue.js实现的购物车功能详解
2019/01/27 Javascript
npm qs模块使用详解
2020/02/07 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
如何使用Python自动控制windows桌面
2019/07/11 Python
django表单的Widgets使用详解
2019/07/22 Python
Anaconda 查看、创建、管理和使用python环境的方法
2019/12/03 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
python 使用csv模块读写csv格式文件的示例
2020/12/02 Python
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
会计岗位职责
2013/11/08 职场文书
出国留学自荐信模板
2015/03/06 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书
2016应届毕业生自荐信范文
2016/01/28 职场文书