[英]What to return to django admin if user has not username or something else
总之,我正在做网上商店和django管理员我显示经过身份验证的用户'用户名',但有些用户没有经过身份验证
因此,如果经过身份验证的用户会订购某些东西,那么我可以获得他们的数据。 但是,如果未经身份验证的用户会订购? 什么在django管理员中显示? 如果我将从用户那里仅请求他的名字,那就没有结果。 因为我们知道django需要完全授权
models.py
class Cart(models.Model):
user = models.ForeignKey(User, null=True, blank=True)
products = models.ManyToManyField(Product, through=CartProduct)
class Meta:
verbose_name = 'Cart'
verbose_name_plural = 'Cart'
def __str__(self):
return self.user.username # That for authenticated users
views.py
class CartView(View):
def get(self,request,*args,**kwargs):
cart_id = request.session.get('cart_id')
if cart_id == None:
cart = Cart()
cart.save()
request.session['cart_id'] = cart_id
cart = Cart.objects.get(id=cart_id)
product_id = request.GET.get('product')
delete_product = request.GET.get('delete')
if product_id:
product_instance = get_object_or_404(Product, id=product_id)
amount = request.GET.get('amount')
cart_product = CartProduct.objects.get_or_create(cart=cart, product=product_instance)[0]
if delete_product:
cart_product.delete()
else:
cart_product.amount = amount
cart_product.save()
return HttpResponseRedirect('/')
您可以使用IP地址,但这可能会令人困惑/多人可以共享一个。
所以我的建议是使用Django的内置会话框架 。
从此stackoverflow答案中拉出,您将看到您可以从request
对象中收集当前会话密钥。
然后只需更改您的购物车型号:
from django.contrib.sessions.models import Session
class Cart(models.Model):
user = models.ForeignKey(User, null=True, blank=True)
session = models.ForeignKey(Session, null=True, blank=True)
products = models.ManyToManyField(Product, through=CartProduct)
class Meta:
verbose_name = 'Cart'
verbose_name_plural = 'Cart'
def __str__(self):
if self.user :
return self.user.username # For for authenticated users
else if self.session :
return self.session.session_key
else :
return "Anonymous"
当然,您需要确保在创建Cart对象时将request.session添加到Cart对象中 。
最后,似乎会话对象有时仍然是空的,所以如果你真的不想在管理员中使用“匿名”行,你应该强制保存它。 这个答案使会话强制保存非常简单:
if not request.session.session_key:
request.session.save()
session_id = request.session.session_key
在类中编写一个调度方法,以便您可以检查用户是否经过身份验证request.user.is_authenticated
将返回用户身份验证的状态。 如果用户未经过身份验证,则根据需要保存用户
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.