关于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实现简单购物商城
May 21 Python
利用Python开发实现简单的记事本
Nov 15 Python
Python 编码Basic Auth使用方法简单实例
May 25 Python
python with提前退出遇到的坑与解决方案
Jan 05 Python
python的格式化输出(format,%)实例详解
Jun 01 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
python创建属于自己的单词词库 便于背单词
Jul 30 Python
django 中使用DateTime常用的时间查询方式
Dec 03 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 Python
Python面向对象编程之类的概念
Nov 01 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的数组与字符串的转换函数整理汇总
2013/07/18 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
PHP的反射机制实例详解
2017/03/29 PHP
javascript字符串拼接的效率问题
2010/12/25 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
2017/03/29 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
2017/07/20 jQuery
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
2019/04/25 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
python写的ARP攻击代码实例
2014/06/04 Python
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
pandas获取groupby分组里最大值所在的行方法
2018/04/20 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
三星美国官网:Samsung美国
2017/02/06 全球购物
xml有哪些解析技术?区别是什么
2016/04/26 面试题
毕业生的自我评价分享
2013/12/18 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
行政副总岗位职责
2014/02/23 职场文书
活动倡议书范文
2014/05/13 职场文书
公司节能减排方案
2014/05/16 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
网吧员工管理制度
2015/08/05 职场文书
小学思品教学反思
2016/02/20 职场文书
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers
Python 装饰器(decorator)常用的创建方式及解析
2022/04/24 Python