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

如何在Django REST Framework中仅对指定API视图方法禁用CSRF

在DRF中仅针对单个API方法禁用CSRF防护

嘿,刚好碰到过类似的需求!在Django REST Framework里要单独给某个API视图方法禁用CSRF防护,分几种场景给你说清楚:

1. 函数式API视图

如果你的API是用@api_view装饰的函数视图,直接把csrf_exempt装饰器放在最外层就行,确保它包裹住api_view的装饰:

from django.views.decorators.csrf import csrf_exempt
from rest_framework.decorators import api_view
from rest_framework.response import Response

@csrf_exempt
@api_view(['POST'])
def unprotected_post_api(request):
    # 这里写你的接口逻辑,比如处理第三方服务的回调
    return Response({"status": "success", "message": "该POST接口已禁用CSRF防护"})

2. 类视图(APIView子类)

如果是类视图,想要给特定的HTTP方法(比如POST、PUT)禁用CSRF,用method_decorator把csrf_exempt绑定到对应的方法上就好:

from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from rest_framework.views import APIView
from rest_framework.response import Response

class MixedProtectionView(APIView):
    # GET请求默认不受CSRF防护,这里正常处理
    def get(self, request):
        return Response({"message": "GET请求无需CSRF验证"})

    # 仅给POST方法禁用CSRF
    @method_decorator(csrf_exempt)
    def post(self, request):
        return Response({"message": "该POST接口已禁用CSRF防护"})

3. ViewSet中的自定义Action

如果用了ViewSet,想给某个自定义action禁用CSRF,同样结合method_decorator和@action装饰器:

from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from rest_framework import viewsets
from rest_framework.response import Response

class MyViewSet(viewsets.ViewSet):
    # 默认的list方法受CSRF防护(如果是session认证的话)
    def list(self, request):
        return Response({"message": "常规list接口受CSRF保护"})

    # 仅给这个自定义action禁用CSRF
    @method_decorator(csrf_exempt)
    @action(detail=False, methods=['post'])
    def external_webhook(self, request):
        # 处理第三方Webhook回调的逻辑
        return Response({"status": "webhook received"})

重要提醒

  • 只有当你的API是给无session的客户端(比如第三方服务、纯API调用的移动端)使用时,才需要禁用CSRF。如果是基于session的前端(比如Vue/React和Django同域),尽量不要随便禁用,CSRF防护是重要的安全措施。
  • DRF中,使用Token认证、JWT认证等无session的认证方式时,本来就不会触发CSRF验证,这时候不需要额外做什么。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:12:36