gpt4 book ai didi

django - 如何仅在某些情况下禁用 Django 的 csrf 保护?

转载 作者:行者123 更新时间:2023-11-28 19:36:02 25 4
gpt4 key购买 nike

我正在尝试在 Django 中编写一个站点,其中 API URL 与面向用户的 URL 相同。但是我在使用 POST 请求和 CSRF 保护的页面上遇到了问题。例如,如果我有一个页面/foo/add 我希望能够通过两种方式向它发送 POST 请求:

  1. 作为最终用户(使用 session cookie 进行身份验证)提交表单。这需要 CSRF 保护。
  2. 作为 API 客户端(使用 HTTP 请求 header 进行身份验证)。如果启用了 CSRF 保护,这将失败。

我找到了多种禁用 CSRF 的方法,例如@csrf_exempt,但这些方法都对整个 View 禁用了它。有没有办法在更细粒度的级别启用/禁用它?还是我必须从头开始实现自己的 CSRF 保护?

最佳答案

修改urls.py

如果您在 urls.py 中管理您的路由,您可以用 csrf_exempt() 包装您想要的路由将它们排除在 CSRF 验证中间件之外。

例如,

from django.views.decorators.csrf import csrf_exempt
urlpatterns = patterns(
# ...
# Will exclude `/api/v1/test` from CSRF
url(r'^api/v1/test', csrf_exempt(TestApiHandler.as_view()))
# ...
)

或者,作为装饰器

有些人可能会发现使用 @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')

关于django - 如何仅在某些情况下禁用 Django 的 csrf 保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11374382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com