跟着视频做的天天生鲜web项目告一段落了,做个总结
技术栈:python,django,mysql,redis
1、天天项目是生鲜类产品 B2C PC端网站,包括四大模块
2、功能模块:用户模块,商品模块,购物车模块,订单模块
3、用户模块:注册,激活,登录,退出,个人中心,地址页面
4、商品模块:首页,详情页面,列表页面,搜索(hasystack+whoosh)
5、购物车模块:增加,修改,删除,查询
6、订单模块:确认订单页,订单创建(下单),请求支付,查询支付结果,评论
7、django默认的用户认证模型类AbstractUser:
django默认是有用户模型类的,当需要自己定义用户模型类时,让这个模型类去继承django自带的AbstractUser类,就可以使用django用户认证系统的所有方法,如常用的create_User,authenticate,login,logout,is_authenticated,login_required装饰器(没登陆的话记得改为跳转到登陆界面)。最后一定要记住去项目的settings文件中把django的认证系统使用的模型类AUTH_USER_MODEL改为"user.User"。
开发的时候普遍的原则:当前端访问你的某一个地址之后,如果前端携带了数据,你首先应该对这些数据进行接收,接收完后进行校验(防止非法请求),紧接着核心业务处理,处理完后给他返回应答。
8、itsdangerous(使用dumps方法对user_id进行加密)生成签名的token,并把用户的token加到激活链接传给激活视图使用loads解密
9、发邮件 (django提供邮件支持,send_mail)但是你得用celery去完成
10、celery异步队列:把代码中一些耗时的操作交给异步队列做,代码正常往下执行发出者发出任务,broker生成任务队列,worker监听任务队列。启动worker:celery -A celery_tasks.tasks worker -l info
11、页面静态化 (celery,nginx)
把原本动态的页面处理结果保存成html文件,让用户直接访问这个随管理员修改动态生成出来的静态html页面,因为电商网站的商品修改更频繁,所以后台管理类是商品模块的admin文件。
12、数据缓存cache(保存的位置,有效期,与数据库的一致性问题):将处理的结果先临时保存在redis,下次使用的时候可以先直接使用,如果没有这个备份数据,再去查询redis。
**页面静态化和数据缓存本质就是减少对数据库的查询次数,一定程度防止网站DDOS恶意攻击,即网站性能的优化。
**
13、django二次开发对接fastdfs:修改django默认的文件存储系统,更改django上传文件行为(自定义文件存储类),要配置你的存储类为这个类
14、商品搜索(whoosh 索引 分词:替换为jieba)
15、购物车 redis 哈希存储 历史记录 redis list存储:
redis保存用户的购物车记录:点击加入购物车添加,访问购物车页面时从redis中获取给前端显示,用hash存储每一个用户的购物车记录,统计hash中的元素数量用hlen
用户的历史浏览记录使用redis存储,使用list类型,每个用户的历史浏览记录用一个list数据来存储,并且在左侧插入,保持最新在用户访问某个商品详情页时添加。
16、ajax都是放在jquery中向后端发起请求。不会放在原生js中
17、事务
18、高并发的库存问题(悲观锁、乐观锁):
防止卖出的商品多于库存,冲突少用乐观,冲突多用悲观。
19、商品首页,详情页,列表页这三个页面有一个共同的特点:都不涉及到数据的修改,都是从数据库里面把信息查出来,在页面做一个遍历的显示,动态给遍历出来的对象增加属性来存储查询出来的数据
20、前后端交互一定要有这些意识:
确定前端是否要给后端传递数据,传递什么数据,什么格式
确定前端访问的方式:表单(post还是get),ajax(post还是get))
确定后端返回给前端什么数据,什么格式
jquery比较重要的就是ajax请求,涉及到和后端交互的那一块
21、订单支付:对接支付宝:
用户在用户订单中心点击去付款,前端ajax post方式把订单id传到后端,后端处理,调用支付宝支付接口,支付宝平台返回支付宝页面地址,后端把这个url返回给前端,前端引导用户到这个url的页面,用户登录付款,
最后还要加上一个用户查询订单支付结果的业务视图,还是要调用支付宝的查询接口,支付宝平台返回支付结果,再给用户显示出来。
22、项目部署:(uwsgi作为服务器 nginx 负载均衡并提供静态文件)
部署不是开发人员做的事,有专门的运维人员。