как разрешить доступ к URL только с определенной страницы - PullRequest
1 голос
/ 16 марта 2019

Я хочу, чтобы пользователи получали доступ к странице оплаты, только если функция items_buy () завершена.

views.py

  def items_buy(request):
    if not request.user.is_authenticated:
        messages.info(request, 'You have to logged in first.')
        return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
    sess = request.session.get("data", {"items": []})
    if request.method == "POST":
        form = BuyerDeliveryForm(request.POST)
        if form.is_valid():
            buyer = form.save(commit=False)
            buyer.save()
            buyer.product.set(Product.objects.filter(active=True, slug__in=sess["items"]))
            return redirect('shop:payment')
    else:
        form = BuyerDeliveryForm()
    return render(request, 'shop/delivery_form.html', {'form': form})


def payment(request):
    return render(request,'shop/payment.html')

1 Ответ

1 голос
/ 16 марта 2019

Вы можете использовать сеанс, который вы уже использовали для сбора ваших продуктов здесь:

sess = request.session.get("data", {"items": []})

Итак, прежде чем перенаправлять пользователя, просто установите флаг в его хранилище сеансов, чтобы он мог получить доступ к маршруту «платежей».

buyer.product.set(Product.objects.filter(active=True, slug__in=sess["items"]))
request.session['allow_payments'] = True
return redirect('shop:payment')

Затем в «платежах» отметьте флажок

def payment(request):
    if not request.session.get('allow_payments'):
        return redirect(...somewhere...)

    return render(request,'shop/payment.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...