• 美多商城项目之商品模块


    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 查询用户浏览记录

    该花的钱要花,该吃的饭要吃。
  • 相关阅读:
    Hadoop脚本:自动搜集所有节点上的异常信息
    Hadoop脚本:重新初始化所有节点
    Hadoop入门:最应该看的几篇文章
    Hadoop脚本:用Streaming方式使用Hadoop
    [SaaS研究] SaaS在中国 / 中国的Salesforce / 阿里巴巴 / 阿里软件 [ 转 ]
    Hadoop常见问题与解决方法汇总
    Hadoop:你所不知道的一些相关项目
    Hadoop MapReduce 学习
    有多少项目准备和Hadoop比拼?
    开放源码的云计算平台:触手可及的云计算 [ 原 ]
  • 原文地址:https://www.cnblogs.com/chao666/p/12263651.html
Copyright © 2020-2023  润新知