【问题标题】:how do I transfer data from a form to another page immediately?如何立即将数据从表单传输到另一个页面?
【发布时间】:2022-01-25 09:27:14
【问题描述】:

请帮忙! 我正在用 Django 编写一个简单的捐赠网站。 我想使用 LiqPay 支付系统。

我已经描述了一个从用户那里获取数据的表单(默认捐赠), 但我不知道如何将这些数据传递给另一个函数(PayView 类,def get)

我尝试创建一个用户,然后从中获取“金额”字段,但我不想强迫用户注册。

'PayView' 在 'def 捐赠' 中的 'submit' 之后立即呈现

我的代码:

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()

抱歉这个愚蠢的问题。我对此很陌生。

谢谢!

【问题讨论】:

    标签: python django


    【解决方案1】:

    PayView 仅在 donation 之后呈现,然后您可以使用 django 会话

    你可以这样做

    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>
            ...
            ...
    

    参考资料:

    django session 的官方文档是here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 2017-01-20
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多