2016-09-21 30 views
0

私は、Django restフレームワークのUpdateModelMixinを使って、Testモデルのエントリを更新しています。「CSRF失敗: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であると想定しています。その可能性が高いので、ここで修正する方法の例を挙げますが、既存のCookieのcsrfトークンをクッキーとしてAPIに渡します。ここで

CSRFトークンを渡すJavaScriptから例AJAX呼び出しです:これはJavaScriptのクッキーのライブラリを使用しています :

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。

+0

クッキーが定義されていません。私は完全にhtmlのnoobです。どこからクッキーを入手しますか? –

+1

申し訳ありません。このコードにJavaScript Cookieライブラリを含める必要があるとは言いませんでした。 –

+0

それをしました。ありがとう - https://github.com/js-cookie/js-cookie/blob/latest/src/js.cookie.js –

関連する問題