zoukankan      html  css  js  c++  java
  • 使用Ajax (put delete ) django原生CBV 出现csrf token解决办法

    原因

    django原生CBV中对于 Ajax put 或 delete 请求进行封装时,会把请求数据放在 request.body里, 所以获取不到csrf token

    方式一: 关闭csrf 中间件

    简单粗暴

    方式二: 针对CBV视图跨过csrf认证

    先引入

    from django.views.decorators.csrf import csrf_exempt

    在视图中覆写父类的dispatch方法

    class Center(View):
    
        @csrf_exempt
        def dispatch(self, request, *args, **kwargs):
            return super(Center, self).dispatch(request, *args, **kwargs)

    直接在请求类型的方法上写入同样会出现csrf token,原因详情查看源码.

    获取请求数据

    from django.http import QueryDict

    class Foo(View):

      def put(self, request, *args, **wkargs)
        request_data = QueryDict(request.body) #对请求数据进行封装
        name = reuqest_data.get('name')

    方式三: 使用中间件对请求数据做更细粒度的划分

    没做. 写方式二的同时也想到了这个解决方法

  • 相关阅读:
    OCP-1Z0-053-V12.02-69题
    OCP-1Z0-053-V12.02-170题
    OCP-1Z0-053-V12.02-117题
    OCP-1Z0-053-V12.02-222题
    OCP-1Z0-053-V12.02-528题
    OCP-1Z0-053-V12.02-531题
    OCP-1Z0-053-V12.02-532题
    OCP-1Z0-053-V12.02-533题
    OCP-1Z0-053-V12.02-542题
    OCP-1Z0-053-V12.02-68题
  • 原文地址:https://www.cnblogs.com/erhao9767/p/10860116.html
Copyright © 2011-2022 走看看