【发布时间】:2021-01-11 04:43:10
【问题描述】:
我最初对我的视图进行了 AJAX 调用,然后我意识到我不能return render(request, 'my/new/template.html, context)
所以我遇到了这个相关的问题,这导致了我在下面展示的内容:Redirect to new page after receiving data from Javascript
但是我无法让 CSRF 令牌工作,它给了我一个 403 错误。附带说明一下,我也使用 shell_plus 来使用安全连接,但我认为这不会导致问题。
这是我对视图函数的调用:
submitForm.addEventListener('submit', function (e) {
const form = new FormData(e.target);
// const csrf_token = form.get("csrfmiddlewaretoken");
// instead using var csrf_token = {{ csrf_token }} in template
e.preventDefault()
instance.requestPaymentMethod(function (err, payload) {
var url = '/shop/payment/';
var newForm = '<form action="' + url + '" method="post">';
newForm += '<input type="hidden" name="csrf_token" value="' + csrf_token +'" />'
newForm += '<input type="hidden" name="paymentMethodNonce" value="' + payload.nonce + '" />'
newForm += '<input type="hidden" name="orderTotal" value="' + order_total + '" />'
newForm += '<input type="hidden" name="address" value="' + $('#address-select').val() + '" />
newForm += '<input type="hidden" name="first-name" value="' + form.get("first-name") + '" />'
newForm += '<input type="hidden" name="last-name" value="' + form.get("last-name") + '" />'
newForm += '</form>'
var form_element = $(newForm);
$('body').append(form_element);
form_element.submit();
});
我之前使用 ajax 的尝试看起来像这样:
$.ajax({
type: 'POST',
url: '/shop/payment/',
headers: { "X-CSRFToken": csrf_token },
data: {
'paymentMethodNonce': payload.nonce,
'orderTotal': order_total,
'address': $('#address-select').val(),
'first-name': form.get("first-name"),
'last-name': form.get("last-name")
}
}).done(function (result) {
console.log(result.result)
// WON'T REDIRECT
});
【问题讨论】:
标签: django django-views braintree django-csrf csrf-token