Проблемы с внедрением 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.

Вернуться на верх