9

如何在 django-rest-framework 的模型视图集中取消设置 csrf?

我将使用 django-rest-framework 的 viewsets.ModelViewSet( http://django-rest-framework.org/api-guide/viewsets.html#modelviewset )。

我的应用程序是 api 服务器。所以我不需要使用csrf。

但我不知道如何取消设置 csrf。

请给我一个例子!

4

3 回答 3

3

仅当您使用 SessionAuthentication 时才强制执行 CSRF。如果您使用的是另一种形式的身份验证(例如 TokenAuthentication),则不需要。

于 2013-11-11T11:09:32.697 回答
2

您需要用csrf_exempt包装 ModelViewSet 的调度方法:

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'),
于 2013-11-11T08:46:52.590 回答
0

还要确保您的 urlpatterns 中不包含 api-auth。

于 2014-03-04T21:27:12.647 回答