django项目-电商平台(4)-购物车模块

介绍

购物车模块是我第一次遇到的这样的情况,购物车其实是将商品与用户进行多对多连接的一个中间环节。人对购物车是一对多,购物车对商品也是一对多,这样就实现了商品与人的多对多。(第一次接触多对多的关系)。另外购物车实现了商品与人关系的暂时储存,提交订单后要清空购物车。

1. model类的建立

这里的一个cart对象,并不是现实生活中的 购物车 ,一个cart对象相当于一个购物车 中的一个商品格子,储存了一种商品和商品的所有者,及商品的数量。所有的cart组成一个用户的购物车。

#用户 与 商品的 联系 是多对多的
#购物车 充当中间 环节,与 用户 一对多,同时 与 商品一对多

class Cart(models.Model):
    user = models.ForeignKey('df_user.User')
    goods = models.ForeignKey('df_goods.GoodInfo')
    count = models.IntegerField()

2. 视图函数

1.购物车显示页面
这个页面就是根据用户获取所有的cart对象,传入模板,然后提取出商品信息和数量并加载

@user_decorator.login
def cart(request):
    uid = request.session.get('uid')
    carts = Cart.objects.filter(user_id=uid)

    context = {'title': '购物车',
               'name': 1,
               'carts': carts}
    return render(request, 'df_cart/cart.html', context)

2.加入购物车的视图函数
在模板中加入购物车的视图函数是通过ajax异步发送的,这样的化需要返回json格式的数据。传入参数为商品id和数量

@user_decorator.login
def add(request,gid,gcount):
    gid = int(gid)
    gcount = int(gcount)
    uid = request.session.get('uid')
    carts = Cart.objects.filter(goods_id=gid,user_id=uid)
    #先判断 该用户 购物车中 是否 存在 该商品
    #如果纯在,则仅作数量上的 加法
    if len(carts) >= 1:
        cart = carts[0]
        cart.count += gcount
    else:
        cart = Cart()
        cart.user_id = uid
        cart.goods_id =gid
        cart.count =gcount
    cart.save()
    #判断请求方式 是否是ajax,若是则返回json格式的 商品数量即可
    if request.is_ajax():
        count = Cart.objects.filter(user_id=uid).count()
        return JsonResponse({'count':count})
    else:
        return  redirect('/cart')

3.接下来是编辑购物车信息的请求函数
同样编辑购物车中的商品,数量信息也是通过ajax来异步请求的

def edit(request,cid,gcount):#传入 cart id 和 count 改变Cart
    try:
        cart = Cart.objects.get(pk=int(cid))
        cart.count = int(gcount)
        cart.save()
    except:
        return JsonResponse({'count':gcount})
        #如果错误就将原来的数量返回去

    return JsonResponse({'count':0})

4.最后是删除一行 购物车中的商品的 请求函数
直接做物理删除

def delete(request,cid):
    try:
        cart=Cart.objects.get(pk=int(cid))
        cart.delete()
        data ={'ok':1}
    except:
        data={'ok':0}
    return JsonResponse(data)

3. 模板和js

购物车是用到js最多的地方,商品数量的加减,加入购物车,顶部购物车显示商品类别数量,小计与总计,从页面上删除一行商品。

1.购物车显示页面的js


2.详情页加入购物车的js
里面的动画效果看不懂,但是主要请求看懂就行了


购物车基本完成了,收获很大,下一个是订单模块。

你可能感兴趣的:(django项目-电商平台(4)-购物车模块)