我正在尝试向其中发送带有JSON数据的Django的POST请求,并且视图正在返回带有JSON数据的响应。但是当我向它发送请求时,它会返回403 Forbidden
错误。我正在使用RESTClient
发送/测试POST请求。
我已经在文档中阅读了所有关于CSRF的内容,但它并没有太大帮助。我是Django的新手,这里发布的其他问题对我没什么帮助。
我认为的代码是:
from django.shortcuts import render
from django.http import HttpResponse;
import json;
def index(request):
if request.is_ajax():
if request.method == 'POST':
print 'Raw Data: "%s"' % request.body;
reply = json.loads(request.body);
return HttpResponse(reply);
else:
return HttpResponse("OK");
else:
return HttpResponse("OK");
答案 0 :(得分:1)
答案 1 :(得分:1)
除了@ ArpitGoyal的答案,你还可以用csrf_exempt
装饰你的观点:
这个装饰器将视图标记为免受中间件保护的保护。
如果您确实需要CSRF保护,请提供一些提示:
检查CSRF令牌cookie名称。
有关详细信息,请参阅CSRF_COOKIE_NAME
。
将ensure_csrf_cookie
装饰器添加到您的视图中。
根据the docs:
警告强>
如果您的视图没有呈现包含
csrf_token
模板标记的模板,Django可能不会设置CSRF令牌cookie。这在表单动态添加到页面的情况下很常见。为解决这种情况,Django提供了一个视图装饰器,它强制设置cookie:ensure_csrf_cookie()
。
假设CSRF令牌Cookie名称为csrftoken
,请尝试发送X-CSRFToken
标题。
$.ajax({
// Your options here.
headers: {'X-CSRFToken': getCookie('csrftoken')}
});