django中关于json请求的403消息

时间:2012-07-16 15:02:33

标签: jquery django json django-urls http-status-code-403

我正在运行django服务器,当我发帖子时,我收到403消息。我的问题是如下所示进行json调用我应该运行apache吗?或者,我做错了什么?

在html页面中,我只包含了最新的jquery文件。

 var snddata = {};
  snddata["username"] = username;
  snddata["firstname"] = firstname;
  snddata["lastname"] = lastname;
  snddata["usertype"] = $("#usertype").val();
  snddata["address"] = address;
  snddata["emailid"] = emailid;
  snddata["empid"] = empid;
  $.post("/home/", snddata, 
     function callbackHandler(data, textstatus) 
     {
     if (data.status == 1)
     {
        alert("User added successfully");
     }
     else 
     {
        alert(data.msg);
     }
     }, 
     "json"
     );

3 个答案:

答案 0 :(得分:4)

Django有一个csrf保护,你必须为每个POST请求输入“csrfmiddlewaretoken”。 尝试添加以下代码:

snddata["csrfmiddlewaretoken"] = $('input[name=csrfmiddlewaretoken]').val();

您必须在表单中插入此标记,并使用csrf_token返回隐藏的输入字段:

{% csrf_token %}

答案 1 :(得分:2)

403错误是由于Django的跨站点请求伪造保护(CSRF)保护。

有关详细信息,请参阅Django CSRF docs page,其中包含一个有用的代码段,可用于使jQuery ajax请求正常工作。

答案 2 :(得分:2)

补充阿拉斯戴尔所说的话。

在html页面的某处添加{% csrf_token %}。并将snddata["csrfmiddlewaretoken"] = $("#csrfmiddlewaretoken").val();添加到上面的javascript中。

这应该添加一个带有CSRF Token的'input'元素作为值。并且js部分将以表格形式提交。

POST请求需要CSRF令牌,除非视图具有@csrf_exempt装饰器或者CSRF已被禁用。

响应代码403是禁止请求代码。