仿天猫网站5:Django传递数据给js

需求描述

在产品页面点击“加入购物车”,将界面上的“加入购物车”按钮变为灰色不可点击状态。
这里写图片描述


需求分析

点击按钮后,访问地址/foreaddCart,导致AddCartView类被调用,urls文件配置如下:

# 加入购物车
url(r'^foreaddCart/$', AddCartView.as_view(), name="addCart")

在AddCartView中重写get方法,步骤和点击“立即购买”一样,但返回不同(立即购买,返回的时渲染的提交订单页面)

class AddCartView(View):
    def get(self, request):
        item_id = request.GET.get("pid", "")
        num = request.GET.get("num", "")
        item = Product.objects.get(id=int(item_id))

        user = request.user
        found = False

        all_oi = OrderItem.objects.filter(user_id=user.id, order_id__isnull=True)
        for oi in all_oi:
            if oi.product.id == item.id:
                oi.number += int(num)
                oi.save()
                found = True
        if not found:
            oi = OrderItem()
            oi.user = user
            oi.number = num
            oi.product = item
            oi.save()
        # return HttpResponse(json.dumps(res), content_type='application/json')
  1. 首先是获取参数pid和num(其中num由js控制),根据pid找到相应的产品,找到user对象。
  2. 如果已经存在这个产品对应的OrderItem,并且没有生成订单,就应该在对应的OrderItem基础上,调整数量。
  3. 基于用户对象user,查询没有生成订单的订单项集合
  4. 遍历集合,找到一样的产品,追加数量。
  5. 更新到数据库
  6. 要是没找到对应的orderItem,那么就新增一个订单项OrderItem
  7. 生成新订单项,设置用户、产品和数量
  8. 更新到数据库
  9. 返回一个字符串,这里涉及到Django传递数据给js

Django传递数据给js


网上查找教程

原文地址
已知两种方式:

  1. 页面加载完成时,在页面上操作,在页面上通过ajax方法得到新的数据(再向服务器发送一次请求)并显示在网页上,适用于页面不刷新的情况,动态加载内容。比如用户输入一个值或者点击某个位置,动态将相应的内容显示在网页上。
  2. 直接在试图函数(view.py中的函数)中渲染一个list或dict的内容,和网页其他部分一起显示在网页上,(一次性的渲染,还是同一次请求)

在此我使用第一种方式。


jquery与django实现ajax通信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值