# python_dailyfresh **Repository Path**: jackenshin/python_dailyfresh ## Basic Information - **Project Name**: python_dailyfresh - **Description**: 基于python-django开发的B2C天天生鲜商城(dailyfresh mall based on B2C model) - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2021-07-06 - **Last Updated**: 2021-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # python_dailyfresh #### 介绍 基于python-django开发的B2C天天生鲜商城(dailyfresh mall based on B2C model) #### 软件架构 ``` 1. 语言:Python3.* (Django) 2. 数据库: MySql、 redis 3. 任务队列(异步处理): celery(django-celery) 4. 分布式文件存储: FastDFS 5. 搜索引擎(商品检索): haystack(django-haystack)、whoosh、二次开发 6. web服务器配置: Nginx+ uwsgi 7. 开发环境: PyCharm、Linux、vim 开发架构 采用Browser/Server(浏览器/服务器)结构,构建网站商城系统, 部署架构 Nginx+uwsgi deploy ``` #### 使用说明 [开发配置说明](https://gitee.com/ahcfl_leon/python_dailyfresh/tree/master/%E9%A1%B9%E7%9B%AE%E5%BC%80%E5%8F%91%E6%96%87%E6%A1%A3) #### 特技 ``` 主体模块 1. 用户模块 2. 商品相关模块 3. 购物车相关模块 4. 订单相关模块 数据库表设计 1. SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。 【简单来说,属性值、特性相同的商品就可以称为一个SPU】 例如,华为手机可以是一个SPU,小米手机也可以是一个SPU,这个与商家无关,与颜色、款式、套餐也无关。 2. SKU库存进出计量的单位, 可以是以件、盒、托盘等为单位,在服装、鞋类商品中使用最多最普遍。 例如,衣服中一个SKU,通常表示:规格、颜色、款式。 功能与性能优化 案例1:用户注册发激活邮件时,可能发送邮件所需的时间较长,客户端会需要等待,用户体验不好。 案例2:用户访问量过大时,每次都需要从数据库动态获取首页页面数据,数据库查询次数较多,也要考虑到DDOS攻击。 改进: 把耗时的任务放到后台异步执行,此处使用celery任务队列, 其中使用redis作中间件。 1. redis存储用户历史浏览记录, 采用list数据结构: History_用户id: [skuid1,skuid2,skuid3] 2. 使用redis存储用户购物车商品信息,采用hash数据结构: cart_userid: {'sku_id1': num, 'sku_id2': num} 3. 采用分布式文件系统,把商品图片等信息存储在FastDFS系统中, Nginx+FastDFS配合, 减少服务器的压力 4. 页面静态化: 首页、商品列表页、商品详情页等用户共同的页面, 把页面静态化,以减少对数据库的操作。当后台数据更改时自动重新生成静态页面。 5. 页面数据缓存,把页面使用的数据存放在缓存中,当再次使用这些数据时, 先从缓存中获取,如获取不到,再去查询数据库,减少数据库的查询次数 6. 订单并发 ```