Django rest framework Django REST框架不带CSRF令牌,但带runserver\u plus

Django rest framework Django REST框架不带CSRF令牌,但带runserver\u plus,django-rest-framework,csrf,django-extensions,Django Rest Framework,Csrf,Django Extensions,使用django extensions的“runserver_plus”命令,我对CSRF令牌没有问题。令牌在cookie中定义,正如登录后服务器响应中所预期的那样,我在不安全的HTTP请求(POST、PUT等)期间使用它以HTTP头的形式将其发送回服务器 但由于某些原因,我不得不不再使用“runserver\u plus”并切换回传统的“runserver”命令。因为,我在登录后从服务器获得的CSRF令牌不再工作。我收到错误CSRF失败:CSRF令牌丢失或不正确。。代码中没有其他更改。只需从r

使用django extensions的“runserver_plus”命令,我对CSRF令牌没有问题。令牌在cookie中定义,正如登录后服务器响应中所预期的那样,我在不安全的HTTP请求(POST、PUT等)期间使用它以HTTP头的形式将其发送回服务器 但由于某些原因,我不得不不再使用“runserver\u plus”并切换回传统的“runserver”命令。因为,我在登录后从服务器获得的CSRF令牌不再工作。我收到错误
CSRF失败:CSRF令牌丢失或不正确。
。代码中没有其他更改。只需从runserver_plus切换到旧版runserver即可

我真的不明白为什么。这对我来说是个错误

当然,REST框架身份验证类是SessionAuthentication

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
    ),
}

有人知道吗?

我找到了原因。这是因为我在HTTP头名称中使用下划线来设置CSRFTOKEN:我在javascript中这样做:
header['X_CSRFTOKEN']=mytoken
。但由于生产服务器的标题名为runserver,所以运行服务器会这样做。runserver_plus不具有相同的行为,允许使用带下划线的http头名称。 将我的javascript替换为
标题['X-CSRFTOKEN']=mytoken
(用破折号代替下划线),使其正常工作