[英]Download file after payment with Django
我正在用 Django 構建一個數字電子商務平台。 當我的客戶為數字產品付款時,我希望數字產品在付款后立即下載。 因此,當他們完成付款時,他們會自動下載文件。
現在,在付款后,我將返回主頁並成功付款。 但是我希望在付款后下載文件而不是渲染回主頁,所以我希望被渲染為類似我return redirect( {{item.file.url}} )
而不是return redirect("/" )
(見最后一行視圖)。 我在視圖和模型中的代碼如下:
觀看次數
class PaymentView(View):
def get(self, *args, **kwargs):
order = Order.objects.get(user=self.request.user, ordered=False)
context = {
'order': order
}
return render(self.request, 'dashtemplates/payment.html', context)
def post(self, *args, **kwargs):
order = Order.objects.get(user=self.request.user, ordered=False)
token = self.request.POST.get('stripeToken')
amount = int(order.get_total() * 100)
try:
charge = stripe.Charge.create(
amount=amount,
currency="usd",
source=token
)
#create payment
payment = Payment()
payment.stripe_charge_id = charge['id']
payment.user = self.request.user
payment.amount = order.get_total()
payment.save()
#assign the payment to the order
order_items = order.items.all()
order_items.update(ordered=True)
for item in order_items:
item.save()
order.ordered = True
order.payment = payment
order.save()
messages.success(self.request, "Your order was succesful!")
return redirect("/" )
楷模
class Item(models.Model):
title = models.CharField(max_length=100)
price = models.FloatField()
category = models.CharField(choices=CATEGORY_CHOICES, max_length=20)
slug = models.SlugField()
description = models.TextField()
image = models.ImageField()
file = models.FileField()
這種方法的問題是,擁有下載鏈接的用戶可以共享它,因此任何擁有該鏈接的人都可以下載該文件。
避免這種情況的一種方法是重定向到返回文件響應的下載視圖,該視圖將確保用戶通過身份驗證,然后檢索鏈接到他們購買的文件並返回文件響應
通過這種方式,您可以確保只有為給定文件付費的經過身份驗證的用戶才能下載該文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.