Django——在线教育项目总结YanceDev

通过互联技术,变革传统教育方式,依赖强大的导师服务系统,提高在线教育的效率与成功率。

项目策略:

团队构成:

周期:

简要描述如下:

Django中实现:

支付需求起始于用户点击立即支付或者加入购物车

当用户选择需要购买的课程和价格策略后,有两种方式购买课程:

将课程id和选择的价格策略放到redis中,跳到去支付页面,从redis中获取购买课程的id和价格策略id,如果该用户要使用优惠券和贝利,则选择当前用户所拥有并且未使用和没过期的优惠券,得到折后价格,点击去支付完成支付,

前端需要提供的数据包括:所选课程的id和所选择的价格策略id。约定的数据格式如下:

继续将该课程的所有信息主要包括:课程id,课程图片地址,课程标题,所有价格策略,默认价格策略封装在car_dict中

下面是redis中保存用户数据的key

SHOPPING_CART_KEY="luffy_shopping_cart_%s_%s"PAYMENT_KEY="luffy_payment_%s_%s"PAYMENT_COUPON_KEY="luffy_payment_coupon_%s"

car_key=settings.SHOPPING_CART_KEY%(request.auth.user_id,course_id,)car_dict={'title':course.name,'img':course.course_img,'default_policy':policy_id,'policy':json.dumps(price_policy_dict)}

完成后,在redis中用户购物车的数据如下:

{luffy_shopping_car_6_11:{'title':'21天入门到放弃','src':'xxx.png','policy':{1:{id:'xx'.....},2:{id:'xx'.....},3:{id:'xx'.....},4:{id:'xx'.....},},'default_policy':3},luffy_shopping_car_6_13:{...}}

购物车完整的CURD接口:

修改购物车总的价格策略(patch):

向后台发课程id和要修改为的价格策略id,判断课程是否在购物车中,判断传递过来的价格策略是否在当前课程的价格策略中,在的话将redis中的当前课程的默认价格策略修改为当前的价格策略具体将上面代码

在用户完成购物车的后,点击结算,前端服务器发送结算数据("courseids":["1","2"],1和2对应的就是课程的ID)给我们后端的Django服务器,约定的数据格如下:

{"courseids":["1","2"]}

1.获取用户提交的课程id,[1,2]

判断是否选择要结算的课程,没选择则抛出异常

course_id_list=request.data.get('course_list')ifnotcourse_id_listornotisinstance(course_id_list,list):raiseException('请选择要结算的课程')

2.检测购物车中检查是否已经有课程(应该有课程的)

product_dict=redis_pool.conn.hget(settings.LUFFY_SHOPPING_CAR,request.user.id)ifnotproduct_dict:raiseException('购物车无课程')

3.检测购物车中是否有用户要购买的课程

product_dict=json.loads(product_dict.decode('utf-8'))#######课程、价格和优惠券#######policy_course_dict={}#循环用户传递过来的要结算的课程ID列表forcourse_idincourse_id_list:course_id=str(course_id)product=product_dict.get(course_id)ifnotproduct:raiseException('购买的课程必须先加入购物车')如果所结算的课程在购物车中,

4.获取选中价格策略的价格详细,

选择购物车中当前课程下的所有价格策略和当前课程的所选择的价格策略相等的价格策略,获取其信息,

#c.购物车中是否有用户要购买的课程product_dict=json.loads(product_dict.decode('utf-8'))#######课程、价格和优惠券#######policy_course_dict={}#循环用户传递过来的要结算的课程ID列表forcourse_idincourse_id_list:course_id=str(course_id)product=product_dict.get(course_id)ifnotproduct:raiseException('购买的课程必须先加入购物车')#获取选中价格策略的价格详细policy_exist=Falseforpolicyinproduct['price_policy_list']:ifpolicy['id']==product['choice_policy_id']:policy_price=policy['price']policy_period=policy['period']policy_valid_period=policy['valid_period']policy_exist=Truebreakifnotpolicy_exist:raiseException('购物车中的课程无此价格')将上面我们获取的课程信息和价格策略信息封装在policy_course中

policy_course={'course_id':course_id,'course_name':product['name'],'course_img':product['course_img'],'policy_id':product['choice_policy_id'],'policy_price':policy_price,'policy_period':policy_period,'policy_valid_period':policy_valid_period,'default_coupon_id':0,'coupon_record_list':{0:{'id':0,'text':'请选择优惠券'},},}5.获取当前用户所有的优惠券

user_coupon_list=models.CouponRecord.objects.filter(account=request.user,status=0)6.区分用户的优惠券种类,课程优惠券添加到课程中;全局优惠券添加到全局

#######全局优惠券#######global_coupon_record_dict={}循环遍历当前用户的所有优惠券,判断他们是否过期

begin_date=record.coupon.valid_begin_dateend_date=record.coupon.valid_end_dateifbegin_date:ifcurrent_dateend_date:continue

,如果没过期,判断他们是全局优惠券还是针对某个课程的优惠券,区分好是什么优惠券以后还的区分该优惠券是什么类型,

如果是通用券

ifrecord.coupon.coupon_type==0:temp={'type':0,'text':"通用优惠券",'id':record.id,'begin_date':begin_date,'end_date':end_date,'money_equivalent_value':record.coupon.money_equivalent_value}如果是满减券:

elifrecord.coupon.coupon_type==1:temp={'type':1,'text':"满减券",'id':record.id,'begin_date':begin_date,'end_date':end_date,'minimum_consume':record.coupon.minimum_consume,'money_equivalent_value':record.coupon.money_equivalent_value}如果是折扣券:

elifrecord.coupon.coupon_type==2:temp={'type':2,'text':"折扣券",'id':record.id,'begin_date':begin_date,'end_date':end_date,'off_percent':record.coupon.off_percent}如果是全局优惠券,则

global_coupon_record_dict[record.id]=temp如果但是针对课程的优惠券:

policy_course_dict[cid]['coupon_record_list'][record.id]=temp最后将所有数据封装在user_pay中放到redis上

user_pay={'policy_course_dict':policy_course_dict,'global_coupon_record_dict':global_coupon_record_dict,'default_global_coupon_id':0,}redis_pool.conn.hset(settings.LUFFY_PAYMENT,request.user.id,json.dumps(user_pay))user_pay数据结构

2.循环遍历每一个课程

开始总价格totalprice和折扣价totaldiscount都为0,

总价=0总折扣=02.1.如果该课程没有使用优惠券,则总价格=totalprice+课程原价,totaldiscount=0,

如果使用了优惠券:去数据库查询:指定优惠券是否已经使用、是否已经过期如果优惠券可不用:raiseException('优惠券不可用')如果是通用优惠券:discount=通用优惠券(如果大于课程原价,课程原价)elif如果是满减优惠券:if价格是否大于最小满减要求:discount=通用优惠券(如果大于课程原价,课程原价)elif如果是折扣优惠券:discount=课程原价*(1-折扣)使用的优惠券ID列表.append(绑定可以的优惠券ID)temp={课程ID:1,原价:10,折扣价:9,有效期:30}课程信息.append(temp)总价+=课程原价折扣+=discount到此为止

pay=总价-总折扣3.继续计算看是否使用全局优惠券

全站优惠券ID=choice_global_coupon数据库获取并检查是否可用(优惠券是否已经使用、是否已经过期)如果优惠券可不用:raise('全站优惠券不可用')g_discount=0如果是通用优惠券:g_discount=通用优惠券(如果大于pay,pay)elif如果是满减优惠券:if价格是否大于最小满减要求:g_discount=通用优惠券(如果大于pay,pay)elif如果是折扣优惠券:g_discount=pay*(1-折扣)总折扣+=g_discount使用的优惠券ID列表.append(全站优惠券ID)4.贝利支付

ifbalance<=request.user.balance:总折扣+=balance5.总结算

总价-总折扣=alipayifalipay==0:贝里&优惠券pay_type=0else:支付宝支付pay_type=1如果最后支付=0,就直接修改支付状态为已支付,否则改为待支付

6.点击立即支付以后进行数据库操作

最后

ifpay_type==1:生成支付宝链接(自动生成自己的订单号),并返回给前端Vue######################################支付宝的回调######################################defcallback(request,*args,**kwargs):models.Order.objects.filter(订单号).update(status=0)

THE END
1.中国大学MOOC中国大学MOOC(慕课) 是爱课程网携手网易云课堂打造的在线学习平台,每一个有提升愿望的人,都可以在这里学习中国优质的大学课程,学完还能获得认证证书。中国大学MOOC是国内优质的中文MOOC学习平台,拥有众多985高校的大学课程,与名师零距离。https://www.icourse163.cn/
2.学堂在线学堂在线是清华大学发起建立的面向未来的慕课在线学习平台,为学习者提供从高校课程到实战技能的在线教育服务。 致力于汇聚高校优质课程 ? 平台运行5000余门慕课 ? 为学习者提供学习认证证书 ? 打造随时随地学习的平台环境 打造终身学习平台 ? 通过在线教育的方式提供敏捷教育方案 ? 通过体系化课程构建微https://www.xuetangx.com/?mod=space&uid=1&do=album&id=2&page=2
3.腾讯课堂腾讯推出的专业在线教育平台。依托QQ群视频和腾讯视频直播能力,实现老师在线上课教学,学生即时互动学习的课堂。下设职业培训、公务员考试、托福雅思、考证考级、英语口语、中小学教育等众多分类课程。https://ke.qq.com/jump.html?groupcode=388010989&courseid=1819&from=16
4.PINES密集在线课程碧瑶四大山头之一,几乎不用南崎多介绍,这所斯巴达名校自18年新校区以来人气飙升,堪称是碧瑶最抢手的经典名校。以斯巴达、雅思托福课程而闻名遐迩,是碧瑶三大雅思考场之一。师资力量有口皆碑,是南崎在碧瑶的主推之一。 PINES在线不同于其他的两大特征 01 http://www.nanqi.org/u/pines-online
5.科学网—在线课程2:有效的科研合作自然大师课堂点击此处查看科学论文写作与发表在线课程介绍 No.2 课程讲师 有效的科研合作在线课程由涉猎学术与产业合作领域的17位学者、资助者、期刊编辑和专家讲授,帮助研究人员学会如何参与合作以及领导合作走向成功。 Luke Fleet |前《自然》高级编辑兼团队主管 Luke Fleet于约克大学获得自旋电子学博士学位,在帝国理工学院和伦敦纳米https://blog.sciencenet.cn/blog-3432244-1282145.html
6.课程在线课程在线网站主要为在校大学生、在职人员等多层次求知学习人士,提供一站式服务的专业考试培训门户网站。网站主要提供学历类、外语类、资格类、会计类等四大类10多种考试信息和培训课程服务。课程在线简介 "课程在线"网站一直致力于为广大网友提供最专业、最及时、最全面、最贴心的考试资讯服务。立足于为广大考证网友建造https://baike.baidu.com/item/%E8%AF%BE%E7%A8%8B%E5%9C%A8%E7%BA%BF/870609
7.操作系统简介操作系统课程线程的概念与模型:线程是进程中的一个执行单元。课程通常介绍单线程、多线程模型以及多线程的优缺点。 同步与互斥:课程会讲解如何通过锁、信号量、条件变量等机制解决线程间的竞争问题。 上下文切换与性能开销:线程和进程之间的切换涉及到上下文保存和恢复,这会带来性能上的开销。 https://blog.csdn.net/m0_52796585/article/details/142448548
8.课程介绍北京师范大学北京师范大学-香港浸会大学联合国际学院(UIC)理工科技学部和香港浸会大学传理学院(浸大传理)将于今年9月联合开办人工智能与数码媒体专修课程。 该课程是首个以人工智能和数码媒体为重点的授课型硕士课程。旨在为学生提供数码时代所需的人工智能和媒体传播的前沿跨学科知识和技能训练。「人工智能与数码媒体专修」硕士专业https://kaoyan.eol.cn/guangdong/yanzhao/202006/t20200610_1732770.shtml
9.“全国高校日语专业建设与教学发展”智慧讲坛第三期线上研修课程课程介绍 【课程简介】 2020年4月26日,《普通高等学校本科外国语言文学类专业教学指南》正式发布,为全面落实《指南》精神,外语教学与研究出版社联合教育部高等学校外国语言文学类专业教学指导委员会日语分委会、中国日语教学研究会,共同策划了“全国高校日语专业建设与教学发展”智慧讲坛。在前两期的讲坛中,专家围绕“日https://ucourse.unipus.cn/course/3963
10.美热维吾尔族舞蹈教学课程介绍文化加载中 备案号:0108283231290148 视频 讨论 美热维吾尔族舞蹈教学 付费252中国·2024 简介 59期全 选集 1-3536-59 第1期 课程介绍 热度169 付费 第2期 手位与绕腕及体态短句讲解(一) 热度160 付费 第3期 手位与绕腕及体态短句讲解(二) 热度101 https://v.youku.com/v_show/id_XNjIxNjAwMjk0OA==.html
11.InDesign小秘密(一):课程介绍高清在线观看PP视频PP视频为您提供InDesign 小秘密(一):课程介绍高清视频在线观看,InDesign 小秘密(一):课程介绍主要内容:选取最新最酷的消费电子产品,由科技圈知名主播王自如出镜,对产品进行测试和体验,最后对产品进行点评,向消费者给出购买建议,并对整个过程中涉及到的科技知识和行https://v.pptv.com/show/nhLyeeFHticVY1j4.html
12.环球网校官方网站职业教育在线【环球网校官网】成立于2003年起,连续多年获评十佳网络教育机构,是职业教育行业知名的职业考试远程辅导机构,美国纳斯达克上市企业欢聚时代(NASDAQ:YY)旗下品牌,致力打造以学员为中心、以教育为本、以创新驱动的在线职业教育平台。https://www.hqwx.com/
13.黔东南州工业学校《建筑CAD》精品课程建设项目介绍在项目建设过程中,通过参与课程视频的制作、教学文件的完善、在线课程的部署等,对教师的技能有明显提升,并取得实际效果。大家一致认为,实施精品课程建设既为学校高质量发展奠定了坚实基础,也为教师专业化发展搭建了学习平台,建设过程虽然很辛苦,但是收获很大,成果丰硕,本课程完全达到学校精品课程建设的要求。http://www.qdnzjx.cn/News/detail/cateId/26/id/360.html