1 Star 0 Fork 4

ahcfl_leon / python_dailyfresh

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

dailyfresh mall based on B2C model

项目介绍

dailyfresh是基于python的django框架并采用B2C方式开发的一款购物商城项目。 输入图片说明

软件架构

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

开发配置说明

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作中间件。

问题一:用户注册发激活邮件时,可能发送邮件所需的时间较长,客户端会需要等待一段时间,体验感不好。怎么优化呢?
答:
可以将耗时的发送邮件任务放到后台异步执行,交给Celery任务队列处理。 使用Redis作为中间件,监听任务队列,交给Worker执行。

问题二:Django框架本身内置的文件存储只能存放小文件,不能解决项目的海量图片存储。应该怎么处理呢?
答:
引入FastDFS+Nginx对商品图片进行存储和调度。FastDFS 是C编写的一款开源分布式文件系统。
充分考虑了冗余备份、负载均衡、线性扩容等机制。使用 FastDFS 很方便搭建一套高性能的文件服务器集群,提供文件上传下载等服务。

问题三:开发过程中,用户的浏览记录和用户购物车商品信息如何存储,以什么格式存储呢?
答:
Redis存储用户历史浏览记录, 采用list数据结构,例如: history_userId: [skuid1,skuid2,skuid3];
存储用户购物车商品信息,采用hash数据结构,例如:cart_userid: {'sku_id1': num, 'sku_id2': num}。

问题四:用户访问量过大时,每次都需要从数据库动态获取首页页面数据,数据库查询次数较多,考虑到DDOS攻击,怎么解决呢?
答:
可以把首页第一次查询的数据在Redis缓存存储。当用户再次查询这些数据时,先从缓存中获取,如获取不到,再去查询数据库,减少数据库的查询次数。

问题五:订单并发处理
答:
可以进行加锁处理,悲观锁首先对数据进行了定位和加锁,再去获取数据。其他事务要想获取锁,必须等原事件结束。
乐观锁在进行操作时不会加锁,提交更正时才进行判断。所以,在本项目并发冲突比较少的场景,可以引入乐观锁。

空文件

简介

dailyfresh是基于python并采用django框架开发的一款B2C购物商城项目。 展开 收起
Python 等 4 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/ahcfl_leon/python_dailyfresh.git
git@gitee.com:ahcfl_leon/python_dailyfresh.git
ahcfl_leon
python_dailyfresh
python_dailyfresh
master

搜索帮助