Django项目实战----点击商品分类查询出商品和销量排行

点击商品分类查询商品

流程
  1. 用户点击三级分类进入这个分类的商品页并发送一个请求
    1.1 前端发送的参数有:分类id,页数,一页多少条数据,排序方式
  2. 后端接收请求和参数
  3. 前端需要的数据格式
    3.1 count为总页数
    在这里插入图片描述
  4. 去数据库查询这个分类的对象
  5. 获取这个分类对象的三级分类,前端需要三级分类的名字弄到面包屑导航上
  6. 查询这个分类对象下的所有的上架商品数据并按前端给的排序方式排序(按照创建时间)
  7. 创建分页对象
  8. 组织数据
  9. 返回数据

代码

# /list/115/skus/?page=1&page_size=5&ordering=-create_time
class ListView(View):
    def get(self, request, category_id):
        # 获取前端数据  页数 一页几条数据 排序方式
        page = request.GET.get('page')
        page_size = request.GET.get('page_size')
        ordering = request.GET.get('ordering')
        # 查询分类对象
        try:
            category = GoodsCategory.objects.get(id=category_id)
        except Exception as e:
            print(e)
            return JsonResponse({'code': 400, 'errmsg': '分类查询失败'})
        # 获取三级分类的名字
        breadcrumb = get_breadcrumb(category)
        # 查询分类对象下的所有商家的商品数据
        try:
            skus = SKU.objects.filter(category=category, is_launched=True).order_by(ordering)
        except Exception as e:
            print(e)
            return JsonResponse({'code': 400, 'errmsg': '查询商品失败'})
        # 分页
        paginator = Paginator(skus, page_size)
        page_skus = paginator.page(page)
        # 组织数据
        sku_list = []
        for sku in page_skus:
            sku_list.append({
                'id': sku.id,
                'name': sku.name,
                'price': sku.price,
                'default_image_url': sku.default_image.url,
            })
        # count为总页数
        count = paginator.num_pages
        # 返回数据
        return JsonResponse({'code': 0, 'errmsg': 'ok', 'breadcrumb': breadcrumb, 'list': sku_list, 'count': count})
        

get_breadcrumb()方法获取三级分类代码

def get_breadcrumb(category):
    """
    获取面包屑导航
    :param category: 商品类别
    :return: 面包屑导航字典
    """
    breadcrumb = {
        'cat1': '',
        'cat2': '',
        'cat3': '',
    }
    if category.parent is None:
        # 当前类别为一级类别
        breadcrumb['cat1'] = category.name
    elif category.parent.parent is None:
        # 当前类别为二级
        breadcrumb['cat2'] = category.name
        breadcrumb['cat1'] = category.parent.name

    else:
        # 当前类别为三级
        breadcrumb['cat3'] = category.name
        breadcrumb['cat2'] = category.parent.name
        breadcrumb['cat1'] = category.parent.parent.name

    return breadcrumb

销量排行的数据

逻辑流程
  1. 分类商品页发送销量排行请求,传过来分类id

  2. 根据分类id去数据库查询分类对象,再根据对象查询这个分类下的所有上架的商品数据,并以销量倒序排列

  3. 组织成前端需要的数据
    在这里插入图片描述

  4. 返回数据

代码
这里商品数据有限,注释的为显示10条销量排行的商品数据

# http://www.meiduo.site:8800/hot/115/
class HotGoodsView(View):
    def get(self, request, category_id):
        """
        查询销量排行
        :param request:
        :param category_id: 分类id
        :return: 返回json数据状态和销量排行的商品数据
        """
        try:
            # 根据分类id查询分类对象
            category = GoodsCategory.objects.get(id=category_id)
        except Exception as e:
            print(e)
            return JsonResponse({'code': 400, 'errmsg': '分类查询失败'})
        try:
            # 根据分类对象查询商品数据 按销量排序 倒序
            skus = SKU.objects.filter(category=category, is_launched=True).order_by('-sales')
        except Exception as e:
            print(e)
            return JsonResponse({'code': 400, 'errmsg': '查询商品失败'})
        # count = 1
        # hot_sku_list = []
        # for sku in skus:
        #     if count == 10:
        #         break
        #     hot_sku_list.append({
        #         'id': sku.id,
        #         'name': sku.name,
        #         'price': sku.price,
        #         'default_image_url': sku.default_image.url,
        #     })
        #     count += 1
        try:
            hot_sku_list = [
                {
                    'id': skus[0].id,
                    'name': skus[0].name,
                    'price': skus[0].price,
                    'default_image_url': skus[0].default_image.url,
                },
                {
                    'id': skus[1].id,
                    'name': skus[1].name,
                    'price': skus[1].price,
                    'default_image_url': skus[1].default_image.url,
                }
            ]
        except Exception as e:
            print(e)
            hot_sku_list = []

        return JsonResponse({'code': 0, 'errmsg': 'ok', 'hot_skus': hot_sku_list})

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值