美多商城项目之商品模块

摘要:
因为产品数据被划分为产品图像数据(文件),…)产品图像数据(文件)需要由单独的文件存储服务器管理文件存储服务器:FastDFS如何安装和运行文件存储服务器?…)它可以直接放在MySQL数据库中进行管理。1.FastDFS是一个开源的轻量级分布式文件存储服务器客户端:

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

免责声明:文章转载自《美多商城项目之商品模块》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇c++STL之heap(堆)StreamReader 读取文本文件乱码问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

标准Table.TransformColumns(Power Query 之 M 语言)

数据源:         任意数据源,其中有一列数值 目标:         对数值列进行四则运算等计算  操作过程:         选取待计算的数值列》【转换】》【标准】》选取    M公式:   = Table.TransformColumns( 表, {{"列名1", 转换函数1, 数据类型1},…,{"列名n", 转换函数n, 数据类型n}},...

wxWidgets刚開始学习的人导引(2)——下载、安装wxWidgets

wxWidgets刚開始学习的人导引全目录   PDF版及附件下载 1 前言2 下载、安装wxWidgets3 wxWidgets应用程序初体验4 wxWidgets学习资料及利用方法指导5 用wxSmith进行可视化设计附:学习材料清单 2 下载、安装wxWidgets   这方面的资料从网络能够找到不少。wxWidgets的文档,要涵盖各种操...

Fiddler修改web端ajax响应结果,方便测试展示

1、下载安装Fiddler,版本如下; 2、安装完成后启动Fiddler并设置代理; (1)选择Tools->Options (2)打开Options后,选择HTTPS; (3)切换至Connections;  3、代理设置完成,访问目标网站,找到要拦截的请求;  4、选中要拦截的请求,点击鼠标右键,选择Save->Response-...

excel文件使用navicat工具导入mysql的方法

1、在excel文件的sheet上,第1行下面插入一行,对应DB里面的字段名称,方便后面导入时做字段匹配: 2、使用Navicat ,打开工具,选择表所在的数据库,然后点击数据库名字,右键Tables,出来下拉菜单选择import wizard(中文版:导入向导).弹出一个选择界面,选择excel file文件 3、点击next(下一步),选择对应...

Android百度地图开发-第一篇:申请、搭建百度地图

一、前言 这是第一篇关于Android使用百度地图的学习记录,主要记录:   1.在百度地图开发者平台上申请API Key。   2.在自己的应用中加入百度地图的Android版SDK。   3.在自己的应用中显示一个地图。 二、在百度地图开发者平台上申请API Key 百度地图开发者平台地址:http://lbsyun.baidu.com/index....

如何通过外部表做数据一致性检查和配平

背景 随着微服务和分布式架构的兴起及用户对数据高可用的重视。现在系统中的数据会通过程序定时同步、抽数工具、复制工具等在多个数据库中存在多份。但因为程序异常、网络异常、数据异常等各种原因,会出现数据不一致的情况。如何能简单快速检测出数据不一致并且配平呢?本文通过PostgreSQL的fdw机制,介绍一种简单的配平方法。 环境准备 源数据库 IP:xx....