首页 > 解决方案 > Django 在基于类的视图中提示用户登录

问题描述

我有一个基于类的视图,允许用户将产品添加到购物车,但用户应该登录。我曾经LoginRequiredMixin限制对AddToCartCBV 的访问,但每个人都可以查看产品页面。我想提示用户在单击Add To Cart按钮时要求他们登录,当他们登录时,只有他们可以将产品添加到各自的购物车中。

class AddToCart(LoginRequiredMixin, TemplateView):
    """
        Add an item to the cart
    """
    def get(self, *args, **kwargs):
        slug = self.kwargs['slug']
        print(slug)
        item = get_object_or_404(Item, slug=slug)
        order_item, created = OrderItem.objects.get_or_create(
            item=item,
            user=self.request.user,
            ordered=False
        )
        order_qs = Order.objects.filter(user=request.user, ordered=False)
        print(order_qs)
        if order_qs.exists():
            order = order_qs[0]
            if order.items.filter(item__slug=item.slug):
                pass
                # message : Item already in cart
            else:
                order.items.add(order_item)
                # message : Item was added to cart
                return redirect("products:product")
        else:
            ordered_date = timezone.now()
            order = Order.objects.create(user=request.user, ordered_date=ordered_date)
            order.items.add(order_item)
            # message : Item was added to cart
            return redirect("products:product") 

一个可能的解决方案;我可以删除LoginRequiredMixin并检查request.user它是否说AnonymousUser我可以通过返回消息Django Message Framework并将消息显示给用户。但这听起来不是一个好的解决方案。另一种解决方法是{% if not user.is_authenticated %}在模板中使用并显示一些消息,例如To add product you need to loginwhileLoginRequiredMixin保持不变。但是我的主页还显示了一个产品列表,Add To Cart每个产品上都有一个图标,这个解决方案肯定不适用于主页。欢迎任何想法。

对于前端,我使用的是 Bootstrap。

标签: djangodjango-views

解决方案


他的方法怎么样:

{% if not user.is_authenticated %} 
To add product to cart, you need to <a href="/login">login</a>
<style>
 .addToCartIcon {
   display: none;
  }
</style>
{% endif %}

推荐阅读