当我在添加数据后重定向到另一个视图(特别是将客户数据条带化)到一个然后添加到我的会话中的dict时,我在重定向视图中的会话中丢失了所有信息。因此,当我尝试弹出这些项目时遇到KeyError。
有趣的是,当我在payment_data dict中放入其他类型的信息时,就不会发生这种情况,例如列表而不是客户对象。
我不确定解决这个问题的最佳方法是什么,但鉴于我的设计,对我来说,将客户信息提供给确认视图对我来说很重要
这是我的代码:
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对象而不是字典或列表对象,但也许有人可以确认或提供正确的答案。
答案 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)