Проблемы с внедрением Stripe в мой код Django
Я реализую stripe charge в моем проекте django ecommerce. В моих представлениях я пытаюсь получить данные из элемента ввода в форме, а затем передать их в переменную в представлениях.
Вот Javascript, который создает элемент ввода
var form = document.getElementById('stripe-form');
var hiddenInput = document.createElement('input');
hiddenInput.setAttribute('type', 'hidden');
hiddenInput.setAttribute('name', 'stripeToken');
hiddenInput.setAttribute('value', token.id);
form.appendChild(hiddenInput);
// Submit the form
form.submit()
Итак, в views.py
у меня есть следующее:
token = form.cleaned_data.get('stripeToken')
save = form.cleaned_data.get('save')
use_default = form.cleaned_data.get('use_default')
print(form.cleaned_data)
<1>> возвращается словарьprint(form.cleaned_data)
{'stripetoken':'', 'save': False, 'as_default': False}
stripetoken
сопоставляется с переменной token
, и, как вы можете видеть, ее значение пустое. Последние две переменные, сопоставленные с двумя последними ключами в словаре, вернули значения.
Предполагается, что token = form.cleaned_data.get('stripeToken')
получит это hiddenInput.setAttribute('value', token.id);
правильно?
Когда я попытался получить значение token.id
, я получил ответ. Я использовал для этого Javascript alert(token.id)
, и получил значение, отображаемое в браузере. Так что я не знаю, что именно не так.
Может ли кто-нибудь помочь мне в этом вопросе?
Ваша печать form.cleaned_data
показывает, что вы определили поле формы под названием stripetoken
(все строчные буквы), а не stripeToken
(camelCased).
Ваш JavaScript код отправляет stripeToken
(camelCased), но поскольку в вашей форме нет поля с таким именем, Django игнорирует "лишние" данные, отправленные браузером, и очищенные данные просто включают значение по умолчанию для этого поля (которое, как я предполагаю, вы установили как ''
).
Исправьте код бэкенда, чтобы написать stripeToken
, или код фронтенда, чтобы написать stripetoken
.