在DJANGO中使用JSON数据发送POST请求,从视图中发送响应也是JSON数据但是它给出了403 FORBIDDEN错误

时间:2015-08-04 11:57:22

标签: python json django

我正在尝试向其中发送带有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");

2 个答案:

答案 0 :(得分:1)

您应该在发出请求之前验证您的客户端。在您的通话中,您提供了ajax POST请求命中。

headerRESTClient中提供X-CSRFToken

有关详细信息,请查看this

答案 1 :(得分:1)

除了@ ArpitGoyal的答案,你还可以用csrf_exempt装饰你的观点:

  

这个装饰器将视图标记为免受中间件保护的保护。

如果您确实需要CSRF保护,请提供一些提示:

  1. 检查CSRF令牌cookie名称。

    有关详细信息,请参阅CSRF_COOKIE_NAME

  2. ensure_csrf_cookie装饰器添加到您的视图中。

    根据the docs

      

    警告

         

    如果您的视图没有呈现包含csrf_token模板标记的模板,Django可能不会设置CSRF令牌cookie。这在表单动态添加到页面的情况下很常见。为解决这种情况,Django提供了一个视图装饰器,它强制设置cookie:ensure_csrf_cookie()

  3. 假设CSRF令牌Cookie名称为csrftoken,请尝试发送X-CSRFToken标题。

    $.ajax({
        // Your options here.
        headers: {'X-CSRFToken': getCookie('csrftoken')}
    });