KeyError:Django在CBV重定向之间丢失会话数据

时间:2013-08-08 04:58:16

标签: python django stripe-payments django-sessions

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

有趣的是,当我在payment_data dict中放入其他类型的信息时,就不会发生这种情况,例如列表而不是客户对象。

我不确定解决这个问题的最佳方法是什么,但鉴于我的设计,对我来说,将客户信息提供给确认视图对我来说很重要

  1. 列表项
  2. 向用户显示客户信息以进行确认(审查敏感信息
  3. 为卡充电
  4. 这是我的代码:

       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对象而不是字典或列表对象,但也许有人可以确认或提供正确的答案。

1 个答案:

答案 0 :(得分:2)

来自Python docs

  

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)