Code Monkey home page Code Monkey logo

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

jet-chenbo avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.