Как создать оператор if в перенаправлении для изменения модели Django
Я пытаюсь создать оператор if в моем Django представлении, который определяет, когда я перенаправлен на url моего полного заказа. Я хочу сделать это, потому что я хочу изменить поле 'complete' моей Django модели Order на true. Мое перенаправление происходит из функции javascript в моей интеграции с paypal.
checkout.html
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<h1>Checkout</h1>
<div class='container'>
<div class='row'>
<div class='col-6'>
<form action="" method='post' id='payement-form'>
{% csrf_token %}
<!-- {{ form|crispy }} -->
<div class='col-12' id='paypal-button-container'></div>
</form>
<script
src="https://www.paypal.com/sdk/js?client-id="> // Required. Replace YOUR_CLIENT_ID with your sandbox client ID.
</script>
<script>
function redirect() {
var url = "{% url 'complete-order' %}"
window.location.href = url
}
paypal.Buttons({
createOrder: function (data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: '0.01'
}
}]
});
},
onApprove: function (data, actions) {
// This function captures the funds from the transaction.
return actions.order.capture().then(function (details) {
// This function is the redirect
redirect()
alert('Transaction completed by ' + details.payer.name.given_name);
});
}
}).render('#paypal-button-container');
</script>
</div>
{% endblock content %}
views.py
@login_required(login_url='login')
def checkout(request):
order = Order.objects.get(user=request.user, complete=False)
context = {
'order': order
}
return render(request, 'videogames/checkout.html', context)
@login_required(login_url='login')
def paymentComplete(request):
order = Order.objects.get(user=request.user, complete=True)
context = {
'order': order
}
return render(request, 'videogames/complete.html', context)
Существует множество способов, которые следует выбирать в соответствии с вашим проектом.
- перед перенаправлением, в представлении, вызовите ссылку с помощью Ajax для изменения статуса .
@login_required(login_url='login')
def paymentSetComplete(request):
order = Order.objects.get(id=request.payment_id=,user=request.user, complete=False)
order.complete=True
order.save() # or update directly
return
- Измените статус, когда запрос на загрузку страницы
complate
был отправлен django .
Я не знаю, какие меры вы предприняли для защиты и предотвращения поддельных покупок. Но знаю, что пользователи могут повторять запросы, поступающие на сервер