django - Django 在基于类的视图中提示用户登录
问题描述
我有一个基于类的视图,允许用户将产品添加到购物车,但用户应该登录。我曾经LoginRequiredMixin
限制对AddToCart
CBV 的访问,但每个人都可以查看产品页面。我想提示用户在单击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 login
whileLoginRequiredMixin
保持不变。但是我的主页还显示了一个产品列表,Add To Cart
每个产品上都有一个图标,这个解决方案肯定不适用于主页。欢迎任何想法。
对于前端,我使用的是 Bootstrap。
解决方案
他的方法怎么样:
{% if not user.is_authenticated %}
To add product to cart, you need to <a href="/login">login</a>
<style>
.addToCartIcon {
display: none;
}
</style>
{% endif %}
推荐阅读
- sql - 如何让虚拟变量在一行中显示
- python - cx_Oracle.DatabaseError:ORA-00932:不一致的数据类型:预期的 CHAR 得到了 NUMBER
- visual-studio - Visual Studio 中的 ESQL/C Informix 语法高亮显示
- r - 使用 data.table 将模拟结果存储在循环中
- excel-formula - 随机抽奖系统
- python - 列表中两个元素之间每个元素的时间增量
- c++ - 如何在 CPP 中命名选项卡/列?
- python-3.x - AttributeError:“屏幕”对象在 Python KivyMD 中没有属性“文本”
- generics - 在 .NET Core 中的特定通用服务上定义注入服务
- oracle - 我可以在 Oracle 中删除整个表而不撤消吗?