Django:匿名会话和 "temporary" 一对一相关模型?
Django: Anonymous session & "temporary" one-to-one related model?
目前,我有一个 Cart
模型,每个注册 CustomUser
(一对一关系):
class Cart(models.Model):
created_at = models.DateTimeField(auto_now_add = True)
user = models.OneToOneField(CustomUser, related_name='cart')
但是现在我对匿名用户(来宾)有一些要求。看了一些文章,好像需要session?
- 简单的基于数据库的会话。
- 如何让客人在他们需要时拥有相关的临时
GuestCart
模型:
- 因为我不希望连机器人都有推车浪费资源
- 那么...我可以
GuestCart.objects.create(session = request.session['cart']) #just pseudo-code, I don't sure how to do this
当访客调用视图时吗?
GuestCart
将活整 1 周(从 GuestCart
开始计算 已建立 。客人的 activity 时间不会更新),并且应该在过期时自动删除。
** 更新 @ 2015/3/21:目前,我在 request.session
中添加了一个新密钥 cart_id
,并且没有将会话信息保存到数据库中。
为了支持匿名用户,我相信您的 Cart
模型 class 应该是这样的;
class Cart(models.Model):
created_at = models.DateTimeField(auto_now_add = True)
user = models.OneToOneField(CustomUser, blank=True, null=True, related_name='cart')
session_key = models.CharField(max_length=40)
class Meta:
unique_together = ('user', 'session_key',)
然后你可以像这样检索用户购物车:
if request.user.is_authenticated():
cart, created = Cart.objects.update_or_create(
user = request.user,
defaults = {'session_key': request.session.session_key}
)
else:
cart, created = Cart.objects.get_or_create(
session_key = request.session.session_key,
defaults = {'user': None}
)
以后如果结账过程需要注册,您可以随时更改购物车并添加用户。
目前,我有一个 Cart
模型,每个注册 CustomUser
(一对一关系):
class Cart(models.Model):
created_at = models.DateTimeField(auto_now_add = True)
user = models.OneToOneField(CustomUser, related_name='cart')
但是现在我对匿名用户(来宾)有一些要求。看了一些文章,好像需要session?
- 简单的基于数据库的会话。
- 如何让客人在他们需要时拥有相关的临时
GuestCart
模型:- 因为我不希望连机器人都有推车浪费资源
- 那么...我可以
GuestCart.objects.create(session = request.session['cart']) #just pseudo-code, I don't sure how to do this
当访客调用视图时吗?
GuestCart
将活整 1 周(从GuestCart
开始计算 已建立 。客人的 activity 时间不会更新),并且应该在过期时自动删除。
** 更新 @ 2015/3/21:目前,我在 request.session
中添加了一个新密钥 cart_id
,并且没有将会话信息保存到数据库中。
为了支持匿名用户,我相信您的 Cart
模型 class 应该是这样的;
class Cart(models.Model):
created_at = models.DateTimeField(auto_now_add = True)
user = models.OneToOneField(CustomUser, blank=True, null=True, related_name='cart')
session_key = models.CharField(max_length=40)
class Meta:
unique_together = ('user', 'session_key',)
然后你可以像这样检索用户购物车:
if request.user.is_authenticated():
cart, created = Cart.objects.update_or_create(
user = request.user,
defaults = {'session_key': request.session.session_key}
)
else:
cart, created = Cart.objects.get_or_create(
session_key = request.session.session_key,
defaults = {'user': None}
)
以后如果结账过程需要注册,您可以随时更改购物车并添加用户。