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使用nntp读取新闻组内容的方法
May 08 Python
Python爬取三国演义的实现方法
Sep 12 Python
python脚本实现验证码识别
Jun 07 Python
谈一谈基于python的面向对象编程基础
May 21 Python
java判断三位数的实例讲解
Jun 10 Python
详解python中eval函数的作用
Oct 22 Python
python时间与Unix时间戳相互转换方法详解
Feb 13 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
Feb 27 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
Nov 27 Python
python 实现图片裁剪小工具
Feb 02 Python
python实现的人脸识别打卡系统
May 08 Python
2021年最新用于图像处理的Python库总结
Jun 15 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
多数据表共用一个页的新闻发布
2006/10/09 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
php 数组字符串搜索array_search技巧
2016/07/05 PHP
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
2017/11/22 Javascript
Vue数据双向绑定原理及简单实现方法
2018/05/18 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
Python返回真假值(True or False)小技巧
2015/04/10 Python
python安装oracle扩展及数据库连接方法
2017/02/21 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
pytorch forward两个参数实例
2020/01/17 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
2016/05/09 HTML / CSS
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
面试后感谢信怎么写
2014/02/01 职场文书
2014年国培研修感言
2014/03/09 职场文书
借款担保书范文
2014/05/13 职场文书
贷款担保书范文
2014/05/13 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
2015年世界环境日演讲稿
2015/03/18 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python