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 random模块常用方法
Nov 03 Python
CentOS6.5设置Django开发环境
Oct 13 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
关于Django外键赋值问题详解
Aug 13 Python
用Python写一段用户登录的程序代码
Apr 22 Python
基于数据归一化以及Python实现方式
Jul 11 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
Python的UTC时间转换讲解
Feb 26 Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
Python自动化操作实现图例绘制
Jul 09 Python
python 利用panda 实现列联表(交叉表)
Feb 06 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
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
PHP捕获Fatal error错误的方法
2014/06/11 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
javascript编程起步(第五课)
2007/01/10 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
微信小程序 教程之模块化
2016/10/17 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
2019/02/02 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
python 不关闭控制台的实现方法
2011/10/23 Python
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
python里大整数相乘相关技巧指南
2014/09/12 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Python定时器实例代码
2017/11/01 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
wxpython实现图书管理系统
2018/03/12 Python
Python对List中的元素排序的方法
2018/04/01 Python
python3写的简单本地文件上传服务器实例
2018/06/04 Python
设置python3为默认python的方法
2018/10/31 Python
python制作朋友圈九宫格图片
2019/11/03 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
办公室员工岗位工作职责
2014/03/10 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
学校青年志愿者活动总结
2015/05/06 职场文书
班级班风口号大全
2015/12/25 职场文书
高中数学教学反思范文
2016/02/18 职场文书
详解MySQL中的主键与事务
2021/05/27 MySQL