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 开发Activex组件方法
Nov 08 Python
测试、预发布后用python检测网页是否有日常链接
Jun 03 Python
Python中的并发编程实例
Jul 07 Python
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
python安装oracle扩展及数据库连接方法
Feb 21 Python
numpy自动生成数组详解
Dec 15 Python
如何通过50行Python代码获取公众号全部文章
Jul 12 Python
Python实现字符串中某个字母的替代功能
Oct 21 Python
python 实现矩阵按对角线打印
Nov 29 Python
python+selenium+PhantomJS抓取网页动态加载内容
Feb 25 Python
浅析关于Keras的安装(pycharm)和初步理解
Oct 23 Python
python如何用matplotlib创建三维图表
Jan 26 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
第十三节 对象串行化 [13]
2006/10/09 PHP
怎样在php中使用PDF文档功能
2006/10/09 PHP
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
php数组编码转换示例详解
2014/03/11 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
JS模拟面向对象全解(二、类型与赋值)
2011/07/13 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
JQ实现新浪游戏首页幻灯片
2015/07/29 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
2016/03/07 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
2016/09/23 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
JavaScript DOM元素常见操作详解【添加、删除、修改等】
2018/05/09 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
element-ui tree结构实现增删改自定义功能代码
2020/08/31 Javascript
[02:39]DOTA2国际邀请赛助威团西雅图第一天
2013/08/08 DOTA
python mysqldb连接数据库
2009/03/16 Python
easy_install python包安装管理工具介绍
2013/02/10 Python
Python获取系统默认字符编码的方法
2015/06/04 Python
python 的列表遍历删除实现代码
2020/04/12 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
Python实现按特定格式对文件进行读写的方法示例
2017/11/30 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
印度最大的网上花店:Ferns N Petals(鲜花、礼品和蛋糕)
2017/10/16 全球购物
静态变量和实例变量的区别
2015/07/07 面试题
办理退休介绍信
2014/01/09 职场文书
初一英语教学反思
2014/01/11 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
2016基督教会圣诞节开幕词
2016/03/04 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
蓝天保卫战收官在即 :15行业将开展环保分级评价
2019/07/19 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python
MySQL中一条update语句是如何执行的
2022/03/16 MySQL