我正在运行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"
);
答案 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是禁止请求代码。