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

使用Postman请求obtain_auth_token路由出现Django CSRF错误

问题原因

CSRF校验和接口返回的Auth Token是两套完全独立的机制,不存在需要提前持有Token才能请求接口的逻辑。报错是Django默认对所有POST请求启用CSRF校验,未携带合法CSRF凭证的请求会被直接拦截,和DRF的Token认证逻辑无关。

解决方案
  • 方案1:给Token获取接口添加CSRF豁免(最常用,适配API客户端调用场景)
    在项目的urls.py中用csrf_exempt装饰器包裹obtain_auth_token视图即可,示例代码:
from django.urls import path
from rest_framework.authtoken.views import obtain_auth_token
from django.views.decorators.csrf import csrf_exempt

urlpatterns = [
    # 其他路由...
    path('api-token-auth/', csrf_exempt(obtain_auth_token), name='api_token_auth'),
]
  • 方案2:移除全局DRF配置中的SessionAuthentication
    如果你的接口不需要支持浏览器端会话登录场景,可以直接在settings.py的DRF配置中删除SessionAuthentication,避免所有DRF视图默认触发CSRF校验:
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
        # 注释或删除下方的SessionAuthentication配置
        # 'rest_framework.authentication.SessionAuthentication',
    ]
}
  • 方案3:保留CSRF校验的场景下携带合法凭证
    如果接口需要给自家前端页面调用,必须保留CSRF校验,可以按以下规则发起请求:
    1. 先请求任意Django渲染的前端页面,从返回的Cookie中获取csrftoken值
    2. 发起POST请求获取Token时,在请求头中添加X-CSRFToken字段,值为上一步拿到的csrftoken
    3. Postman测试时会自动携带Cookie,只需手动添加对应请求头即可请求成功

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:36:07