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

Django API POST请求遇CSRF缺失错误,如何无需CSRF验证提交?

解决Django API接收JS POST请求时的CSRF缺失错误

核心原因

Postman能正常提交是因为它不会自动携带Django会话相关的Cookie,而Django的CSRF中间件仅在请求包含会话Cookie时才会强制验证CSRF Token;浏览器的fetch请求默认会携带Cookie,因此触发了CSRF校验,导致报错。

解决方案(无需CSRF验证的场景)

1. 给目标视图添加CSRF豁免装饰器(推荐)

这是最安全的方式,仅对需要的API关闭CSRF验证,不影响其他视图的安全性。

若使用Django REST Framework类视图:

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

@method_decorator(csrf_exempt, name='dispatch')
class PostCustomerView(APIView):
    def post(self, request):
        # 你的业务处理逻辑
        return Response({"status": "success"})

若使用普通Django函数视图:

from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse

@csrf_exempt
def post_customer(request):
    if request.method == 'POST':
        # 解析请求数据并处理
        return JsonResponse({"status": "success"})

2. 全局关闭CSRF中间件(不推荐)

仅适用于纯API服务、无用户会话交互的场景,会降低整个项目的安全性。在项目的settings.py中注释掉CSRF中间件:

MIDDLEWARE = [
    # 'django.middleware.csrf.CsrfViewMiddleware',  # 注释这一行
    # 其他中间件...
]

额外说明

如果后续需要开启CSRF验证,也可以在JS的fetch请求中携带CSRF Token:

  1. 从页面的Cookie中获取csrftoken值
  2. 在请求头中添加X-CSRFToken: 你的token值

但根据你的需求,优先使用前两种豁免CSRF验证的方案即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:10:34