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读取ini文件、操作mysql、发送邮件实例
Jan 01 Python
用python 制作图片转pdf工具
Jan 30 Python
举例讲解Python中的迭代器、生成器与列表解析用法
Mar 20 Python
python 编程之twisted详解及简单实例
Jan 28 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
python 用lambda函数替换for循环的方法
Jun 09 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
python找出完数的方法
Nov 12 Python
pandas中的series数据类型详解
Jul 06 Python
python设计微型小说网站(基于Django+Bootstrap框架)
Jul 08 Python
Python 模拟动态产生字母验证码图片功能
Dec 24 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 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
织梦模板标记简介
2007/03/11 PHP
部署PHP项目应该注意的几点事项分享
2013/12/20 PHP
php实现curl模拟ftp上传的方法
2015/07/29 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
PHP简单实现二维数组赋值与遍历功能示例
2017/10/19 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
Javascript 函数中的参数使用分析
2010/03/27 Javascript
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
Seajs源码详解分析
2019/04/02 Javascript
Vue 进阶之路(三)
2019/04/18 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
django实现用户登陆功能详解
2017/12/11 Python
python机器学习实战之树回归详解
2017/12/20 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
Python爬虫获取图片并下载保存至本地的实例
2018/06/01 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
Python中按键来获取指定的值
2019/03/02 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
美国专注于健康商品的网站:eVitamins
2017/01/23 全球购物
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
欧尚俄罗斯网上超市:Auchan俄罗斯
2018/05/03 全球购物
自我评价格式
2014/01/06 职场文书
父亲的菜园教学反思
2014/02/13 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
2014年会策划方案
2014/05/11 职场文书
党的群众路线教育实践活动个人承诺书
2014/05/22 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
文明单位申报材料
2014/12/23 职场文书
2016年教师新年寄语
2015/08/18 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技