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实现拼接多张图片的方法
Dec 01 Python
在Python的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
Python实现迭代时使用索引的方法示例
Jun 05 Python
Python实现模拟浏览器请求及会话保持操作示例
Jul 30 Python
python去除拼音声调字母,替换为字母的方法
Nov 28 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
Python OpenCV中的resize()函数的使用
Jun 20 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
python pandas利用fillna方法实现部分自动填充功能
Mar 16 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
Python实现文件压缩和解压的示例代码
Aug 12 Python
Prometheus开发中间件Exporter过程详解
Nov 30 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
JQUERY CHECKBOX全选,取消全选,反选方法三
2008/08/30 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
2016/07/22 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python的迭代器与生成器实例详解
2014/07/16 Python
Python中正则表达式的详细教程
2015/04/30 Python
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
python广度优先搜索得到两点间最短路径
2019/01/17 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
Python AutoCAD 系统设置的实现方法
2020/04/01 Python
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
教师节宣传方案
2014/05/23 职场文书
军训拉歌口号
2014/06/13 职场文书
校车安全责任书
2014/08/25 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
2014年班级工作总结
2014/11/14 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
python for循环赋值问题
2021/06/03 Python