为啥我在 Django 收到 403 POST 请求错误?
Posted
技术标签:
【中文标题】为啥我在 Django 收到 403 POST 请求错误?【英文标题】:Why I get 403 POST request error at Django?为什么我在 Django 收到 403 POST 请求错误? 【发布时间】:2019-10-28 12:15:32 【问题描述】:为什么我收到 403 POST 请求错误?
我不明白这里有什么问题......
$('#id_submit').click(function(e)
e.preventDefault();
var form = new FormData($('form')[0])
form.append("image", $("input#id_image")[0].files[0])
var data =
form: form,
image_form: 123
$.ajax(
headers: ' csrf_token ',
type: 'POST',
data: data,
processData: false,
contentType: false
)
)
【问题讨论】:
标头应该是键和值。试试:'X-CSRFToken: csrf_token '。 403 响应可能也有正文。检查实际的错误消息。在设置中使用 DEBUG=True ;) 【参考方案1】:您没有正确设置 csrf_token
,您需要将其注入POST 数据中,或者作为X-CSRFToken
标头,而不是作为整个 headers
。参见例如Django documentation on Setting the token on the AJAX request。
在 POST 数据中
var data =
form: form,
image_form: 123,
csrfmiddlewaretoken: ' csrf_token '
在 POST 标头中
或者我们可以将其包含在帖子标题中,例如:
$.ajax(
headers: 'X-CSRFToken': ' csrf_token ' ,
type: 'POST',
data: data,
processData: false,
contentType: false
);
【讨论】:
告诉我如何获取request.POST中的数据?那里是空的 (request.POST.viewkeys())... @ДмитрийДмитрук:您需要从表单字段中提取数据,而不仅仅是提交form
。所以你需要获取这些值,并用这些值组成一个字典。
@ДмитрийДмитрук:你为什么在false
上设置processData
?
我得到Illegal invocation
,如果processData
不是false
@ДмитрийДмитрук:是的,这是因为,如前所述,您需要获取 input 元素中的值,并构造一个字典。您不能将表单“发送”到服务器,您只能将值发送到服务器。以上是关于为啥我在 Django 收到 403 POST 请求错误?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在本地使用 codeigniter 会收到 403 Forbidden 错误?
为啥我在尝试访问此 WordPress 网站时收到此 403 Forbidden 错误?为啥它无法读取 .htaccess 文件?