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实现通过shelve修改对象实例
Sep 26 Python
python获取当前运行函数名称的方法实例代码
Apr 06 Python
Python装饰器用法实例总结
Feb 07 Python
pandas string转dataframe的方法
Apr 11 Python
对Python3 goto 语句的使用方法详解
Feb 16 Python
详解python算法之冒泡排序
Mar 05 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
Dec 19 Python
pytorch 数据处理:定义自己的数据集合实例
Dec 31 Python
Python参数传递实现过程及原理详解
May 14 Python
Python新手如何进行闭包时绑定变量操作
May 29 Python
如何利用Matlab制作一款真正的拼图小游戏
May 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
php实现的PDO异常处理操作分析
2018/12/27 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
JavaScript面象对象设计
2008/04/28 Javascript
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
javascript OFFICE控件测试代码
2009/12/08 Javascript
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
JS小游戏之宇宙战机源码详解
2014/09/25 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
通用无限极下拉菜单的实现代码
2016/05/31 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
layer弹出层中H5播放器全屏出错的解决方法
2017/02/21 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
详解jquery和vue对比
2019/04/16 jQuery
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
使用js实现单链解决前端队列问题的方法
2020/02/03 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
使用Protocol Buffers的C语言拓展提速Python程序的示例
2015/04/16 Python
python自动zip压缩目录的方法
2015/06/28 Python
python开发之for循环操作实例详解
2015/11/12 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
Python的numpy库下的几个小函数的用法(小结)
2019/07/12 Python
python urllib爬虫模块使用解析
2019/09/05 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
Clarks西班牙官方在线商店:clarks鞋
2019/05/03 全球购物
.NET remoting的两种通道是什么
2016/05/31 面试题
实习自我鉴定模板
2013/09/28 职场文书
搞笑获奖感言
2014/01/30 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
合作意向书范本
2019/04/17 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
python - asyncio异步编程
2021/04/06 Python
Python import模块的缓存问题解决方案
2021/06/02 Python