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 字符串操作方法大全
Mar 11 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
python实现批量解析邮件并下载附件
Jun 19 Python
python 读取Linux服务器上的文件方法
Dec 27 Python
在Python运行时动态查看进程内部信息的方法
Feb 22 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
Jul 07 Python
django 微信网页授权认证api的步骤详解
Jul 30 Python
python控制台实现tab补全和清屏的例子
Aug 20 Python
python 检查数据中是否有缺失值,删除缺失值的方式
Dec 02 Python
Python爬虫之Spider类用法简单介绍
Aug 04 Python
使用Python拟合函数曲线
Apr 14 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
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
php中adodbzip类实例
2014/12/08 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
js动态创建上传表单通过iframe模拟Ajax实现无刷新
2014/02/20 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
JS烟花背景效果实现方法
2015/03/03 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
2016/06/17 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
很实用的js选项卡切换效果
2016/08/12 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
Python的Flask框架中@app.route的用法教程
2015/03/31 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
Python引用传值概念与用法实例小结
2017/10/07 Python
python+opencv轮廓检测代码解析
2018/01/05 Python
用python处理MS Word的实例讲解
2018/05/08 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
pandas数据拼接的实现示例
2020/04/16 Python
python time.strptime格式化实例详解
2021/02/03 Python
简历的自我评价范文
2014/02/04 职场文书
高中英语教学反思
2014/02/04 职场文书
2019年图书室自查报告范本
2019/10/12 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript