我有一个网站,我想在显示用户从结账处重定向到谢谢页面后购买的产品名称。
问题在于,如果不在模板中创建表单,我就无法将视频中的数据发送到另一个视图。
以下是 checkout_paymen t到 checkout_confirmation 页面的两个视图示例:
def checkout_payment(request):
customer_id = request.user.profile.stripe_id
if request.method == 'POST':
try:
gig = Gig.objects.get(id=request.POST.get('gig_id'))
except Gig.DoesNotExist:
return redirect(reverse('purchase_error_detail'))
return redirect(reverse('purchase_confirmation_detail'))
def checkout_confirmation(request):
#how can I get the purchased gig datas ?
return render(request, 'purchase/confirmation.html', {})
models.py Gig 包含:user
,title
,price
字段。
urls.py: name='purchase_confirmation_detail'
有没有办法让最后购买的数据避免使用表格或网址来获取产品信息?
答案 0 :(得分:1)
简单快捷的方式:会话
如果你只需要一个字符串列表或一个字符串,你可以使用sessions。您可以在文档中详细了解它们。只需将名称保存在某个键中,显示它们并清除它们。
更好,更具未来性的解决方案,但稍微复杂一点:模型
当您在销售产品时,最好保留一些用户购买的记录。当系统出现故障(相信我,它会)或保留所有内容的记录时,这可能会有所帮助。
它可以是简单的事情:
class Transaction(models.Model):
gig = models.ForeignKey(Gig)
user = models.ForeignKey(User)
现在,您可以通过两种方式重构视图:
您的源视图应使用重定向,如:
def checkout_payment(request):
customer_id = request.user.profile.stripe_id
if request.method == 'POST':
try:
gig = Gig.objects.get(id=request.POST.get('gig_id'))
except Gig.DoesNotExist:
return redirect(reverse('purchase_error_detail'))
new_transaction = Transaction.objects.create(user=request.user, gig=gig)
return redirect(reverse('purchase_confirmation_detail', kwargs={'pk': new_transaction.pk}))
您的目标视图将类似于:
def checkout_confirmation(request, *args, **kwargs):
new_transaction = Transaction.objects.get(kwargs.get('pk'))
if request.user != new_transaction.user:
return HttpResponseForbidden() # You can raise Http404 here too to hide the resource, like github does
return render(request, 'purchase/confirmation.html', {'gig': transaction.gig})
现在您可以访问所需的所有内容。