2

我正在运行 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"
     );
4

3 回答 3

4

Django 具有 csrf 保护,您必须为每个 POST 请求放置“csrfmiddlewaretoken”。尝试添加这行代码:

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

你必须在你的表单中插入这个标签,它会返回一个带有 csrf_token 的隐藏输入字段:

{% csrf_token %}
于 2012-07-16T15:16:31.390 回答
2

补充一下阿拉斯代尔所说的话。

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

这应该添加一个以 CSRF 令牌作为值的“输入”元素。js 部分将在表单中提交。

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

响应代码 403 是 Forbidden 请求代码。

于 2012-07-16T19:30:55.477 回答
1

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

有关更多详细信息,请参阅Django CSRF 文档页面,其中包括一个有用的片段,您可以使用它来使 jQuery ajax 请求工作。

于 2012-07-16T15:12:39.540 回答