如何在Django(电子商务)中存储用户购物车

时间:2017-08-11 21:04:44

标签: python django django-models django-views session-cookies

请看一看并告诉我,如果我错了/这是不好的方法,为什么。

我需要:

  1. 匿名用户可以将产品添加到购物车。
  2. 匿名用户即使在关闭浏览器后也可以使用同一台计算机访问他的购物车。
  3. 注册用户可以这样做+如果他用另一台电脑登录,他仍然可以访问他之前制作的购物车。
  4. 我的想法:

    注册用户的模型有products_in_the_cart字段。

    models.py

    from django.contrib.auth import User
    
    class MyUser(User):
        products_in_the_cart = models.Charfield(max_length=200)
    

    添加到购物车中的产品存储在Cookie中。如果用户已通过身份验证,则它还会存储在用户模型中。

    views.py

    def add_product_to_the_cart(request, product_id):  
        ...      
        request.COOKIES['products_in_the_cart'].append(product_id)
        if request.user.is_authenticated():
            request.user.products_in_the_cart = json.dumps(request.COOKIES['products_in_the_cart'])
        return render(request, ... )
    

    最后,如果用户登录,则他当前的COOKIES['products_in_the_cart'](如果存在)会覆盖模型的数据。如果不存在,他的模型数据会记录在COOKIES中。

    views.py

    def user_login(request):
        ...
        login(request, user)
        if request.COOKIES.get('products_in_the_cart', False):
            user.products_in_the_cart = json.dumps(request.COOKIES['products_in_the_cart'])
        elif user.products_in_the_cart:
            request.COOKIES['products_in_the_cart'] = json.loads(user.products_in_the_cart)
        ...
    

0 个答案:

没有答案