MSTM年底总结
项目简介 做完这个项目,自己也做了测试,功能是正常可以使用的,暂时还没有上线,这个项目是用来卖课的,我自己做的是各个种类课程的展示,登录认证,还有各个接口,
还有支付环节,还有微信推送消息,加入他们要买这个平台课程,我们就要给他推送消息,还有一些活动给他推送消息。 项目周期 开始表结构设计,这个过程我也有参与,因为我们后台开发总共3个人,表结构设计就用了一个半月,我自己做的这些功能,
总共一个半月,但是做出来bug比较多,到我走的时候这个已经很完善了,基本在线上模拟已经可以了 购物车实现 我们前端用vue,我做的数据接口,她在页面点击,我就给他发送数据,我要的数据是一个课程id和用户id,肯定是用户登录之后才可以买,所以主要是这俩数据,
他只有通过了验证才可以买课程。 验证的实现--主要使用drf的auth组件,本来说要使用session,但我们前端意思是要一个随机字符串就行了,于是我使用了自定义的token,
就是当用户第一次登陆我就在数据库创建个字符串token,如果他已经登陆了,我就在数据库中更新这个字符串,使用的模块里的update_or_create这个,
我时新建了一个usertoken表,因为每次用户访问都会使用token,于是我就将uer表和usertoken表分开了,为了给数据库释放一些压力,加入不分开,
每次访问都得从数据库中找token,头像,用户名之类的一堆东西,效率慢,所以我新建了一个usertoken表,提高效率,减少数据库的连接次数。 继续,购买时,主要就是获取用户id,和课程id,我之前想着将数据加入mysql中,但是一想着,有的用户可能将商品加入到购物车而不买,有可能就给删了,
感觉就没必要一直把这些放到数据库中,于是就想到了redis,基于缓存存储,访问数据速度也快,这样既然用户花钱了,速度肯定越快越好,
给人家的体验也就得好。当时我在redis存数据时,坑比较多,当时设计的数据结构,套了一大堆字典,什么user_id一个大字典,里边课程id,里边课程的头像,
课程名称,价格策略之类的,一层套一层,但是,我发现我的页面要展示这些东西,在这个结构中查特麻烦,因为redis中村的都是字节串,
我把每一层字典循环出来后都要做dump,load,那么多层字典,很麻烦,我就想了很久,最后设计了一层,解决了这个问题,我只设计了一层,
键时shopping_car_userid_courseid,就这一个键对应整体的数据,里边就是课程图片,课程名字,课程价格,价格策略,在页面展示时就展示这些,
还有一个默认价格策略,因为价格策略在前端做的是一个select标签,select就是她存的价格策略可以随时改,我就把这个商品的所有价格策略都查询了出来,
我感觉这个价格策略做的很成功,买课时,我把一个课程分为了好几个价格策略,有前一个月免费,第二个月收费200,第三个月300,以后再想看的话就交全款,
诶,给人一看,这个课程还是免费了,如果他很想了解这个东西,肯定会点进去看,课程很好的话,他肯定也会付第二个月的前的。
这是我们产品经理给我们说的策略,我们设计表结构时就这样设计的,我就感觉这个挺牛逼!!展示到页面感觉也挺好的 学习计划 之前做的web方向,接下来想往人工智能方向发展 框架 我熟悉djanog,flask,当时我觉得这个flask比较牛逼,三行就可以开个web服务,后来了解到flask上下文管理,研究了上下文管理源码,都是要存储信息,
django是网request中存信息,django是每个视图函数都有个request,t他是每一层都会把那个request传递下去,从我的wsgi,到我的中间件,
到我的视图函数,都是一直传递下去,但是flask不一样,当你用是,你会发现视图函数并没有request,他是从flask的包中导入的request,
我就想floask是多线程的,当很多个用户访问,他是如何把每个用户区分开来的,后来我发现一个类似于threading_local,
他比threading_local更加强大,也就是维护了一个字典,他可以用哪个线程id和协程id给区分开,把不同请求的request给封装到里边,
源码哪个应该是local_stack对象,他里边用的local好像是,他的流程就是,当请求来了,他就封装俩个对象,一个叫ctx,reqeust_comment对象,
还有一个对象时httpctx对象,,,他就不同于django请求,django的请求是一层套一层,ctx这个对象里边封装了request和session,
appctx也封装两个对象,一个是全局的一个g,一个是appcurrent,一共就这四个对象,当请求来的时候,他把这俩个大对象分开,存到时候,
根据线程id,一个存在了local_stack中的local对象中,当。。。 这种框架本质上就是一个客户端,一个服务端么,不管怎么写,他的本质上肯定封装了socket。
MSTM年底总结的更多相关文章
- 年底小回顾(MVC+NHibernate+Jquery+JqueryUI——网站)
1.附:利用MVC+NHibernate+Jquery+JqueryUI这些技术可以做出一个比较好的前台+后台网站.下面是本人对这些技术的笔记,作为私人年底小结吧.呵呵 好久没写文章了,感觉下不了笔吐 ...
- [蘑菇街] 搜索、算法团队招募牛人啦-年底了走过路过不要错过 - V2EX
[蘑菇街] 搜索.算法团队招募牛人啦-年底了走过路过不要错过 - V2EX [蘑菇街] 搜索.算法团队招募牛人啦-年底了走过路过不要错过
- [SQL Server 2014] 微软将于年底发布新版数据库SQL Server 2014
在今年的TechEd大会上,微软宣布SQL Server 2014的第一个技术预览版.SQL Server 2014的重点包括内存OLTP.实时的大数据分析.支持混合云端,以及提供更完整的商业智能(B ...
- Intel NUC迷你机2019年底迎来i9 8核心16线程
Intel处理器这两年全年提速,虽然10nm新工艺受阻,但核心数在全面增加,从发烧到桌面到低功耗莫不如此,如今连NUC迷你机也要全新进化了,一年多之后就会迎来8核心16线程,而且也划入i9序列. 根据 ...
- [转帖]中芯国际14nm秋季量产 7nm工艺或在2020年底问世
中芯国际14nm秋季量产 7nm工艺或在2020年底问世 https://news.mydrivers.com/1/641/641087.htm 中芯正在发力.. 今年秋天 14nm两场 明年底 7n ...
- 《一头扎进》系列之Python+Selenium框架实战篇7 - 年底升职加薪,年终奖全靠它!Merry Christmas
1. 简介 截止到上一篇文章为止,框架基本完全搭建完成.那么今天我们要做什么呢????聪明如你的小伙伴或者是童鞋一定已经猜到了,都测试完了,当然是要生成一份高端大气上档次的测试报告了.没错的,今天宏哥 ...
- 年底了,该跳槽了,全套高级Java面试题及答案整理~
又到年底了,又是一轮跳槽季 城外的人想进去,城里的人想出来 为什么离职? 马云说过,要么工资低,要么受了委屈 我想大多数人离职是这个原因 出来混的,跳槽也都是为了更好的生活 干技术的,工资都是跳出来的 ...
- Faraday Future,FF2019年一季度前完成第一阶段5亿美元左右的A+轮融资,2019年年底前完成7亿美元的Pre-IPO轮融资,2020IPO
FF2019年一季度前完成第一阶段5亿美元左右的A+轮融资,2019年年底前完成7亿美元的Pre-IPO轮融资,2020IPO 区块链公司先行宣布将对FF进行投资.EVAIO(中文名:伊娃)公司 跨链 ...
- Flash 终将谢幕:微软将于年底( 2020 年 )停止对 Flash 的支持
近日,微软宣布将于今年 12 月终止对 Adobe Flash Player 的支持,届时,微软旗下所有浏览器都将无法使用 Flash,Adobe 也不会在今年 12 月后发布安全更新.早在 2017 ...
随机推荐
- TPU使用说明
1 TPU分类和收费标准 1.1 分类和计费说明 地区 抢占式TPU Cloud TPU 美国 $1.35/hour $4.5/hour 欧洲 $1.485/hour $4.95/hour 亚太区地区 ...
- Idea实用配置
参考:https://github.com/judasn/IntelliJ-IDEA-Tutorial 1.代码提示不区分大小写 2.跳到指定行 Ctrl + G Ctrl 快捷键 介绍 Ctrl + ...
- Gradle的使用
⒈下载 点击此处 ⒉安装 1.解压 2.添加环境变量GRADLE_HOME 指向解压缩文件的磁盘地址 3.PATH环境变量添加%GRADLE_HOME%\bin ⒊使用阿里云仓库 repositori ...
- MFC修改对话框标题
对话框标题栏内容为静态 直接在对话框属性"常规"的"Caption"中修改. 动态生成对话框标题栏内容 SetWindowText()函数就可以 CString ...
- Ubuntu的内核转储工具【转】
转自:http://www.cnblogs.com/wwang/archive/2010/11/19/1881304.html 在我的上一篇博文<Linux内核的Oops>的最后介绍到一个 ...
- 【转】Java的接口和抽象类
对于面向对象编程来说,抽象是它的一大特征.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有很多相似的地方,又有很多不同的地方. 一.抽象类 在了解抽象类之前,先来了解一下抽象方 ...
- hibernate框架学习之二级缓存
缓存的意义 l应用程序中使用的数据均保存在永久性存储介质之上,当应用程序需要使用数据时,从永久介质上进行获取.缓存是介于应用程序与永久性存储介质之间的一块数据存储区域.利用缓存,应用程序可以将使用的数 ...
- 在 VS 2013/2015 中禁用 nuget 包的源代码管理
对于加入源代码管理如TFS的解决方案,当使用nuget获取包时,下载的包并没有自动从源代码管理中排除,导致包(packages文件夹)会一同上传到服务器. 若要排除nuget包的源代码管理,须在 解决 ...
- (并发编程)进程池线程池--提交任务2种方式+(异步回调)、协程--yield关键字 greenlet ,gevent模块
一:进程池与线程池(同步,异步+回调函数)先造个池子,然后放任务为什么要用“池”:池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务池子内什么时候装进程:并发的任务 ...
- hue报错StructuredException: timed out (code THRIFTSOCKET): None的处理
通过hue的web界面进行hive的sql查询,无法显示结果并报错timeout 报错如下:[28/Jul/2017 11:23:29 +0800] decorators ERROR error ru ...