作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Django 中编写一个站点,其中 API URL 与面向用户的 URL 相同。但是我在使用 POST 请求和 CSRF 保护的页面上遇到了问题。例如,如果我有一个页面/foo/add 我希望能够通过两种方式向它发送 POST 请求:
我找到了多种禁用 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/
我是一名优秀的程序员,十分优秀!