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 相关文章推荐
wxpython中利用线程防止假死的实现方法
Aug 11 Python
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
May 16 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
May 03 Python
pandas的连接函数concat()函数的具体使用方法
Jul 09 Python
django中使用事务及接入支付宝支付功能
Sep 15 Python
Python字典的概念及常见应用实例详解
Oct 30 Python
在Django下创建项目以及设置settings.py教程
Dec 03 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
Jan 10 Python
python 读取二进制 显示图片案例
Apr 24 Python
Python3爬虫关于识别点触点选验证码的实例讲解
Jul 30 Python
python搜索算法原理及实例讲解
Nov 18 Python
anaconda python3.8安装后降级
Jun 11 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
解析thinkphp中的导入文件标签
2013/06/20 PHP
实用的简单PHP分页集合包括使用方法
2013/10/21 PHP
PHP 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
PHP解析html类库simple_html_dom的转码bug
2014/05/22 PHP
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
javascript将list转换成树状结构的实例
2017/09/08 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
ES6的解构赋值实例详解
2019/05/06 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
Python中用于计算对数的log()方法
2015/05/15 Python
各个系统下的Python解释器相关安装方法
2015/10/12 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
详解关于Django中ORM数据库迁移的配置
2018/10/08 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
python2.7的flask框架之引用js&amp;css等静态文件的实现方法
2019/08/22 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
Lookfantastic意大利官网:英国知名美妆购物网站
2019/05/31 全球购物
法院授权委托书范文
2014/08/02 职场文书
苏州园林导游词
2015/02/03 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
总结Pyinstaller打包的高级用法
2021/06/28 Python