首页 > 解决方案 > 如何将用户限制在某些特定的 url

问题描述

我想通过在地址栏中键入 url 来限制用户访问支付和结帐页面,例如“home/shop/checkout/”和“home/shop/payment/” 我想让这些页面只有在 buy_now 表单是有效或 items_buy_now 表格有效

网址.py

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

视图.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})

标签: pythondjango

解决方案


最好的方法是:

  1. 创建一个管理 items_buy 或 items_buy 的 Mixin
  2. 对于所有必须处理限制的视图,从相应的 mixin 中对其进行子类化。
  3. 在子类的 get 函数中调用该方法来检查用户是否有权访问该页面。

推荐阅读