2013-11-11 5 views
7

Как отключить csrf в modelviewset django-rest-framework?Как отключить csrf в modelviewset django-rest-framework?

Я буду использовать viewsets.ModelViewSet (http://django-rest-framework.org/api-guide/viewsets.html#modelviewset) django-rest-framework.

И мое приложение - сервер api. Поэтому мне не нужно использовать csrf.

Но я не знаю, как отключить csrf.

Просьба привести пример!

ответ

2

CSRF является только если вы используете SessionAuthentication. Если вы используете одну из других форм аутентификации (например, TokenAuthentication), тогда это не потребуется.

+0

Я использую это в своем представлении: 'authentication_classes = (SessionAuthentication, TokenAuthentication)', но я все еще получаю ошибку csrf при использовании заголовка Token –

2

Вам нужно обернуть способ доставки ModelViewSet с csrf_exempt:

from django.utils.decorators import method_decorator 
from django.views.decorators.csrf import csrf_exempt 

class MyModelViewSet(viewsets.ModelViewSet): 
    @method_decorator(csrf_exempt) 
    def dispatch(self, *args, **kwargs): 
     return super(MyModelViewSet, self).dispatch(*args, **kwargs) 

или вы можете достичь того же эффекта, обернув вид в urls.py:

url(r'^snippets/$', csrf_exempt(snippet_list), name='snippet-list'), 
url(r'^snippets/(?P<pk>[0-9]+)/$', csrf_exempt(snippet_detail), name='snippet-detail'), 
+4

Вы действительно пробовали это в сочетании с SessionAuthentication? У меня есть, и я почти уверен, что промежуточное ПО аутентификации DRF полностью игнорирует любой такой декоратор. – paulmelnikow

0

Также убедитесь, что api-auth не включен в ваши urlpatterns.

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

  • Нет связанных вопросов^_^