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中函数的参数传递与可变长参数介绍
Jun 30 Python
python3抓取中文网页的方法
Jul 28 Python
matplotlib绘制动画代码示例
Jan 02 Python
django 使用 request 获取浏览器发送的参数示例代码
Jun 11 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
搞清楚 Python traceback的具体使用方法
May 13 Python
python flask框架实现传数据到js的方法分析
Jun 11 Python
Python对wav文件的重采样实例
Feb 25 Python
Django ModelForm操作及验证方式
Mar 30 Python
Python如何使用ConfigParser读取配置文件
Nov 12 Python
python statsmodel的使用
Dec 21 Python
python Scrapy框架原理解析
Jan 04 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中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
PHP加密技术的简单实现
2016/09/04 PHP
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
jquery三个关闭弹出层的小示例
2013/11/05 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
jquery zTree异步加载简单实例讲解
2016/02/25 Javascript
全屏js头像上传插件源码高清版
2016/03/29 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
Bootstrap Table使用整理(一)
2017/06/09 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
2020/02/15 Javascript
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
Pytorch to(device)用法
2020/01/08 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
SQL SERVER面试资料
2013/03/30 面试题
行政工作个人的自我评价
2014/02/13 职场文书
英语专业求职信
2014/07/08 职场文书
争先创优演讲稿
2014/09/15 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
Python中Permission denied的解决方案
2021/04/02 Python