day050 dailyfresh_项目总结

目录:

  • 用户访问流程
  • 模块剖析
  • 用户模块
  • 商品模块
  • 购物车模块
  • 订单模块
  • 部署
  • 后端服务提供

一、用户访问流程:

这里写图片描述

说明:
用户访问nginx代理服务器进入天天生鲜服务器,以上图为例。

  1. nginx代理服务器IP为192.168.103.129,服务端口80。

  2. 天天生鲜服务器IP为192.168.103.1,服务端口8090。

  3. 用户优先进入商品主页。

  4. 通过商品主页作为入口,可以进入用户模块页面、商品模块页面、购物车模块页面和订单模块页面。

二、模块剖析:用户模块

这里写图片描述

说明:

  1. 注册和登录都使用Django用户认证系统完成。

  2. http://python.usyiyi.cn/documents/django_182/topics/auth/default.html

  3. 用户注册成功后,需要进入激活邮件点击激活链接来激活账号。

  4. 激活邮件的发送不能阻塞注册成功后的响应,所以需要异步发送激活邮件。

  5. 激活链接中需要包含用户注册后的ID,用于服务器识别是谁要激活。

  6. 使用itsdangerous模块处理用户ID的明文信息,对其进行签名计算,转成暗文。并可以将暗文转成明文。

  7. 使用celery服务器,异步发送激活邮件,避免阻塞了注册的响应。

  8. celery服务器使用步骤:

    a. 选定作为celery服务器的计算机。
    b.进入虚拟环境,安装celery包。
    c.创建celery客户端对象。
    d.定义celery异步任务。
    e.将异步任务代码放到celery服务器。
    f.开启celery服务器。
    g.触发发送邮件的异步任务。

  9. 登录成功后,更换存储状态保持信息的引擎,将存储位置由django_session表切换到Redis数据库。

  10. 设计浏览记录存储和读取方案:
    a.浏览记录在用户访问商品详情页时产生。
    b.存储到Redis数据库。
    c.存储类型为list列表,存储前需要去重,存储后需要截取。
    d.存储浏览的商品的ID。
    e.操作Redis数据库工具是django-redis模块。
    f.每次读取五条浏览记录。

11.login_required装饰器用于装饰视图函数,判断用户是否登录,如果用户已登录就进入视图,反之,重定向到登录页面。

12.http://python.usyiyi.cn/documents/django_182/topics/auth/default.html - limiting-access-to-logged-in-users

三、模块剖析:商品模块

这里写图片描述

说明:

  1. 商品模块需要使用的静态图片都被存储到FastDFS服务器上。

  2. 通过nginx服务器访问到FastDFS服务器上存储的静态图片。

  3. 商品主页、详情页和列表页逻辑相似,都是查询商品数据并展示。

  4. 主页优化:
    a.页面静态化
    1.将主页生成为一个静态的html文件,存放于nginx服务器。
    2.当用户未登录时,访问nginx服务器上的静态主页。
    b.缓存
    1.将主页上下文数据存储到Redis数据库。
    2.当用户已登录时,先从Redis数据库中读取缓存数据。
    3.如果有缓存数据,就使用缓存数据。
    4.如果没有缓存数据,就查询数据库。
    5.注意 : 购物车数据不能被缓存,因为登录用户的购物车数据可能不一样。

  5. cache模块
    a.操作缓存的工具包,可以将数据缓存到Redis数据库。
    b.http://python.usyiyi.cn/translate/django_182/topics/cache.html

  6. 商品详情页,需要按照浏览记录存储方案,实现用户浏览记录的存储。

四、模块剖析:购物车模块

这里写图片描述

说明:

  1. 用户已登录时,使用django-redis模块操作Redis数据库,对购物车数据进行增删改查。

  2. 用户未登录时,使用json模块操作json字符串,对购物车数据进行增删改查。

五、模块剖析:订单模块

这里写图片描述

说明:

  1. 订单确认
    a.购物车的去结算或者商品详情的立即购买会进入订单确认页面。
    b.去结算或立即购买时,收集购物车页面或商品详情也的数据,作为订单确认需要展示的数据。

  2. 订单提交
    a.订单提交过程中需要分别保存订单信息和订单中商品信息。
    b.关系:一对多,一个订单中包含多个商品信息。
    c.使用事务,保证订单提交过程中,订单信息和订单中商品信息一对多的关系不出错。
    d.使用乐观锁,保证并发下单情况下,库存数据正确。

  3. 订单展示
    查询所有订单信息,分页展示。

  4. 对接支付宝
    a.步骤:
    1.创建应用,开发阶段使用沙箱模式。
    2.生成秘钥,应用私钥和应用公钥。
    3.下载SDK,python-alipay-sdk。
    4.创建alipay对象。
    5.调用支付和查询接口。
    b.调用支付接口
    1.返回访问支付宝支付页面的url。
    2.用户可以使用url打开支付宝支付页面,进行支付行为。
    c.调用查询接口
    1.返回json格式的订单状态数据。
    2.使用code、trade_status字段判断订单是否支付成功。
    3.如果支付成功,记录支付宝维护的订单ID,并修改订单状态为待评价。
    4.如果支付失败,提示用户支付失败。

  5. 订单评论
    a.展示要评价的订单信息。
    b.接受用户的订单评价数据,存储到数据库。

五、部署

这里写图片描述

说明:

  1. uWSGI服务器
    a.运行天天生鲜项目的服务器,处理天天生鲜项目中的动态逻辑。
    b.安装uwsgi协议并启动天天生鲜程序。

  2. nginx服务器
    a.代理服务器,用户直接访问nginx服务器。如果是动态逻辑就代理给天天生鲜项目所在的uWSGI服务器。
    b.处理天天生鲜项目中的静态逻辑,读取静态主页,读取fdfs中静态图片,读取静态css和js等。
    c.实现负载均衡。

六、后端服务

这里写图片描述

  1. MySQL
    a.存储用户数据,商品数据,订单数据。
    b.实现主从同步和读写分离。

  2. Redis
    a.存储缓存数据,购物车数据,session数据。
    b.使用django-redis模块操作Redis数据库。

  3. Celery
    a.负责天天生鲜项目中的异步任务处理。
    b.异步发送激活邮件。
    c.异步生成静态主页。
    d.搭配nginx服务器实现静态主页的读取。

  4. FastDFS
    a.负责天天生鲜项目中的静态图片的存储。
    b.搭配nginx服务器实现静态图片的读取。

猜你喜欢

转载自blog.csdn.net/michael_cool/article/details/80056861
今日推荐