Как управлять перенаправлением после вызова Ajax + django
Я управляю платежами с помощью braintree drop in и использую django. Когда платеж проходит успешно, он должен перенаправлять на страницу успешного платежа, а когда неуспешно - на страницу неудачного платежа. Я определяю перенаправления в моем views.py, но я не знаю, как я должен обрабатывать перенаправление в ajax в этом коде после оплаты ничего не происходит и перенаправление не работает. Что я должен добавить в мой ajax для обработки перенаправления?
Выпад мозгового дерева в коде Javascript:
<script>
var braintree_client_token = "{{ client_token}}";
var button = document.querySelector('#submit-button');
braintree.dropin.create({
authorization: "{{client_token}}",
container: '#braintree-dropin',
card: {
cardholderName: {
required: false
}
}
}, function (createErr, instance) {
button.addEventListener('click', function () {
instance.requestPaymentMethod(function (err, payload) {
$.ajax({
type: 'POST',
url: '{% url "payment:process" %}',
data: {
'paymentMethodNonce': payload.nonce,
'csrfmiddlewaretoken': '{{ csrf_token }}'
}
}).done(function (result) {
});
});
});
});
</script>
Views.py
@login_required
def payment_process(request):
order_id = request.session.get('order_id')
order = get_object_or_404(Order, id=order_id)
total_cost = order.get_total_cost()
if request.method == 'POST':
# retrive nonce
nonce = request.POST.get('paymentMethodNonce', None)
# create and submit transaction
result = gateway.transaction.sale({
'amount': f'{total_cost:.2f}',
'payment_method_nonce': nonce,
'options': {
'submit_for_settlement': True
}
})
if result.is_success:
# mark the order as paid
order.paid = True
# store the unique transaction id
order.braintree_id = result.transaction.id
order.save()
request.session['coupon_id'] = None
return redirect('payment:done')
else:
return redirect('payment:canceled')
else:
# generate token
client_token = gateway.client_token.generate()
context = {
'order': order,
'client_token': client_token,
}
return render(request, 'process.html', context)
def payment_done(request):
return render(request, 'done.html')
def payment_canceled(request):
return render(request, 'canceled.html')
все работает нормально, кроме перенаправления