2016-09-21 7 views
0

Я использую UpdateModelMixin из рамки отдыха Django для обновления записей из тестовой модели.«CSRF Failed: токен CSRF отсутствует или неверен». в 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 

При попытке обновить объект из тестовой модели Это дает следующее сообщение об ошибке -

«деталь»: «CSRF Ошибка: CSRF маркер отсутствует или неправильно.»

Может ли кто-нибудь помочь мне решить эту проблему?

ответ

4

Это старый вопрос, но он заслуживает ответа, так как люди могут прийти на эту страницу в поисках одного.

Если проблема с токеном csrf, это означает, что страница, которую вы используете, не передает токен csrf. Поскольку вы не говорите, как вы обращаетесь к данным, я собираюсь предположить, что это JavaScript, поскольку это, скорее всего, так, я приведу вам пример того, как его исправить, но процесс просто получить токен csrf из существующего файла cookie, а затем передать его в качестве файла cookie для API.

Вот пример AJAX вызова из JavaScript, который проходит маркер 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", 
}); 

EDIT: Это использует библиотеку печенья JavaScript.

+0

Cookies не определены. Я полностью ном в html. Откуда я получаю файлы cookie. –

+1

Извините. Я не упомянул, что для этого кода вы должны включить библиотеку cookie JavaScript. –

+0

Сделал это. Спасибо - https://github.com/js-cookie/js-cookie/blob/latest/src/js.cookie.js –

Смежные вопросы