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专用方法与迭代机制实例分析
Sep 15 Python
Python中用Decorator来简化元编程的教程
Apr 13 Python
使用Python脚本来控制Windows Azure的简单教程
Apr 16 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
Apr 21 Python
python实现自动获取IP并发送到邮箱
Dec 26 Python
对Python+opencv将图片生成视频的实例详解
Jan 08 Python
pow在python中的含义及用法
Jul 11 Python
Django框架视图介绍与使用详解
Jul 18 Python
简单了解django orm中介模型
Jul 30 Python
Python流程控制 while循环实现解析
Sep 02 Python
PyQt5中多线程模块QThread使用方法的实现
Jan 31 Python
pandas求平均数和中位数的方法实例
Aug 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 base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
2013/07/01 PHP
thinkphp浏览历史功能实现方法
2014/10/29 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
16个最流行的JavaScript框架[推荐]
2011/05/29 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
jQuery树控件zTree使用方法详解(一)
2017/02/28 Javascript
webpack构建的详细流程探底
2018/01/08 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
JS中多层次排序算法的实现代码
2021/01/06 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
Python 3.x 连接数据库示例(pymysql 方式)
2017/01/19 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
OpenCV 边缘检测
2019/07/10 Python
python安装后的目录在哪里
2020/06/21 Python
Python实现手绘图效果实例分享
2020/07/22 Python
python import 上级目录的导入
2020/11/03 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
Shopee越南:东南亚与台湾电商平台
2019/02/03 全球购物
解释一下Windows的消息机制
2014/01/30 面试题
大学本科毕业生求职信范文
2013/12/18 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
银行实习推荐信
2015/03/27 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电