1

当我在将数据(特别是条带客户数据)添加到然后添加到我的会话中的字典后重定向到另一个视图时,我会在重定向视图中丢失会话中的所有信息。因此,当我尝试弹出这些项目时,我遇到了 KeyError。

有趣的是,当我将其他类型的信息放在我的 payment_data 字典中时,这不会发生,例如列表而不是客户对象。

我不确定解决此问题的最佳方法是什么,但鉴于我的设计,将客户信息获取到确认视图对我来说很重要,这样我就可以

  1. 项目清单
  2. 向用户显示客户信息以供确认(审查敏感信息
  3. 充值卡

这是我的代码:

   class PaymentsCreateView(FormView):
       def form_valid(self, form):
        customer = stripe.Customer.create(description="""
            Non-registered user for applying features""")
        customer.save()

        payment_data = {
            'customer': customer
        }

        self.request.session['payment_data'] = payment_data
        self.request.session.modified = True

        import ipdb;ipdb.set_trace();

        return HttpResponseRedirect(reverse('payments_confirm'))

class PaymentsConfirmView(TemplateView):
    template_name = 'payments/confirm.html'

    def get_context_data(self, **kwargs):
        context = super(PaymentsConfirmView, self).get_context_data(**kwargs)

        context['payment_data'] = self.request.session.pop('payment_data')
        context['feature_data'] = self.request.session.pop('feature_data')

        return context

我仍在调试,下一步是确认问题是否在于我正在尝试存储 Customer 对象而不是字典或列表对象,但也许 SO 上的某人可以确认或提供正确的答案。

4

1 回答 1

2

来自Python 文档

list.pop([i])

删除列表中给定位置的项目,并将其返回。如果未指定索引,a.pop() 将删除并返回列表中的最后一项。

就像 Rohan 说的,使用get()

context['payment_data'] = self.request.session.get('payment_data', False)
context['feature_data'] = self.request.session.get('feature_data', False)
于 2013-08-08T06:13:22.063 回答