一:AI学习吧

项目描述

系统使用前后端分离的模式,前端使用vue框架,后端使用restframework实现。

项目需求

公司开发AI学习吧,由于公司需要一款线上学习平台,要开发具有线上视频学习、支付等功能的平台,并整合用户支付和微信消息的推送和提醒。使用Git进行协同开发。

项目结构

项目主要有三大模块:
项目三大模块:
1:导师后台是:基于Thanos组件,给导师"管理学员作业"、"学习进度"、"跟进记录"等。
2:管理后台:基于Thanos组件,给运营使用:"上传视频"、"写文章"、"优惠券的发放"、办理"退款"、"休学"等业务。
3:主站(基于Vue+Django restful framework框架):

个人负责

我主要负责主站后端的开发。

主站主要有分为五大模块:
第一个模块是课程:主要包括:课程大类和子类两种,分别有学位课程和普通课程两种,
区别在于学位课程除了包含普通课程的优惠卷和价格策略
还包含学位奖学金和分配相应的导师进行一对一的跟进辅导。
除此之外还有:
"课程列表","课程详细","课程章节","课程目录","看视频","评论"。
第二个模块是深科技:是基于restful将数据序列化,基于restful api规范的不同请求方式
来实现响应的功能,
如使用get方法查看”文章",post方法实现"点赞"、"收藏"、"评论"等功能。
使用option实现复杂请求 解决跨域问题。
第三个是购物车:提交请求获取当前课程信息,价格策略等信息并写入redis实现加入购物车,
有两种支付方式:跳转到支付页面立即支付,用户进入购物车点击去结算,
从redis获取相应信息,点击去结算,获取商品价格策略,
获取当前用户的优惠卷,贝里,判断是否过期,判断优惠卷类型,进行相应的折扣,
点击立即支付,生成订单,判断状态是否支付成功,支付成功清空购物车,也就redis
中的相应商品信息,最后是基于关注公司微信公众号实现的微信消息推送。
然后是个人中心:
基于restful获取数据,将数据序列化。主要包括"我的账户","我的订单",
"我的收藏","个人资料","账号安全"。
最后一个模块就是一些:”关于我们“,”联系我们“,”商务合作等“。

主要功能

大多数只是根据前端需求,获取数据,序列化返回。
1. 自定义rest认证token 认证。
2. 序列化以及自定义验证对请求数据合法性进行校验和认证。
3. API访问的接口速率限制。
4. 课程优惠券,通用优惠券,视频点赞,点踩,收藏,更换头像,上传作业,评论等。
5. 支付宝支付/微信支付。
6. 微信开发,针对关注微信公众号,实现对学位课程报名的用户作业奖惩和导师的跟进奖惩。

技术问答

问题:rst是如何获取前端数据的?
答:request.data.get('xxx')

问题:如何序列化的?
答:Django-rest-framework的序列化。

问题:购物车是如何如何实现的?
答:1:当用户选择需要购买的课程和价格策略后,有两种方式购买课程:

一:直接购买,将课程id和选择的价格策略放到redis中,
跳到去支付页面,从redis中获取购买课程的id和价格策略id,
如果该用户要使用优惠券和贝利,则选择当前用户所拥有并且未使用和没过期的优惠券,
得到折后价格,点击去支付完成支付,删除购物车信息,生成订单,保存到数据库。
二:添加到购物车中完成支付(post)

获取到所选课程的id和价格策略id传到后端,
在后端获取,根据课程id获取到当前课程,根据当前前课程所有的价格策略,
判断在后端获取到的价格策略id在不在当前课程的价格策略中,
不在的话则抛出异常价格策略不存在,在的话继续执行。
将该课程所有价格策略的id,时间周期和价格存放到列表中(price_policy_list)中。
继续将该课程的:课程id,课程图片地址,课程标题,
所有价格策略,默认价格策略封装在字典(course_dict)中。
判断当前用户的购物车中是否有东西,没有的话则把当前课程放入到购物车中,
如果购物车中已经有课程课程,则将该课程添加到购物车中,最后封装好放到redis中。

三:修改购物车总的价格策略(patch):
如果要修改购物车的总价格策略:向后台发课程id和要修改为的价格策略id,
判断课程是否在购物车中,判断传递过来的价格策略是否在当前课程的价格策略中,
在的话将 redis中的当前课程的默认价格策略修改为当前的价格策略。
去结算:
获取用户提交的课程id, 判断是否选择要结算的课程,没选择则抛出异常。
检测购物车中是否已经有课程(应该有课程的)。
检测购物车中是否有用户要购买的课程
如果所结算的课程在购物车中,
获取选中价格策略的价格详细,
选择购物车中当前课程下的所有价格策略以及相等的价格策略,获取其信息,
获取当前用户所有的优惠券,
区分用户的优惠券种类,课程优惠券添加到课程中;全局优惠券添加到全局,
循环遍历当前用户的所有优惠券,判断他们是否过期,
如果没过期,判断他们是全局优惠券还是针对某个课程的优惠券,
区分好是什么优惠券,后面区分该优惠券是什么类型,
是通用券,还是满减券,折扣券,全局优惠券,
针对不同的优惠卷,最后将所有数据封装放到redis上。

去支付:
1.去结算中心获取要结算的所有课程和优惠券,
2.循环遍历每一个课程,
开始总价格和折扣价都为0,
如果该课程没有使用优惠券,则支付价格=课程原价,折扣价=0,
3.如果使用了优惠券,则需要去判断所使用的优惠券是否已经过期,
或是否已经被使用,如果过期了或者被使用了就抛出异常,
否则继续往下执行,判断该优惠券的类型.
3.判断优惠卷类型计算出相应的折扣。支付总价=商品总价 - 折扣
4.获取当前用户的贝里,获取总价。判断贝里是否能全额支付。
6.点击立即支付以后, 进行数据库操作,生成订单。

生成订单:
点击立即支付,生成订单,订单根据前面支付是否等于0来判断支付状态:已支付或者待支付;
生成订单详情,循环课程信息,写入课程的原价,折后价,支付价,视频的有效期即订单的有效期,
对优惠券进行处理,把该用户已使用的优惠券状态改为已使用;
修改贝里,该账户的贝里减去使用的贝里,并更新贝里消费记录表,
显示账户的消费金额,账户的余额等。
最后删除购物车中的信息,即redis中的购物车信息。

问题:你们项目总共多少张表,多少行?
答:48张表,是我参加项目表最多的一次,光表就有1005行。

问题:说几张你熟悉的表?
课程相关:课程大类,课程子类,学位课程,普通课程,课程详细,课程大纲,课程章节,课时目录,常见问题等
深科技相关:文章来源,文章资讯,文章点赞,文章收藏,文章评论。
用户相关:用户表,用户Token表。
购物车相关:购物车是基于Redis实现的。
还有:优惠卷生成规则表,价格与有课程效期表等等。

问题:项目是几个人负责的?
答:后端主要两个人,我写主站,还有一个写后台管理。

问题:你在开发中遇到的坑有那些?
答:坑到没有什么,涉及的技术也不是特别难,在做购物车和立即支付的时候,业务逻辑比较复杂,
因为其中涉及到价格策略,优惠卷,我们自己的贝里。

问题:CORS?
答:前端问我,最开始听说过,不太熟悉,就了解了一下
概述:

问题:如何连接redis的?
答:
POOL=redis.ConnectionPool(host='192.168.20.58',port=6379)
conn=redis.Redis(connection_pool=POOL)

问题:自定义rest认证token 认证是如何实现的?
答:自定义token认证。客户端传递过来的token等参数进行身份验证。
通过rest framework为我们提供的认证机制去验证,每一类继承BaseAuthention,里面实现了一个authtent方法,
获取用户传过来的token,看传过来的token是否和数据库的一致,一致验证通过,不一致,说明是无效token.

问题:API接口的速率限制是如何实现的?
答:针对匿名用户和登录用户加以区分,登录用户记录它的name,匿名用户记录它的IP。
我们项目中又判断了一下是否是管理员,根据用户类型的不同,来判定不同的限流策略。
创建一个类继承BaseThrethe,写一个allow_request和wuit方法限制访问。

问题:做一个项目你都用了哪些技术点
像是慧聪学习系统,我们写后端的时候就是用restformwork来做的,返回数据的时候
是基于序列化来实现的。用methodSerialize直接从数据库中查到响应的值返回,
类似于django中的ModelForm。
参考restfulwork源码实现的认证功能,还可以基于__call__方法实现的自定义验证规则

AI学习吧的更多相关文章

  1. DeepLearning.ai学习笔记汇总

    第一章 神经网络与深度学习(Neural Network & Deeplearning) DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络 DeepLe ...

  2. DeepLearning.ai学习笔记(三)结构化机器学习项目--week2机器学习策略(2)

    一.进行误差分析 很多时候我们发现训练出来的模型有误差后,就会一股脑的想着法子去减少误差.想法固然好,但是有点headlong~ 这节视频中吴大大介绍了一个比较科学的方法,具体的看下面的例子 还是以猫 ...

  3. AI 学习路线

    [导读] 本文由知名开源平台,AI技术平台以及领域专家:Datawhale,ApacheCN,AI有道和黄海广博士联合整理贡献,内容涵盖AI入门基础知识.数据分析挖掘.机器学习.深度学习.强化学习.前 ...

  4. AI - 学习路径(Learning Path)

    初见 机器学习图解 错过了这一篇,你学机器学习可能要走很多弯路 这3张脑图,带你清晰人工智能学习路线 一些课程 Andrew Ng的网络课程 HomePage:http://www.deeplearn ...

  5. AI学习---数据读取&神经网络

    AI学习---数据读取&神经网络 fa

  6. UE4的AI学习(1)——基本概念

    AI学习当中,不学习行为树基本概念就不能明白具体实例中的操作意义,但是没有经过具体实例实验,又觉得基本概念抽象难以理解.建议先泛读(1)(2)后再对具体的细节进行死磕,能较深的理解行为树的具体概念.第 ...

  7. AI学习经验总结

    我的人工智能学习之路-从无到有精进之路 https://blog.csdn.net/sinox2010p1/article/details/80467475 如何自学人工智能路径规划(附资源,百分百亲 ...

  8. AI学习笔记(02)

    AI学习笔记   第一个黑箭头是用于挑选物体和移 动物体.在绘图是选中一个物体,就可以将它自由的移动.和其他的绘图软件相同当你选 中物体的时候物体周围就会出现八个方形的控制点,你可以通过这些控制点对物 ...

  9. AI学习笔记:特征工程

    一.概述 Andrew Ng:Coming up with features is difficult, time-consuming, requires expert knowledge. &quo ...

随机推荐

  1. 对象关系映射(ORM)框架GreenDao简介和基本使用

    官网上的介绍,greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案. GreenDao特点 性能最大化,可能是Android平台上最快的ORM框架 易于使用的A ...

  2. 解码base64加密的图片并打印到前台

    经过base64加密的图片对象是一串字符串,我们解码后可通过流将其打印出来: utils类: package com.aebiz.app.web.modules.controllers.open.ap ...

  3. vue 中通过 ajax 获取数据时,如何避免绑定的数据中出现 property of undefined 错误

    参考链接:https://segmentfault.com/q/1010000008264089?_ea=1597485

  4. 51nod 1294 修改数组

    若a[i]-i(i从1开始)的值小于0,那么a[i]必须改变 若a[i]-i的值大于等于0,将a[i]-i存入新的数组中,求出新数组的最长非严格上升子序列,所得即最多的,不用改变的数. #includ ...

  5. Hadoop环境准备

    1. 集群简介 HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起. HDFS集群负责海量数据的存储,集群中的角色主要有: NameNode.DataN ...

  6. Linux 查看系统硬件信息[转]

    原文:http://www.cnblogs.com/ggjucheng/archive/2013/01/14/2859613.html linux查看系统的硬件信息,并不像windows那么直观,这里 ...

  7. HBSX2019 3月训练

    Day 1 3月有31天废话 今天先颓过了就只剩30天了 初步计划 每天一道字符串/数据结构题 图论学习 根据<若干图论模型探讨>(lyd)复习 二分图与网络流学习 <算法竞赛进阶指 ...

  8. CF1097D Makoto and a Blackboard

    题目地址:CF1097D Makoto and a Blackboard 首先考虑 \(n=p^c\) ( \(p\) 为质数)的情况,显然DP: 令 \(f_{i,j}\) 为第 \(i\) 次替换 ...

  9. liunx之Centos6.8杀毒软件的安装

    作者:邓聪聪 为了防止服务器中病毒,安装了类似与Windowns的杀毒软件Clanav,过程如下 首先下载clamav的软件包,官方下载地址为http://www.clamav.net/downloa ...

  10. python3+selenium入门09-键盘事件

    Keys类提供了键盘上几乎所有按键的方法.通过send_keys()方法不仅可以用来模拟键盘输入,还可以用它来模拟键盘上的按键.包括组合键,比如Ctrl+a等 需要导入Keys类 from selen ...