【问题标题】:"CSRF Failed: CSRF token missing or incorrect." in Django Rest: UpdateModelMixin“CSRF 失败:CSRF 令牌丢失或不正确。”在 Django 休息中:UpdateModelMixin
【发布时间】:2017-01-29 16:24:29
【问题描述】:

我正在使用 Django rest 框架中的 UpdateModelMixin 来更新测试模型中的条目。

from django.utils.decorators import method_decorator
from django.views.decorators.cache import never_cache
from rest_framework import mixins, filters, viewsets
decorators = [never_cache]

@method_decorator(decorators, name='dispatch')
class TestViewSet(mixins.ListModelMixin,
                     mixins.RetrieveModelMixin,
                     mixins.UpdateModelMixin,
                     viewsets.GenericViewSet):

    queryset = Test.objects.all()
    serializer_class = TestSerializer
    filter_backends = [filters.DjangoFilterBackend]
    filter_class = TestFilter

当我尝试从测试模型更新对象时,出现以下错误 -

"detail": "CSRF 失败:CSRF 令牌丢失或不正确。"

谁能帮我解决这个问题?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    这是一个老问题,但值得回答,因为人们可能会来到此页面寻找答案。

    如果有csrf token问题,说明你使用的页面没有传递csrf token。既然你没有说你是如何访问数据的,我会假设它是 JavaScript,因为这很可能,所以我会给你一个如何修复它的例子,但这个过程只是为了得到来自现有 cookie 的 csrf 令牌,然后将其作为 cookie 传递给 API。

    这是一个来自 JavaScript 的 AJAX 调用示例,它传递一个 csrf 令牌:

    var data={ foo: "bar" };
    $.ajax({
        url: '/api/schedule/',
        type: "PATCH",
        data: JSON.stringify(data),
        beforeSend: function(xhr) {
            xhr.setRequestHeader('X-CSRFToken', Cookies.get('csrftoken'))
        },
        contentType: "application/json",
    });
    

    编辑: 这使用了 JavaScript cookie 库。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-25
    • 2020-09-19
    • 2021-07-14
    • 2014-02-26
    • 2021-10-01
    • 2016-12-31
    • 2021-11-13
    • 2012-04-20
    相关资源
    最近更新 更多