我正在使用来自Django rest框架的UpdateModelMixin来更新Test模型中的条目。
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令牌丢失或不正确。”
谁能帮我解决这个问题?
这是一个古老的问题,但值得回答,因为人们可能会在此页面上寻找一个问题。
如果存在csrf令牌问题,则表示您使用的页面未传递csrf令牌。由于您没有说明如何访问数据,因此我将假定它是JavaScript,因为这很有可能,因此,我将向您提供一个示例,说明如何在其中进行修复,但是过程仅是为了获取数据。现有cookie中的csrf令牌,然后将其作为cookie传递给API。
这是来自JavaScript的传递csrf令牌的示例AJAX调用:
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库。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句