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中sets模块的用法实例
Sep 30 Python
用Python实现服务器中只重载被修改的进程的方法
Apr 30 Python
python访问mysql数据库的实现方法(2则示例)
Jan 06 Python
Python OpenCV实现图片上输出中文
Jan 22 Python
python 获取文件下所有文件或目录os.walk()的实例
Apr 23 Python
Sanic框架请求与响应实例分析
Jul 16 Python
如何利用python制作时间戳转换工具详解
Sep 12 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
python中的subprocess.Popen()使用详解
Dec 25 Python
Python中如何将一个类方法变为多个方法
Dec 30 Python
使用python求斐波那契数列中第n个数的值示例代码
Jul 26 Python
详解python tkinter 图片插入问题
Sep 03 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
深入了解php4(2)--重访过去
2006/10/09 PHP
html中select语句读取mysql表中内容
2006/10/09 PHP
PHP 反向排序和随机排序代码
2010/06/30 PHP
php的dl函数用法实例
2014/11/06 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
php中namespace use用法实例分析
2016/01/22 PHP
zend framework重定向方法小结
2016/05/28 PHP
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
利用JS实现点击按钮后图片自动切换的简单方法
2016/10/24 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
基于 Vue 的树形选择组件的示例代码
2017/08/18 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
2020/10/14 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
python将pandas datarame保存为txt文件的实例
2019/02/12 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
18个Python脚本可加速你的编码速度(提示和技巧)
2019/10/17 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
分享unittest单元测试框架中几种常用的用例加载方法
2020/12/02 Python
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
你在项目中用到了xml技术的哪些方面?如何实现的?
2014/01/26 面试题
学生档案自我鉴定
2013/10/07 职场文书
农民工创业典型事迹
2014/01/25 职场文书
服务标兵事迹材料
2014/05/04 职场文书
高三霸气励志标语
2014/06/24 职场文书
2015年社会治安综合治理工作总结
2015/04/10 职场文书
银行催款通知书
2015/04/17 职场文书
公证书
2019/04/17 职场文书
Golang实现可重入锁的示例代码
2022/05/25 Golang