zoukankan      html  css  js  c++  java
  • 美多商城项目之商品模块

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

    该花的钱要花,该吃的饭要吃。
  • 相关阅读:
    人生转折点:弃文从理
    人生第一站:大三暑假实习僧
    监听器启动顺序和java常见注解
    java常识和好玩的注释
    182. Duplicate Emails (Easy)
    181. Employees Earning More Than Their Managers (Easy)
    180. Consecutive Numbers (Medium)
    178. Rank Scores (Medium)
    177. Nth Highest Salary (Medium)
    176. Second Highest Salary(Easy)
  • 原文地址:https://www.cnblogs.com/chao666/p/12263651.html
Copyright © 2011-2022 走看看