django 取消csrf限制的实例


Posted in Python onMarch 13, 2020

# 导入包

from django.views.decorators.csrf import csrf_exempt

# 使用装饰器即可避免csrf限制

@csrf_exempt
def add_bookshelf(request):
  user_id = request.POST.get('user_id')
  print(user_id)
  return HttpResponse('123')

补充知识:Django 前后端分离跨域AJAX获取csrftoken及获取cookie时遇到的问题

获取CSRFTOKEN

Django的中间件'django.middleware.csrf.CsrfViewMiddleware'会将csrftoken的值设置在cookie中。在前后端不分离的项目中,若需要在AJAX使用csrftoken的值则可在js脚本中通过document.cookie直接获取cookie的值(也可以通过其他更快捷的轮子如js-cookie)。

在前后端分离的项目中(已配置django-cors-headers),无法直接使用js从cookie中获取csrfToken的值(浏览器的同源策略),即使已经成功设置了csrfToken的cookie值

django 取消csrf限制的实例

解决方法

在中间件中引入

corsheaders.middleware.CorsPostCsrfMiddleware

'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'corsheaders.middleware.CorsPostCsrfMiddleware',

有些博客中使用该中间件替代django.middleware.csrf.CsrfViewMiddleware是不可行的,因为该中间件并没有期望中csrf校验的功能,下面为该中间件的源代码。

class CorsPostCsrfMiddleware(MiddlewareMixin):

  def _https_referer_replace_reverse(self, request):
    """
    Put the HTTP_REFERER back to its original value and delete the
    temporary storage
    """
    if conf.CORS_REPLACE_HTTPS_REFERER and 'ORIGINAL_HTTP_REFERER' in request.META:
      http_referer = request.META['ORIGINAL_HTTP_REFERER']
      request.META['HTTP_REFERER'] = http_referer
      del request.META['ORIGINAL_HTTP_REFERER']

  def process_request(self, request):
    self._https_referer_replace_reverse(request)
    return None

  def process_view(self, request, callback, callback_args, callback_kwargs):
    self._https_referer_replace_reverse(request)
    return None

以上这篇django 取消csrf限制的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单分析Python中用fork()函数生成的子进程
May 04 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
Mar 20 Python
Python 转义字符详细介绍
Mar 21 Python
初探TensorFLow从文件读取图片的四种方式
Feb 06 Python
python+opencv识别图片中的圆形
Mar 25 Python
分享Pycharm中一些不为人知的技巧
Apr 03 Python
Python后台开发Django会话控制的实现
Apr 15 Python
利用pyinstaller打包exe文件的基本教程
May 02 Python
Python 中list ,set,dict的大规模查找效率对比详解
Oct 11 Python
Python IDE环境之 新版Pycharm安装详细教程
Mar 05 Python
Python SQLAlchemy库的使用方法
Oct 13 Python
一篇文章弄懂Python中的内建函数
Aug 07 Python
django-csrf使用和禁用方式
Mar 13 #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
You might like
php下使用curl模拟用户登陆的代码
2010/09/10 PHP
php 调试利器debug_print_backtrace()
2012/07/23 PHP
php简单实现数组分页的方法
2016/04/30 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
2018/04/27 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
javascript 解析url的search方法
2010/02/09 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
javascript 小数乘法结果错误的处理方法
2016/07/28 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
javascript实现二叉树遍历的代码
2017/06/08 Javascript
详解NODEJS的http实现
2018/01/04 NodeJs
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
python文字转语音的实例代码分析
2019/11/12 Python
alice McCALL官网:澳大利亚时尚品牌
2020/11/16 全球购物
Linux机考试题
2015/10/16 面试题
医药工作岗位求职信分享
2013/12/31 职场文书
传播学专业毕业生自荐书
2014/07/01 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
干部作风建设工作总结
2014/10/29 职场文书
2014年德育工作总结
2014/11/20 职场文书
导游词之贵州织金洞
2019/10/12 职场文书
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android