Django使用中间键实现csrf认证详解

 更新时间:2019年07月22日 09:41:02   作者:Crazymagic  
这篇文章主要介绍了Django使用中间键实现csrf认证详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Django中的csrf认证实现的原理

调用 process_view 方法

检查视图是否被 @csrf_exempt (免除csrf认证)

- 去请求体或cookie中获取token

情况一(全站使用csrf认证,局部不想使用csrf认证)

MIDDLEWARE = [
            'django.middleware.security.SecurityMiddleware',
            'django.contrib.sessions.middleware.SessionMiddleware',
            'django.middleware.common.CommonMiddleware',
            'django.middleware.csrf.CsrfViewMiddleware', # 全站使用csrf认证
            'django.contrib.auth.middleware.AuthenticationMiddleware',
            'django.contrib.messages.middleware.MessageMiddleware',
            'django.middleware.clickjacking.XFrameOptionsMiddleware',
          ]

如果我想让某个请求不通过csrf认证可以这样做

from django.views.decorators.csrf import csrf_exempt
@csrf_exempt # 该函数无需认证
def users(request):
  user_list = ['alex','oldboy']
  return HttpResponse(json.dumps((user_list)))

情况二(全站不使用csrf认证,局部想使用csrf认证)

MIDDLEWARE = [
  'django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  #'django.middleware.csrf.CsrfViewMiddleware', # 全站不使用csrf认证
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

如果我想让某个请求使用csrf认证可以这样做

from django.views.decorators.csrf import csrf_exempt,csrf_protect
@csrf_protect # 该函数需认证
def users(request):
  user_list = ['alex','oldboy']
  return HttpResponse(json.dumps((user_list)))

CBV小知识,csrf时需要使用

- @method_decorator(csrf_exempt)

- 在dispatch方法中(单独方法无效)

方式一

from django.views.decorators.csrf import csrf_exempt,csrf_protect
from django.utils.decorators import method_decorator
class StudentsView(View):
  
  @method_decorator(csrf_exempt)
  def dispatch(self, request, *args, **kwargs):
    return super(StudentsView,self).dispatch(request, *args, **kwargs)

  def get(self,request,*args,**kwargs):
    print('get方法')
    return HttpResponse('GET')

  def post(self, request, *args, **kwargs):
    return HttpResponse('POST')

  def put(self, request, *args, **kwargs):
    return HttpResponse('PUT')

  def delete(self, request, *args, **kwargs):
    return HttpResponse('DELETE')

方式二

from django.views.decorators.csrf import csrf_exempt,csrf_protect
from django.utils.decorators import method_decorator

@method_decorator(csrf_exempt,name='dispatch')
class StudentsView(View):

  def get(self,request,*args,**kwargs):
    print('get方法')
    return HttpResponse('GET')

  def post(self, request, *args, **kwargs):
    return HttpResponse('POST')

  def put(self, request, *args, **kwargs):
    return HttpResponse('PUT')

  def delete(self, request, *args, **kwargs):
    return HttpResponse('DELETE')

总结:

  • - 本质,基于反射来实现
  • - 流程:路由,view,dispatch(反射)
  • - 取消csrf认证(装饰器要加到dispatch方法上且method_decorator装饰)

扩展:

  • - csrf
    • - 基于中间件的process_view方法
    • - 装饰器给单独函数进行设置(认证或无需认证)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python Json读写操作之JsonPath用法详解

    Python Json读写操作之JsonPath用法详解

    JSONPath是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括Javascript、Python、PHP和Java,这篇文章主要介绍了Python Json读写操作之JsonPath用法详解,需要的朋友可以参考下
    2023-04-04
  • python进阶教程之文本文件的读取和写入

    python进阶教程之文本文件的读取和写入

    这篇文章主要介绍了python进阶教程之文本文件的读取和写入,本文讲解的是最基本的文件读取和写入功能,需要的朋友可以参考下
    2014-08-08
  • 关于Python解包知识点总结

    关于Python解包知识点总结

    在本篇文章里小编给各位分享的是关于Python解包知识点总结,有兴趣的朋友们可以学习参考下。
    2020-05-05
  • python matplotlib库的基本使用

    python matplotlib库的基本使用

    这篇文章主要介绍了python matplotlib库的基本使用,帮助大家绘制图表,进行数据可视化分析,感兴趣的朋友可以了解下
    2020-09-09
  • Python+selenium实现截图图片并保存截取的图片

    Python+selenium实现截图图片并保存截取的图片

    这篇文章介绍如何利用Selenium的方法进行截图并保存截取的图片,需要的朋友参考下本文
    2018-01-01
  • Python聊天室程序(基础版)

    Python聊天室程序(基础版)

    这篇文章主要为大家详细介绍了Python聊天室程序的基础版,包含客户端和服务器端两部分,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Python实现将doc转化pdf格式文档的方法

    Python实现将doc转化pdf格式文档的方法

    这篇文章主要介绍了Python实现将doc转化pdf格式文档的方法,结合实例形式分析了Python实现doc格式文件读取及转换pdf格式文件的操作技巧,以及php调用py文件的具体实现方法,需要的朋友可以参考下
    2018-01-01
  • Python实现将sqlite数据库导出转成Excel(xls)表的方法

    Python实现将sqlite数据库导出转成Excel(xls)表的方法

    这篇文章主要介绍了Python实现将sqlite数据库导出转成Excel(xls)表的方法,结合实例形式分析了Python针对sqlite数据库的连接、读取及使用写操作包(xlwt)生成Excel表的相关实现技巧,需要的朋友可以参考下
    2017-07-07
  • Django框架自定义session处理操作示例

    Django框架自定义session处理操作示例

    这篇文章主要介绍了Django框架自定义session处理操作,结合实例形式分析了Django框架session操作的原理以及基于session的登陆、验证等相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • 详解Python3除法之真除法、截断除法和下取整对比

    详解Python3除法之真除法、截断除法和下取整对比

    这篇文章主要介绍了详解Python3除法之真除法、截断除法和下取整对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05

最新评论