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

Django REST Framework中CreateModelMixin出现CSRF验证失败如何解决

问题原因

Django默认对所有POST请求开启CSRF(跨站请求伪造)防护校验,你使用Postman发起注册请求时未携带合法的CSRF令牌,因此触发403错误。

解决方案(任选其一即可让现有代码正常运行)

提示:CSRF豁免仅推荐在本地测试阶段使用,如果你的生产环境使用Session身份认证,请不要全局关闭CSRF校验。

方案1:给注册视图添加CSRF豁免(最快捷,适配Postman测试场景)

修改你的视图代码,导入装饰器后给类视图添加CSRF豁免标记,修改后代码如下:

from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
from rest_framework import generics, mixins
from .serializers import RegistrationSerializer

@method_decorator(csrf_exempt, name='dispatch')
class UserRegistration(mixins.CreateModelMixin, generics.GenericAPIView):
    serializer_class = RegistrationSerializer

    def post(self, request, *args, **kwargs):
        return super().create(request, *args, **kwargs)

方案2:Postman请求携带CSRF令牌(不关闭安全校验的选择)

  • 先用Postman发起一次GET请求,访问你的Django服务任意可正常返回的地址,从响应的Set-Cookie头中获取csrftoken对应的值
  • 发起注册POST请求时,添加两个请求参数:
    • 请求头新增X-CSRFToken字段,值为刚才获取的csrftoken
    • 请求的Cookie中添加csrftoken=刚才获取的csrftoken

方案3:调整DRF全局认证配置(适配纯API无session场景)

如果你的接口都是前后端分离的无状态API,不需要使用Session登录,可以修改settings.py中的DRF配置,移除SessionAuthentication即可默认关闭CSRF校验:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        # 注释或删除下面这行即可
        # 'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication', # 按需保留其他认证类
    ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:18:03