View Code? Open in Web Editor
NEW
This project forked from jet-chenbo/django-dailyfresh
预览:
Home Page: http://49.234.189.74/
Python 36.35%
TSQL 18.25%
CSS 11.57%
HTML 29.97%
JavaScript 3.87%
django-dailyfresh's Introduction
- 注册账号需要到邮箱中去激活,为了方便,我设置了注册的账号默认为激活状态
- 所有的商品图片和首页的商品分类展示都是可以在后台进行修改,因为
图片有限但是把每个分类的图片铺满才美观,并不是没有按照分类来展示图片
- 提交订单时请选择支付方式为
支付宝
,我调用的支付宝接口,模拟的沙箱付款。账号是 [email protected]
密码和支付密码是 6个1
- 用户模块:注册、登录、激活、退出、个人中心、地址
- 商品模块:首页、详情、列表、搜索(haystack+whoosh)
- 购物车模块:增加、删除、修改、查询
- 订单模块:确认订单页面、订单创建(下单)、请求支付、查询支付结果、评论
- 页面静态化:把动态的首页处理保存成静态的html页面,用户直接访问的是静态的首页,不需要查询数据库,从而提高网站性能
- celery:异步任务处理
- 缓存数据:将需要大量查询数据库的页面的数据缓存起来,如果从缓存中获取不到才会查询数据库
cache.set cache.get
- 订单的并发处理:见下
- FastDFS分布式文件存储系统 以及 nginx 加快获取图片的效率
- redis
- 作为django缓存,存储session信息.
- 用list类型保存用户的历史浏览记录,格式为 'history_用户id':[商品id]
- 用hash类型保存用户购物车的信息,格式为 'cart_用户id':{'商品id':商品数目, '商品id':商品数目}
- celery:异步任务处理。用于发送邮件以及生成静态首页。用redis作为中间人
- FastDFS:分布式文件存储系统。结合 nginx 获取图片来提高网站访问图片的效率
- haystack搜索框架和 whoosh 搜索引擎,用 jieba 库进行分词.以商品的名字、简介以及详情作为搜索依据
- mysql
- 作为项目的数据库
- 订单创建过程:向订单表中插入一条订单信息->查询商品信息以及库存->更改商品库存->向订单商品表中插入购买的商品数据
- mysql事务:订单的创建过程放在一个事务中,确保安全。
- 订单并发处理
- 在用户量比较多的情况下,在查询商品信息的时候加锁,事务结束后解锁
- 用户名量较少时,不需加锁,在更新商品库存时再次查询商品库存,对比与上次查询的结果是否一致,因为有偶然,所以将这个过程循环执行三次
- uwsgi:作为web服务器
- nginx:作为调度服务器,详细看下面的项目架构
- 发送邮件:用 163的SMTP服务器,通过 celery 异步发送,并且将用户的id通过 Itsdangerous 库加密传输。用户通过邮件激活用户信息
- 分页:Paginator和Page类,将查询到的商品信息分页显示
- 类视图:根据请求的方式不同而调用不同的函数,例如POST,GET,Put,Delete等请求方式。
- 登录认证
- 用户认证:
user = authenticate(username=username, password=password)
- 保存登录状态:
login(request, user)
login()使用Django的session框架来将用户的ID保存在session中
- 检测是否登录:
request.user.is_authenticated()
- 登录装饰器:用login_required装饰器来装饰用户登录之后才能访问的页面的视图函数,我用了一个类将装饰器封装起来,使得直接让视图类继承就能达到效果
- 付款:调用支付宝API进行付款和查询结果,用的沙箱环境
- 项目架构:用户的请求都是提交到nginx服务器,nginx实现负载均衡,并且启动多个uwsgi服务,nginx会将请求随机转发给一个uwsgi服务器
nginx将请求分为三类,nginx会做出不同的处理:
- 请求静态资源(ip:port/static/....),nginx直接查找之后返回
- 请求动态资源(ip:port/......),将请求转交给uwsgi服务器,uwsgi调用application函数与django交互,最后依次返回信息给用户
- 请求静态首页(ip:port),nginx将请求转发给存放静态首页资源的电脑上的nginx服务器,依次返回信息
django-dailyfresh's People
Contributors