Reputation: 45
Help, please! I'm writing a simple donation site in Django. I want to use LiqPay payment system.
I've described a form which takes data from user (def donation), but I can't figure out how to pass this data to another function (class PayView, def get)
I've tried creating a user and then taking the 'amount' field from it, but I don't want to force users to register.
'PayView' is rendered immediately after 'submit' in 'def donation'
My code:
views.py
def donation(request):
if request.method == 'POST':
form = CheckoutForm(request.POST)
if form.is_valid():
Donation.objects.create(**form.cleaned_data)
return redirect('pay_view')
else:
form = CheckoutForm()
return render(request, 'donation/donation.html', {'form': form})
class PayView(TemplateView):
template_name = 'donation/pay.html'
def get(self, request, *args, **kwargs):
liqpay = LiqPay(settings.LIQPAY_PUBLIC_KEY, settings.LIQPAY_PRIVATE_KEY)
params = {
'action': 'pay',
'amount': '1',
'currency': 'UAH',
'description': 'Допомога фонду',
'order_id': 'order_id_1',
'version': '3',
'sandbox': 1, # sandbox mode, set to 1 to enable it
'server_url': '', # url to callback view
}
signature = liqpay.cnb_signature(params)
data = liqpay.cnb_data(params)
return render(request, self.template_name, {'signature': signature, 'data': data})
forms.py
from django import forms
class CheckoutForm(forms.Form):
amount = forms.IntegerField()
first_name = forms.CharField()
last_name = forms.CharField()
phone = forms.CharField()
email = forms.EmailField()
Sorry for the silly question. I am very new to this.
Thanks!
Upvotes: 0
Views: 128
Reputation: 328
PayView
is rendered only after donation
then you can use django session
You can do something like this
def donation(request):
..
..
..
if form.is_valid():
donation_instance = Donation.objects.create(**form.cleaned_data)
request.session["donation_instance"] = donation_instance.id
return redirect('pay_view')
class PayView(TemplateView):
template_name = 'donation/pay.html'
def get(self, request, *args, **kwargs):
# to initialize none instance for references issue
donation_instance = Donation.objects.none()
if "donation_instance" in request.session:
donation_instance = Donation.objects.get(pk=request.session["donation_instance"])
<use_your_donation_obj_here>
...
...
References:
Official documentation for django session is here
Upvotes: 1