2014-02-03 13 views
5

Я делаю RESTful API с помощью Tastypie, и когда я пытаюсь POST/PUT/DELETE запрос он говорит:«detail»: «CSRF Failed: токен CSRF отсутствует или неверен».

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

Он отлично работает с GET. Я читал различные темы на SO, говоря:

  • удалить куки
  • или использовать @csrf_exempt
  • или использовать @method_decorator(csrf_exempt)

, но ни один из него работал.

Как пропустить эту ошибку?

views.py

class SnippetList(mixins.ListModelMixin, 
        mixins.CreateModelMixin, 
        generics.GenericAPIView): 
    queryset = Snippet.objects.all() 
    serializer_class = SnippetSerializer 

    def get(self, request, *args, **kwargs): 
     return self.list(request, *args, **kwargs) 


    def post(self, request, *args, **kwargs): 
     request._dont_enforce_csrf_checks = True 
     print request.DATA 
     return self.create(request, *args, **kwargs) 

serializer.py

from django.forms import widgets 
from rest_framework import serializers 
from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES 


class SnippetSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Snippet 
     fields = ('id', 'title', 'code', 'linenos', 'language', 'style') 

urls.py

from django.conf.urls import patterns, url 
from rest_framework.urlpatterns import format_suffix_patterns 
from snippets import views 

urlpatterns = patterns('', 
    url(r'^snippets/$', views.SnippetList.as_view()), 
    url(r'^snippets/(?P<pk>[0-9]+)/$', views.SnippetDetail.as_view()), 
) 

urlpatterns = format_suffix_patterns(urlpatterns) 
+1

Вы пробовали: [csrfexemptmixin] (Http: // Джанго -braces.readthedocs.org/en/latest/form.html#csrfexemptmixin)? – mariodev

+0

Что такое модуль 'braces'? – PythonEnthusiast

+0

Я установил модуль 'braces' из https://github.com/brack3t/django-braces и повторно выполнил запрос POST, и он по-прежнему дает мне ту же ошибку. – PythonEnthusiast

ответ

0

Изменить rest_framework по умолчанию Допуст Ионы в AllowAny в settings.py

REST_FRAMEWORK = { 
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.AllowAny',), 
... 
} 
+1

Dont's работает для меня. –

+7

У меня 'DEFAULT_PERMISSION_CLASSES' установлен' rest_framework.permissions.IsAuthenticated', потому что я хочу разрешить зарегистрированным пользователям доступ к API. Я ищу другой способ исправить эту вещь CSRF. – nnyby

+0

то же самое с последним комментарием –

0

Чтобы отключить проверку CSRF при использовании Django REST API-интерфейсы, попробуйте добавить их к своему settings.py

REST_FRAMEWORK = { 
    'DEFAULT_AUTHENTICATION_CLASSES': (
     'rest_framework.authentication.BasicAuthentication', 
    ) 
} 
Смежные вопросы