django-csrf使用和禁用方式


Posted in Python onMarch 13, 2020

orm表单使用csrf

a. 基本应用

form表单中添加

{% csrf_token %}

b. 全站禁用

# 'django.middleware.csrf.CsrfViewMiddleware',

c. 局部禁用

'django.middleware.csrf.CsrfViewMiddleware',
  
  from django.views.decorators.csrf import csrf_exempt

  @csrf_exempt
  def csrf1(request):

    if request.method == 'GET':
      return render(request,'csrf1.html')
    else:
      return HttpResponse('ok')

d. 局部使用

# 'django.middleware.csrf.CsrfViewMiddleware',
  
  from django.views.decorators.csrf import csrf_exempt,csrf_protect

  @csrf_protect
  def csrf1(request):

    if request.method == 'GET':
      return render(request,'csrf1.html')
    else:
      return HttpResponse('ok')

ajax提交数据

Ajax提交数据时候,携带CSRF:

a. 放置在data中携带

<form method="POST" action="/csrf1.html">
  {% csrf_token %}
  <input id="user" type="text" name="user" />
  <input type="submit" value="提交"/>
  <a onclick="submitForm();">Ajax提交</a>
</form>
<script src="/static/jquery-1.12.4.js"></script>
<script>
  function submitForm(){
    var csrf = $('input[name="csrfmiddlewaretoken"]').val();
    var user = $('#user').val();
    $.ajax({
      url: '/csrf1.html',
      type: 'POST',
      data: { "user":user,'csrfmiddlewaretoken': csrf},
      success:function(arg){
        console.log(arg);
      }
    })
  }

</script>

b. 放在请求头中

<form method="POST" action="/csrf1.html">
  {% csrf_token %}
  <input id="user" type="text" name="user" />
  <input type="submit" value="提交"/>
  <a onclick="submitForm();">Ajax提交</a>
</form>
<script src="/static/jquery-1.12.4.js"></script>
<script src="/static/jquery.cookie.js"></script>

<script>
  function submitForm(){
    var token = $.cookie('csrftoken');
    var user = $('#user').val();
    $.ajax({
      url: '/csrf1.html',
      type: 'POST',
      headers:{'X-CSRFToken': token},
      data: { "user":user},
      success:function(arg){
        console.log(arg);
      }
    })
  }
</script>

补充知识:在django的form表单及ajax提交的数据中添加认证的csrfmiddlewaretoken

1. 对于ajax提交数据,把下面的代码加入到js的头部,可以保证ajax执行时自动提交参数csrfmiddlewaretoken。

$.ajaxSetup({data: {csrfmiddlewaretoken: '{{ csrf_token }}' }});

2. 对于form表单提交数据,在表单内部加入{% csrf_token %}标签,会自动生成一个input标签

<form>{% csrf_token %}</form>

得到

<form><input name="csrfmiddlewaretoken" value="..." type="hidden"></form>

或者使用js添加:

$("#csrf_token").replaceWith("{% csrf_token %}");

3. 另外记录一下使用模板过滤器处理form.field的方法

$("#{{ field.name }}").replaceWith('{{ field|linebreaksbr }}');
$(".{{ field.name }}").text('{{ field.errors|striptags }}');
{{ value|linebreaksbr }}: "Joel\nis a slug" => "Joel<br>is a slug"
{{ value|striptags }}: "<b>Joel</b> <button>is</button> a <span>slug</span>" => "Joel is a slug".

以上这篇django-csrf使用和禁用方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python的Django框架的视图中使用Session的方法
Jul 23 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
Pytorch入门之mnist分类实例
Apr 14 Python
学生信息管理系统Python面向对象版
Jan 30 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
基于python3抓取pinpoint应用信息入库
Jan 08 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
在Sublime Editor中配置Python环境的详细教程
May 03 Python
Python新手学习函数默认参数设置
Jun 03 Python
Python Pandas常用函数方法总结
Jun 15 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
Mar 13 #Python
python爬虫实现获取下一页代码
Mar 13 #Python
Python3 利用face_recognition实现人脸识别的方法
Mar 13 #Python
在django中使用post方法时,需要增加csrftoken的例子
Mar 13 #Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
Mar 13 #Python
详解用Python进行时间序列预测的7种方法
Mar 13 #Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
Mar 13 #Python
You might like
PHP在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
使用MaxMind 根据IP地址对访问者定位
2006/10/09 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
php使用google地图应用实例
2014/12/31 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
2016/09/22 PHP
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
javascript 多浏览器 事件大全
2010/03/23 Javascript
JavaScript字符串String和Array操作的有趣方法
2012/12/18 Javascript
自己动手手写jQuery插件总结
2015/01/20 Javascript
分享9点个人认为比较重要的javascript 编程技巧
2015/04/27 Javascript
Jquery Mobile 自定义按钮图标
2015/11/18 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
2016/03/16 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
防止页面url缓存中ajax中post请求的处理方法
2017/10/10 Javascript
Node.js 中使用 async 函数的方法
2017/11/20 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
vue离开当前页面触发的函数代码
2020/09/01 Javascript
[01:38]DOTA2 2015国际邀请赛中国区预选赛 Showopen
2015/06/01 DOTA
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
[01:20:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第四场 8.26
2018/08/30 DOTA
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
python发送arp欺骗攻击代码分析
2014/01/16 Python
Python跳出多重循环的方法示例
2019/07/03 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
Order by的几种用法
2013/06/16 面试题
经理秘书岗位职责
2013/11/14 职场文书
致1500米运动员广播稿
2014/02/07 职场文书
青年文明号创建承诺
2014/03/31 职场文书
开学寄语大全
2014/04/08 职场文书
三八活动策划方案
2014/08/17 职场文书
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android