Home > other >  how do I transfer data from a form to another page immediately?
how do I transfer data from a form to another page immediately?

Time:01-25

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!

CodePudding user response:

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

  •  Tags:  
  • Related