You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django类视图中csrf_exempt失效,CSRF验证失败如何解决?

解决Django类视图CSRF验证失败的方法

以下是几种可行的解决方案:

  • 修正装饰器的应用方式
    直接装饰post方法有时会因为Django类视图的调度机制导致装饰器未生效,你可以尝试两种方式:

    1. 装饰dispatch方法(所有请求都会跳过CSRF验证):
      from django.utils.decorators import method_decorator
      from django.views.decorators.csrf import csrf_exempt
      from django.views import View
      from django.http import HttpResponse
      
      class ErrorReportView(View):
          @method_decorator(csrf_exempt)
          def dispatch(self, request, *args, **kwargs):
              return super().dispatch(request, *args, **kwargs)
      
          def get(self, request, *args, **kwargs):
              return HttpResponse('Hello, World!')
      
          def post(self, request, *args, **kwargs):
              return HttpResponse('Hello, World!')
      
    2. 直接装饰类并指定目标方法:
      from django.utils.decorators import method_decorator
      from django.views.decorators.csrf import csrf_exempt
      from django.views import View
      from django.http import HttpResponse
      
      @method_decorator(csrf_exempt, name='post')
      class ErrorReportView(View):
          def get(self, request, *args, **kwargs):
              return HttpResponse('Hello, World!')
      
          def post(self, request, *args, **kwargs):
              return HttpResponse('Hello, World!')
      
  • 携带CSRF令牌发起请求(不禁用CSRF验证)
    如果你不想禁用CSRF保护,可以在Postman中按以下步骤操作:

    1. 先发送GET请求到该视图,从响应的Cookie中提取csrftoken的值;
    2. 在POST请求的请求头中添加X-CSRFToken: [提取到的令牌值],或者在表单参数中加入csrfmiddlewaretoken字段并赋值为令牌值。
  • 检查CSRF中间件配置
    确认django.middleware.csrf.CsrfViewMiddleware存在于项目的settings.py的MIDDLEWARE列表中——如果该中间件被移除,不会触发CSRF验证,但当前问题是验证失败,所以中间件大概率是存在的,重点还是确保装饰器正确生效。

内容的提问来源于stack exchange,提问作者Trts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:42:18