在 api 视图方法上禁用 CSRF(django rest 框架)

Posted

技术标签:

【中文标题】在 api 视图方法上禁用 CSRF(django rest 框架)【英文标题】:Disable CSRF on api view method(django rest framework) 【发布时间】:2018-08-12 08:27:59 【问题描述】:

我有这样的api方法:

@api_view(['POST'])
@login_required
def get_posts(request):
    # ...

如何在此方法上禁用 CSRF?

【问题讨论】:

【参考方案1】:

对于基于函数的视图,您通常可以使用装饰器csrf_exempt

from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse

@csrf_exempt
def my_view(request):
    return HttpResponse('Hello world')

更新DRF 可能有一个例外。看看here。

【讨论】:

为什么要从示例中删除 @api_view()? 因为api_view 仅适用于 DRF。我想解释一下装饰器csrf_exempt 不是特定于 DRF 的。因此,我更新了答案并将其链接到另一个 SO 问题,该问题更详细地解释了另一个相关的警告(身份验证)。

以上是关于在 api 视图方法上禁用 CSRF(django rest 框架)的主要内容,如果未能解决你的问题,请参考以下文章

Django/Django Rest 框架 - 禁用 CSRF

无法禁用 Django CSRF 框架并且正在破坏我的网站

在Django 1.11更改视图中禁用原子事务

Django学习之禁用csrf和使用csrf操作详解

Django:在所有响应上强制 CSRF 令牌

Django @csrf_exempt 在类视图中不起作用