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

Django Webhook标记csrf_exempt仍返回403 Forbidden求助

解决Django Webhook接口POST返回403 Forbidden的问题

嘿,我立刻就发现了你的代码里的关键问题,另外也给你补充几个可能的排查方向:

1. 最直接的错误:父类名称写错了

你的视图类是MailView,但在dispatch方法里调用super()的时候却写了MailTrackingView——这会导致你覆盖的dispatch方法根本没有正确继承父类的逻辑,@csrf_exempt装饰器自然也就没生效!

修正后的views.py代码应该是这样:

from django.views.decorators.csrf import csrf_exempt
from django.views import View
from django.http import HttpResponse

class MailView(View):
    @csrf_exempt
    def dispatch(self, *args, **kwargs):
        # 这里要改成和类名一致的MailView
        return super(MailView, self).dispatch(*args, **kwargs)
    
    def post(self, request, *args, **kwargs):
        return HttpResponse(status=204)

2. 另一种更清晰的写法:用method_decorator装饰类

如果你觉得在dispatch上写装饰器有点麻烦,也可以直接给整个视图类加上csrf_exempt装饰,这样代码更直观:

from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
from django.views import View
from django.http import HttpResponse

@method_decorator(csrf_exempt, name='dispatch')
class MailView(View):
    def post(self, request, *args, **kwargs):
        return HttpResponse(status=204)

3. 排查中间件配置

如果上面的修正后还是有问题,去检查你的settings.py里的MIDDLEWARE配置:

  • 确保django.middleware.csrf.CsrfViewMiddleware确实存在(不过一般默认是有的)
  • 如果你在中间件里自定义了其他处理请求的逻辑,确认没有额外添加CSRF验证的规则

4. 确认请求的正确性

  • 确保你发送的确实是POST请求,而不是其他方法(比如GET)
  • 有些第三方Webhook工具可能会带特殊的请求头,你可以在post方法里先打印request.META看看请求的详细信息,确认没有被其他逻辑拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:32:14