美多商城项目之商品模块

1. FastDFS和Docker    

 1.0 为什么要使用FastDFS和Docker?        

因为商品数据分为了商品图片数据(文件),还有商品信息数据(字符串:商品名称,价格,...)
        商品图片数据(文件)需要使用单独的文件存储服务器进行管理
            文件存储服务器:FastDFS
            如何安装并运行文件存储服务器:Docker
        商品信息数据(字符串:商品名称,价格,...)可以直接放在MySQL数据库进行管理

    1.1 FastDFS        

  他是一个开源的轻量级分布式文件存储服务器
        Client:对接FastDFS的客户端,请求的发起者
        Tracker:调度、追踪服务器,调度和追踪Storage服务器的
        Storage:物理存储服务器,专门存储文件的
        补充:
            file_id:是文件在storage上的位置,上传文件成功后由storage返回的,可以用来访问该文件    

  1.2 Docker        

  他是应用发布、部署、安装的解决方案。他是以容器技术来发布、部署、安装应用的。
        镜像:类似于VM虚拟机中的镜像,是一个独立的文件系统,包含了运行某个应用所依赖的所有环境
        容器:类似于VM虚拟机中的资源库,是由镜像创建出来的,每个容器中都会独立的运行一个程序,环境是隔离的。
        镜像仓库:托管镜像的,有官方提供的镜像,还有自己创建的镜像
        命令相关的:见讲义中的即可,不需要记忆,用到的时候去搜索即可
            操作Docker的命令
            操作镜像的命令
            操作容器的命令

2. 首页广告    

 2.1 首页广告数据表     

        商品分类表、商品频道表、频道组表
        频道组表和商品频道表是一对多的关联关系
        商品频道表和商品分类表是一对一的关联关系
        
        广告类别表、广告内容表
        广告类别表和广告内容表是一对多的关联关系

    2.2 商品分类:        

  提示:查询商品分类是极其复杂的,因为商品分类的展示的结构很复杂
        重点:分析出要展示的数据的结构,后端要查询并构造的数据要根据前端展示的数据结构而来,从而方便前端渲染

    2.3 商品广告        

  核心思想:查询出所有的广告种类及其中的内容

    2.4 自定义Django文件存储类      

   2.4.1 分析了商品图片加载失败的原因
            因为数据库中保存的图片地址仅仅是file_id("group1/M00/00/01/CtM3BVrLmc-AJdVSAAEI5Wm7zaw8639396"),路径不全
        2.4.2 解决办法:
            我们需要给每张图片地址都拼接一个完整的图片下载地址
            "http://image.meiduo.site:8888/group1/M00/00/01/CtM3BVrLmc-AJdVSAAEI5Wm7zaw8639396"
        2.4.3 实现方式:
            自定义了文件存储类,重写了url方法,并在其中拼接完整的图片下载地址
            指定自定义的Django文件存储类 DEFAULT_FILE_STORAGE = '新的文件存储类'
        2.4.4 使用自定义的文件存储类
            {{ content.image.url }}

3. 商品列表页    

 3.1 商品数据表

        品牌表、SPU表、SKU表、SKU图片表
        以上四张表从左至右依次是一对多的关联关系

    3.2 排序和分页        

  3.2.1 排序查询
            核心思想:对当前指定分类下未被下架的商品进行排序
            实现方式:
                skus=SKU.objects.filter(category=category,is_launched=True).order_by(sort_field)
        3.2.2 分页查询
            创建分页器
            paginator = Paginator('要分页的模型列表数据', '每页记录的个数')
            查询出指定页码的数据
            page_skus = paginator.page('页码')
        3.2.3 注意点:
            需要先排序再做分页

    3.3 面包屑导航        

  核心思想:使用当前已知的三级分类查询二级分类,在使用二级分类查询一级分类
        实现方式:
      # 三级查二级(多查一:多方模型类.外键属性名)
      cat2 = category.parent  
      # 二级查一级
      cat1 = cat2.parent

     3.4 热销排行        

  核心思想:查询当前指定分类下未被下架的商品,按照销量由高到低排序,并取前两个
        实现方式:
        SKU.objects.filter(category_id=category_id,is_launched=True).order_by('-sales')[:2]

4. 商品搜索    

 4.1 全文检索方案Elasticsearch

        4.1.1 全文检索:
            对数据进行处理,建立包含索引的结构数据,再根据索引进行搜索。
            例如:将汉字装进新华字典,并准备索引,再根据索引查找汉字
            全文检索方案需要配合 搜索引擎 来实现
        4.1.2 搜索引擎:Elasticsearch
            对数据库中的数据进行一遍预处理,单独建立起一份索引结构数据
            进行全文检索时,将关键字在索引数据中进行快速对比查找,进而找到数据的真实存储位置

    4.2 Haystack扩展建立索引        

  4.2.1 准备Haystack扩展
            安装Haystack扩展
            Haystack注册应用和路由
            Haystack配置
        4.2.1 Haystack扩展建立索引
            创建索引类
            创建text字段索引值模板文件
            手动生成初始索引

    4.3 渲染商品搜索结果        

  重点:我们需要知道Haystack在搜索成功之后,向美多商城返回了哪些有些的数据,再根据返回的数据渲染页面
        数据:
            query:搜索关键字
      paginator:分页器
      page:当前页的page对象(遍历page中的对象,可以得到result对象)

5. 商品详情页    

 5.1 查询和渲染SKU详情信息        

   5.1.1 渲染SKU信息(商品名称,副标题,价格,图片,...)
            核心思想:使用sku_id查询出SKU信息即可
         5.1.2 渲染SPU信息(商品详情、规格包装、售后服务)
            核心思想:使用sku查询出对应的spu信息即可

    5.2 统计分类商品访问量        

  核心思想:
            统计当天某种分类的商品访问的总量
            每种分类每天只统计一条记录
        实现逻辑:
            判断当天指定的分类是否有访问记录
            如果没有访问记录:新建一条空记录,并保存访问量
            如果有访问记录:直接在原有的访问量的基础之上累加访问量

    5.3 用户浏览记录

        5.3.1 设计浏览记录存储方案
            存储数据:sku_id
            存储位置:redis
            存储类型:list
            存储逻辑:
                先确定需求:
                    1.浏览记录SKU信息不能重复
                    2.最近一次浏览的商品排在最前面
                    3.每个用户的浏览记录最多存储五个商品
                再确定存储逻辑
                    1.先去重:lrem
                    2.再添加:lpush
                    3.最后截取:ltrim
        5.3.2 保存用户浏览记录
        5.3.3 查询用户浏览记录

posted @ 2020-02-05 14:24  老王同鞋  阅读(466)  评论(0编辑  收藏  举报