Как я могу ограничить пользователей определенными URL - PullRequest
0 голосов
/ 15 марта 2019

Я хочу ограничить доступ пользователей к страницам оплаты и оформления заказа, введя URL-адрес в адресной строке, например «home / shop / checkout /» и «home / shop / payment /» , который я хочу сделатьэти страницы доступны только в том случае, если форма buy_now действительна или items_buy_now верна

urls.py

path('payment/',views.payment,name='payment'),
path('checkout/', views.checkout, name="checkout"),

views.py

def checkout(request):
        request.session.pop('data', None)
        messages.success(request,'Done.Thanks for using our services.')
        return redirect("shop:mycart")

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

        def buy_now(request,slug):
        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))
        product = Product.objects.get(active=True, slug=slug)
        if request.method == "POST":
            form = BuyerDeliveryForm(request.POST)
            if form.is_valid():
                buyer = form.save(commit=False)
                buyer.save()
                return redirect('shop:payment')
        else:
            form = BuyerDeliveryForm()
        return render(request, 'shop/delivery_form.html', {'form': form, 'products': product})


    def items_buy_now(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))
        if request.method == "POST":
            form = BuyerDeliveryForm(request.POST)
            if form.is_valid():
                buyer = form.save(commit=False)
                buyer.save()
                return redirect('shop:payment')
        else:
            form = BuyerDeliveryForm()
        return render(request, 'shop/delivery_form.html', {'form': form})

1 Ответ

0 голосов
/ 15 марта 2019

Лучший способ сделать это:

  1. Создать Mixin, который управляет items_buy или items_buy
  2. Для всех представлений, которые должны обрабатывать ограничение, создайте его подкласссоответствующий миксин.
  3. В функции get подкласса вызовите метод, чтобы проверить, есть ли у пользователя полномочия на доступ к этой странице.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...