#python #django #filefield
#python #django #поле файла
Вопрос:
Я создаю платформу цифровой электронной коммерции с помощью Django. Когда мои клиенты платят за цифровой продукт, я хочу, чтобы цифровой продукт загружался сразу после оплаты. Поэтому, когда они завершают платеж, они автоматически получают загруженный файл.
На данный момент после оплаты я возвращаюсь на домашнюю страницу и получаю успешный платеж. Но вместо возврата на домашнюю страницу я хочу, чтобы файл загружался после оплаты, поэтому я хочу, чтобы он отображался во что-то вроде I 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()
Ответ №1:
Проблема с этим подходом заключается в том, что пользователь со ссылкой для скачивания может поделиться им, чтобы любой человек, имеющий ссылку, мог загрузить этот файл.
Один из способов избежать этого — перенаправить на просмотр загрузки, который возвращает файловый ответ, этот просмотр гарантирует, что пользователь аутентифицирован, затем извлекает файл, связанный с их покупкой, и возвращает файловый ответ
Таким образом, вы гарантируете, что только аутентифицированный пользователь, который заплатил за данный файл, сможет загрузить этот файл
Комментарии:
1. Пользователям не нужно ничего делиться. Эта функция предназначена для клиентов, когда они покупают цифровой продукт, цифровой продукт (например, файл csv) будет загружен автоматически после оплаты.