django项目开发之cart页面

cart页面

1.购物车页面添加商品

我们在app上购买商品,都是先在商品页选择商品添加到购物车,然后从购物车结算,考虑一下怎么实现这个功能。

1.1 表的关联

商品,购物车,用户之间,可以转换为表的关联,购物车相当于关系表的角色,用户和商品之间成为多对多的关系。
首先去models.py写购物车的模型

class Cart(models.Model):
    c_user=models.ForeignKey(User)
    c_goods=models.ForeignKey(Goods)

    c_goods_num=models.IntegerField(default=1)
    c_is_select=models.BooleanField(default=True)
    class Meta:
        db_table = 'sxw_cart'

在新版本的django中,外键必须添加on_delete=models.CASCADE属性,否则会报错。外键关联到用户和商品,采用级联删除,当购物车中删除的时候,用户也删除相关信息。
执行数据迁移。

1.2 获取商品id,数量num

当点击购物车的时候,添加一个点击事件,这个事件发起了一个ajax请求,通过js,把goodsid传到后台,

market.js

 $(".addShopping").click(function(){
   
        console.log('add');
        var $add=$(this);
        var goodsid=$add.attr('goodsid');
        $.get('/sxw/addtocart/',{
   'goodsid':goodsid},function(data){
   
            console.log(data);
            if (data['status'] === 302){
   
                window.open('/sxw/login/',target="_self");
            }else if(data['status']===200){
   
                $add.prev('span').html(data['c_goods_num']);
            }
        })
    })

1.3 将商品id和num传到后台

上面的步骤已经取到了商品的id和num,接下来使用ajax传到后台。先将数据传到/sxw/addtocart/
function(data)是一个回调函数,作用是当ajax请求发起后,在后台接受到请求后,会主动调用这个函数,把数据放到data里。
写一个视图函数,因为是ajax请求,所以返回json会比较好。

def add_to_cart(request):
    goodsid=request.GET.get('goodsid')
    #获取到商品id,根据用户和商品id,获取到购物车数据
    carts=Cart.objects.filter(c_user=request.user).filter(c_goods_id=goodsid)
    #如果购物车中有该商品,该商品数量加1;如果没有,将该商品id加入购物车
    if carts.exists():
        cart_obj=carts.first()
        cart_obj.c_goods_num = cart_obj.c_goods_num + 1
    else:
        cart_obj=Cart()
        cart_obj.c_goods_id=goodsid
        cart_obj.c_user=request.user
    cart_obj.save()
    data={
   
        'status':200,
        'msg':'add success',
        'c_goods_num':cart_obj.c_goods_num
    }
    #返回购物车中该商品数量
    return JsonResponse(data=data)

最后,添加下url

 url(r'^addtocart/',views.add_to_cart,name='add_to_cart'),

1.4 从购物车移除商品

从购物车移除商品的做法与添加一样。
market.js

$(".subShopping").click(function(){
   
    console.log('sub');
    var $sub=$(this);
    var goodsid=$sub.attr('goodsid');
    $.get('/sxw/subtocart/',{
   'goodsid':goodsid},function(data){
   
        console.log(data);
        if (data['status'] === 302){
   
            window.open('/sxw/login/',target="_self");
        }else if(data['status']===200){
   
            $sub.prev('span').html(data['c_goods_num']);
        }
    })
})

视图函数

def sub_to_cart(request):
    goodsid = request.GET.get('goodsid')
    carts = Cart.objects.filter(c_user=request.user).filter(c_goods_id=goodsid)
    data = {
   
        'status': 200,
        'msg': 'add success',
    }
    if carts.exists()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值