博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django项目实战----点击商品分类查询出商品和销量排行
阅读量:2094 次
发布时间:2019-04-29

本文共 4108 字,大约阅读时间需要 13 分钟。

点击商品分类查询商品

流程

  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_timeclass 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})

转载地址:http://dquhf.baihongyu.com/

你可能感兴趣的文章
Redis (error) NOAUTH Authentication required.解决方法
查看>>
plsql窗口中文显示的是横版的 问题解决办法
查看>>
使用notePad修改将文件格式保存后不起作用
查看>>
如何查询oracle会话及锁 如何查锁了哪张表?如何杀掉会话
查看>>
Git常用命令速查手册
查看>>
Redis运维利器 -- RedisManager
查看>>
分布式之REDIS复习精讲
查看>>
分布式之数据库和缓存双写一致性方案解析
查看>>
Redis集群
查看>>
Oracle 查看和扩展表空间
查看>>
记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
查看>>
Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
查看>>
从cpu和内存来理解为什么数组比链表查询快
查看>>
CentOS7下使用YUM安装MySQL5.6
查看>>
JVM内存空间
查看>>
Docker 守护进程+远程连接+安全访问+启动冲突解决办法 (完整收藏版)
查看>>
从零写分布式RPC框架 系列 2.0 (4)使用BeanPostProcessor实现自定义@RpcReference注解注入
查看>>
Java 设计模式 轻读汇总版
查看>>
Paxos学习笔记及图解
查看>>
深入解析Spring使用枚举接收参数和返回值机制并提供自定义最佳实践
查看>>