版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
II基于Python的在线教育网站系统设计与开发摘要教育是国之大计,是一个国家的未来。在线教育受疫情的影响发展迅猛。在线教育使得不同地区的学生可享受优良的教育服务,取得同样的教学资源,达到教育资源共享的目的,让学生的学习门槛降低,升高教育资源利用率。系统基于Python3.8编程语言,Django2.2版本框架编写的在线教育系统。使用MySQL5.7版本数据库。后台管理使用Xadmin框架。使用B/S结构进行开发。凭借Django对特殊字符转码的优势,完成对SQL注入、XSS、CSRF等常见网络攻击的防御。Xadmin框架拥有扩展性,便于后期维护更新,有效管理系统数据。通过前期的需求分析,后期的代码开发。设计出来的在线教育网站系统,界面简洁大方,功能完整,使用方便。从用户角度出发实现在线学习,资料下载,课程评论收藏分享等功能。使用后台管理框架,实现课程数据维护,用户权限管理,相关课程推荐等功能。是一个完善的在线教育系统,为教育事业的发展,资源的合理分配,注入新鲜血液,发展前景乐观。【关键词】MySQL;Django;在线教育;B/S结构;Python目录第1章绪论 11.1研究背景 11.2研究目的和意义 11.3国内外研究现状 11.4本文的主要工作 21.5论文的组织结构 2第2章相关技术介绍 32.1Python3.8开发语言 32.2Django2.2开发框架 32.3数据库存储技术 32.3.1Navicat 32.3.2MySQL5.7 42.3.3MariaDB 42.4uWSGI 42.5Nginx 52.6本章小节 5第3章系统分析 63.1可行性分析 63.1.1技术可行性 63.1.2操作可行性 63.2功能需求分析 63.2.1用户需求分析 63.2.2授课机构需求分析 73.2.3授课教师需求分析 83.2.4课程需求分析 83.2.5超级管理员需求分析 93.3系统流程图 103.3.1注册流程图 103.3.2登录流程图 113.4安全性分析 12第4章系统设计 144.1设计目标 144.2系统架构设计 144.3数据库设计 164.3.1数据库E-R图与EER模型图 164.3.2数据表设计 17第5章系统实现 225.1用户功能模块实现 225.1.1登录功能 235.1.2注册功能 245.1.3公开课功能 255.1.4授课教师功能 265.1.4授课机构功能 275.2后台管理模块实现 295.3系统部署环境 32第6章系统测试 336.1测试目标 336.2系统功能测试 336.2.1用户角度测试 336.2.2授课机构授课教师角度测试 356.2.3超级管理员角度测试 366.3本章小节 37第7章总结与展望 387.1系统总结 387.2系统展望 38参考文献 40PAGE1第1章绪论1.1研究背景教育是国之大计,世界正处于百年未有之大变局[1]。中国面临着激烈的国际竞争。我国与发达国之间存在着经济贸易摩擦和科技竞争。探寻根源就是优秀人才的竞争,教育教学工作的竞争。教育是推动社会进步的基石,可以激发民族创新活力,能够提高国民综合素质,发掘优秀人才。对实现中华民主的伟大复兴有着很大意义。由于疫情的影响[2],科技的发展,我国对在线教育给予了更多的政策和技术的支持。在线教育在我国的地位越来越重要,未来仍有较大进步空间,因此在互联网上在线学习逐渐成为我国甚至是全世界的教育趋势。因此,在线教育顺应了时代潮流的发展,能够满足更多用户教育所需,有着重要的意义。1.2研究目的和意义在我国,学习资源分配问题仍然严峻,教育资源短缺,是问题的核心,优秀师资力量与庞大的学生基数之间矛盾突出。疫情的爆发对于传统线下教学模式有着很大的影响,老师无法在教室里教授学生知识。偏远地区的学生无法受到优良的教育,其所在的地区的教育资源将更加匮乏[3]。通过互联网提供的便捷高效的信息传播方式[3],在线教育有效缓解了这一现状,通过在线教育,不同地区的学生可享受优良的教育服务,获取相同的教学资源,实现共享教育资源,学生学习门槛降低,教育资源利用率提高。编写一个在线教育平台,有网络,就能随时随地学习,解决当前学习存在的问题。1.3国内外研究现状在国外,随着互联网技术的高速发展,基于信息技术和在线视频技术,在线教育发展出了各种教学模式。非同步式教学模式、双向交互式教学模式、预录视频单向式教学模式[4]。发达国家尤其是以美国为首的高校,都能自主开展网络在线教育。课程基本覆盖了高校所开展的全部学科的专业技能知识。以公开课等形式的课程为广大群众开放,让普通人也可以学习顶尖高等学府的教育资源[5]。国外的在线教育更多的强调人人平等享受教学资源。我国在线教育研究经历了很很长时间的迭代,从以前使用远程教育平台学习,到后来培训方式也转为受外界影响较小线上教学的模式,随着互联网的发展也有许多公司借鉴国外的在线教育方式,整合高效学习资源。随着新冠疫情的影响,在线教育发展更是火爆。技术升级结合大数据,个性化分析等技术更加推动在线教育的发展。未来在线教育将拥有更加广阔的发展前景。1.4本文的主要工作本文主要的工作是设计基于Django框架[5]的在线教育网站系统,有着简单大方的UI设计,稳定的系统可用性,来满足用户的在线学习需要。使用Python3.8开发语言,基于MTV(ModelTemplateView)开发模式的Django框架[6],Xadmin后台管理系统,MySQL数据库系统。在界面与使用上尽可能简洁、大方还要具有通用化、规范化特点。1.5论文的组织结构基于Python的在线教育网站的论文共分七章来书写。各章节内容如下:第1章阐述了研究背景,分析了国内外研究现状。第2章介绍基于Python的在线教育网站系统设计与开发项目所使用的相关技术。第3章主要描述基于Python的在线教育网站系统设计与开发项目的可行性分析。第4章系统架构设计,数据库模型图,表结构设计。第5章系统各模块功能开发介绍。第6章测试系统各模块功能实现。第7章对于毕业论文的总结与展望。
第2章相关技术介绍2.1Python3.8开发语言Python是一种优雅、明确、简单高级、通用的广泛使用的解释型编程语言[6]。具有强大的简洁性,扩展性。对于同一功能的实现Python的代码量远远小于C和Java。Python具备很强的可移植性,使得代码可以在不同系统中的移植变得简单,也易于代码的整合;功能强大的第三方库,使得开发人员开发过程中无需按照预设功能重写逻辑,开发人员可以直接调用第三方库,也可以修改库中源代码,以满足开发者的开发需求。随着Python的快速发展,各种行业的从业人员开始学习使用Python。国外的谷歌,脸书平台,国内的豆瓣、知乎等平台都在使用Python作为首选开发语言。近年来兴起的爬虫,深度学习,人工智能,大数据分析都有着Python的身影,Python也变得越来越重要。2.2Django2.2开发框架Django是基于Python编程语言开发的开源Web开发框架。本框架使用MTV(模型、视图、模版)的设计模式[7]。Django的设计初衷是简化数据库驱动型网站开发成本,具有模块插拔性和组件复用性的优点[8]。Django框架核心包含:数据模型和数据库介质的对象映射器[9];用于处理URL分发器的正则表达式;视图系统用来处理请求;模版系统,在项目开发过程当中,开发人员可根据需求自由定制更新模板,开发性更加灵活[10]。2.3数据库存储技术2.3.1NavicatNavicat是一个开发维护人员用于操作数据库的软件,具有高效、对用户友好且安全的特性。界面简洁,操作方式简单,可以帮助开发维护人员方便快捷简单的对数据库各项细节进行管理。采用图像化界面管理,对比命令行管理方式,可以让开发维护人员短时间内上手操作数据库。Navicat支持对目前大多数主流数据库的远程链接管理,且支持多种操作系统,受到广大开发维护人员的追捧。2.3.2MySQL5.7数据库是一个交互性网站的核心功能,所有交互式网站都需要数据库,数据库也是网站的核心。MySQL是目前使用最多且操作最方便的数据库[11]。MySQL5.7版本也是目前使用最稳定的版本之一。它拥有更快的性能,更新的优化器,更安全的设计理念,是目前网站数据库开发最热爱的版本。配置简单,通过Docker容器即可快速创建启动,配合Navicat数据库管理工具[12],为项目开发如虎添翼。2.3.3MariaDB关于MariaDB的前世今生[12],MySQL的主导创始人MichaelWidenius把自己的MySQLAB公司以10亿多美金的价格卖给了SUN,随着SUN公司被甲骨文公司收购,Oracle公司也得到了MySQL的所有权[13]。随后MichaelWidenius使用自己女儿Maria的名字创造了一个全新的数据库管理系统MariaDB,MariaDB是MySQL的一个强大功能的开源分支,特点是完全兼容MySQL[14],其开源的特性也逐渐受到开发者的青睐。本项目开发时使用MySQL作为管理数据库,开发完毕,上线时转为MariaDB数据库[15],所有库表无痕迁移,使用方便简单。2.4uWSGIuWSGI和Nginx一样也是一个Web服务器,其相当于Django的项目容器,实现了uWSGI、WSGI等协议[16],在本项目云部署过程中DjangoWeb框架不直接和Nginx或者用户浏览器交互,这个通信工作由uWSGI通过uwsgi协议实现。动态资源由uWSGI服务响应,静态资源由Nginx服务响应[17]。整个流程如图2-1所示。图2-1uWSGI响应流程图2.5Nginx支持多种协议的Web服务器Nginx,是一个具有高性能HTTP与反向代理优点的服务器[18]。由俄罗斯Rambler.ru站点率先使用[19]。我们可以在几乎所有的网站中看到该网站在使用Nginx技术。与Apache服务器相比较,Nginx服务器具有着占用内存更少,服务器配置方便简单,静态资源处理能力更强,负载能力更强,服务更加稳定的优点[20]。Nginx在开发者开发过程及服务运行过程中提供负载均衡及端口转发的功能。Nginx服务不涉及具体代码执行,不完成向框架通信,在读取到服务请求时,根据请求需要将来源需求转发到不同的接口,正因如此Nginx可以实现高并发的负载均衡,如图2-2所示。图2-2Nginx实现负载均衡2.6本章小节本章详细叙述了,本项目在开发部署过程中使用到的具有代表性的关键技术。第一节介绍核心开发语言Python3.8;第二节介绍了Django开发框架,及其在开发中的优势;第三节通过三个小节介绍了所使用到的数据库相关技术;最后介绍了项目上线云部署的uWSGI与Nginx两个Web服务器和他们在交互过程中的参与方式。
第3章系统分析3.1可行性分析3.1.1技术可行性疫情后在线教育领域发展火爆,各种技术模块框架的支撑让各种开发问题得到了简单的解决方式。本系统使用Django框架,其功能强大,发展前景广阔,使用云片网API短信发送接口实现网站登录注册时的动态验证码短信发送方式,使用Python的django-simple-captcha第三方插件作为图片验证码生成方式。各种技术都有成熟的工具与可靠详细的帮助文档,本系统从技术层面上来分析是可行的。3.1.2操作可行性通过Xadmin插件搭建后台管理系统,权限定制分离,管理简洁高效。超级管理员只需对不同用户分配权限组即可管理用户权限。制定合理的开发计划,按照计划完成工作。对各项技术深入学习研究,具体操作可行。面向用户使用图形化界面,注册登录使用四位动态验证码,符合用户登录注册习惯。用户可以对认可的课程进行收藏,系统会根据用户所学的课程推荐相关课程以供学生学习。3.2功能需求分析3.2.1用户需求分析当用户访问在线教育平台时,最基础也是最重要的功能就是用户注册登录。用户首先通过手机号注册账号。完成从游客到用户身份的转变。用户进入个人中心后可以完善修改用户的个人的信息,也可以在手机号验证后更该手机号。在个人中心也可以看到用户消息,收藏的课程和学习数据,用户相关操作如图3-1所示。图3-1用户需求分析3.2.2授课机构需求分析授课机构分为培训机构,个人和高校,根据教师的授课特点擅长优势提供不同的课程服务。可以通过顶部的搜索框进行模糊查询。可以按照用户喜好,通过机构城市或者机构类型进行用户的喜好筛选。用户也可以按照机构总学习人次,课程总量进行降序排列后筛选。授课机构相关功能如图3-2所示。图3-2授课机构需求分析3.2.3授课教师需求分析授课教师隶属于授课机构,在授课机构,课程中起到链接上下的作用。本系统的授课教师可以申请为个人身份,也可以申请为授课机构或者授课高校的教师。用户可以对授课教师进行排序选择,通过授课教师的人气。可以把认可的授课教师分享到微信,朋友圈等交友平台。也可以收藏教师。授课教师相关功能如图3-3所示。图3-3授课教师需求分析3.2.4课程需求分析课程是本系统的核心,是用户的目的所在,也是本设计最初的目的。课程需求相关功能如图3-4所示。图3-4课程需求分析课程具有广告位,设置之后可在首页看到广告位的轮播图,用户可以按照课程学习的次数,课程的热度,按照课程的上线时间进行排序筛选。课程信息对课程进行详细的介绍,用户可以看到当前课程的授课教师,授课机构,学习过该课程的同学。进入该课程的学习之后,用户可以通过章节信息来学习相关章节。可以下载该课程所需要的资料。通过推荐用户也可以快速寻找到相关课程。3.2.5超级管理员需求分析超级管理员是一个项目不可或缺的部分,可以对所有数据进行处理,也可以根据需要添加管理员并给予不同的权限,以达到不同的权限需求。管理员权限可以分为以下几个方面:(1)管理授课机构:管理授课机构的城市信息,管理授课教师的信息,管理课程的详细信息。(2)管理用户:管理用户状态,用户信息修改,用户权限管理。(3)权限管理:将不同权限打包成组,用户权限定制。(4)管理维护广告位,查看系统日志。超级管理员相关需求功能如图3-5所示。图3-5超级管理员需求分析3.3系统流程图3.3.1注册流程图当用户访问网站,并且想进行学习但没有账号时,就需要进行注册操作,注册会自动跳转到注册界面,采用云片网短信验证码API接口,进行动态短息验证码注册登录,方便快捷,各数据输入正确合规后,将数据保存到数据库,并跳转到登录界面,使用注册的手机号登录。流程如图3-6所示。图3-6注册流程图3.3.2登录流程图用户进入登录页面后,使用自己注册的手机号作为账号,使用预留的密码进行登录。还能使用注册时的手机号码,接收四位数的短信验证码,使用动态短信验证码登录。登陆成功后可以进入个人信息页面进行详细信息的修改。流程如图3-7所示。图3-7登录流程图3.4安全性分析安全是一个网站的根基,没有网站安全其他功能就无从谈起。没有一个人愿意用一个漏洞百出经常泄露个人隐私的网站。所以网站的安全是开发过程中必须考虑的一个重要部分,本项目在网站安全性方面做了很多的防护措施。对于CSRF(跨站请求伪造),Django自身带有对于CSRF攻击的防护措施。框架会强制网开发人员在网站前端的HTML页面中的form表单中添加{%csrf_token%}进行对攻击的防护。项目启动后,会保存value值用于验证,只有这样表单才能顺利提交。如果不添加相应代码,网站回返回403禁止访问信息,有效方正CSRF攻击。此外,Django为防止SQL注入[22]和XSS跨站脚本攻击,会对特殊字符进行转译,这不影响用户的正常操作,也不会降低响应速度,能够有效规避安全风险,数据安全得到有效保护。
第4章系统设计4.1设计目标通过核心功能的实现和各个模块的实现。实现游客浏览公开课程,查看课程信息跳转到注册或者登录页面,转为系统用户后,查看课程信息及授课教师信息或者教师其他课程信息,还能查看授课机构的信息富文本显示。点击课程进行视频播放学习,用户可以对认可的课程、授课教师、授课机构进行收藏。通过系统顶部搜索框匹配关键字对课程、教师、机构进行模糊查询。可以在系统右侧下载课程配套的学习资料。实现授课机构对授课教师及其授课课程进行相关管理。完成系统的总体框架和每一个模块的开发,得到一个完整的设计结果,为项目实际开发提供指导和帮助,使项目成为一个完整可正常使用的系统。4.2系统架构设计本系统使用的架构是B/S架构,用户可以直接通过浏览器像服务器发送请求,无需额外下载软件。用户的相关响应请求通过Nginx与uWSGI服务器转发到工程相应的处理模块中,前端接收数据的模块接收数据库返回的数据,并通过网页展示给用户,具体系统架构如图4-1所示。图4-1系统架构图我们可以看到系统架构分为三个部分,web服务器层,项目层与最下边的数据存储层。我们逐一进行分析:Nginx服务器和uWSGI服务器组成本系统的服务器。两者分工不同又相互补充。Nginx服务器只进行静态资源处理,动态逻辑响应如动态渲染或者是表单提交,将发送给uWSGI服务器进行响应[15]。uWSGI服务器使用WSGI协议与Django项目交互,分工明确最终实现用户请求。具体过程如图4-2所示。图4-2web服务器响应过程项目使用MTV设计模式进行项目开发。该设计模式将Django框架分为三个层次。模型层(Model)处理数据部分的逻辑,链接数据库对数据表进行增删改查数据操作。前端HTML页面监听事件通过链接传递到视图层对应的后端View逻辑里并接收返回的数据信息;视图层处理逻辑,沟通模版模型。数据采用MariaDB进行存储管理,有利于开发人员使用,有利于管理员维护与管理。对于体积较大的数据,如教学视频,本系统采用阿里云对象存储OSS保存教学视频,数据库只存储相应的URL。用户在观看视频时后台直接通过相应的URL结合video.js在前端播放视频。通过阿里云对象存储OSS,访问速度得到提升,数据安全性得到有效保障。管理人员只需要进行简单的操作就能完成视频的上传部署,提升系统综合性能。4.3数据库设计数据库是一个系统必不可少的核心部分,一个架构合理,功能完备的数据库,能够便捷高效的管理系统各项数据。本系统线上部署使用MariaDB数据库与开发过程中使用的MySQL数据库相兼容,无缝转换。通过对象关系映射(ORM)建立模型层(Model)和数据库关系的映射,自动生成数据表。4.3.1数据库E-R图与EER模型图EER(增强实体关系模型)是对E-R模型的进一步细化,能够准确明了的描述数据与各种关系的特性,使管理员可以对抽象的事物进行事物模型分析,基于Python的在线教育网站系统设计与开发的E-R图与EER图。如图4-3图4-4所示。图4-3系统E-R图图4-3增强实体关系模型4.3.2数据表设计Django框架创建会自动生成数据表,我们通过设计并结合自身开发需要对表进行继承和扩展通过ORM映射成具体数据表。下面对部分核心表进行详细说明(1)用户信息表用户信息表,用来存储用户的基本信息,继承于Django框架自带的AbstractUser表。具体表设计如表4-1所示。表4-1用户信息表字段名数据类型字段含义说明idpasswordsuperuserusernameemailstaffbirthdaygenderaddressmobileimageintvarchartinyintvarcharvarchartinyintdatevarcharvarcharvarcharvarchar用户编号用户密码超级管理员用户用户名邮箱管理员权限用户生日性别男女注册地址注册手机号头像主键自动生成加密后存储默认为0确认为1非空可为空默认为0确认为1默认为空默认为男非空非空非空(2)课程信息表课程信息表,课程有关信息存储在此表中。和授课机构表与授课教师表通过外键进行相连。具体表设计如表4-2所示。表4-2课程信息表字段名数据类型字段含义说明idadd_timenamedesctimesdegreestudentsfavclicknoticecategorytagyouneed_knowteacher_telldetailimageteacher_idcourse_org_idclassicsbannerintdatevarcharvarcharintvarcharintintintvarcharvarcharvarcharvarcharvarcharlongtextvarcharintinttinyinttinyint课程编号添加课程的时间课程名课程相关描述分钟时长学习难度学习次数课程被收藏次数课程被用户点击数公告类别标签须知教师留言课程详情图片教师编号机构编号经典课程是否为播图主键自动生成自动生成非空非空非空初中高级非空非空非空非空非空非空非空非空富文本相对路径外键关联教师外键关联机构默认为0为1经典默认为0为1轮播课程章节信息单独存储为表,通过外键与课程相关联。具体表设计如表4-3所示。表4-3章节信息表字段名数据类型字段含义说明idadd_timenametimescourse_idintdatevarcharintint章节id添加时间章节名课程时长课程id主键自动生成自动生成非空非空外键关联课程每个章节的小节和视频链接保存在课程视频信息表中,具体表设计如表4-4所示。表4-4视频信息表字段名数据类型字段含义说明idadd_timenametimesurllesson_idintdatevarcharintvarcharint视频id添加时间视频名视频时长视频链接章节id主键自动生成自动生成非空非空阿里云存储地址外键关联章节课程学习中的课程资源,存储在课程资源表中,具体表设计如表4-5所示。表4-5课程资料表字段名数据类型字段含义说明idadd_timenamefilecourse_idintdatevarcharvarcharint课程资料id添加时间资料名文件链接课程id主键自动生成、自动生成非空非空外键关联课程(3)授课机构信息表授课机构的各种信息,存储在机构信息表当中,具体表设计如表4-6所示。表4-6授课机构信息表字段名数据类型字段含义说明idadd_timenamedesctagcategoryclickfavimageaddressstudentscoursescity_idauthgoldintdatevarcharlongtextvarcharvarcharintintvarcharvarcharintintinttinyinttinyint授课机构编号添加授课机构时间机构名机构的介绍机构标签机构分类点击次数收藏次数机构logo机构地址课程总学习次数课程数城市编号是否认证是否金牌主键,自动生成自动生成非空富文本非空个人高校机构非空非空地址相对路径非空非空非空外键关联城市默认为0为1认证默认为0为1金牌(4)授课教师信息表授课教师信息表,存储着授课教师的信息,具体表设计如表4-7所示。表4-7授课机构表字段名数据类型字段含义说明Idadd_timenamework_yearswork_companywork_positionpointsclickfavageimageorg_iduser_idintdatevarcharintvarcharvarcharvarcharintintintvarcharintint教师编号添加教师时间教师名字工作时间(年)就职机构职位教学特点点击次数收藏次数教师年龄教师头像授课机构编号用户编号主键自动生成自动生成非空非空非空非空非空非空非空非空地址相对路径外键关联授课机构外键关联用户
第5章系统实现系统需求分析,可行性论述完成后,需要使用具体代码按照设计思路,最终完成稳定可靠功能完整的系统功能。本章详细论述主要功能模块的实现技术与方式,得到最终成果。5.1用户功能模块实现用户可以在登录后跳转主页查看课轮播图,推荐课程广告和授课机构,用户可以通过关键字搜索公开课程,授课教师,授课机构。当用户没有注册时回自动跳转到注册页面进行注册,注册成功后可以进入个人中西更改个人信息。主页面如图5-1所示。图51主页面5.1.1登录功能用户点击主页面右上角的登录按钮会跳转到登录页面,可以通过输入账号和密码并与数据库比对进行登录,也可以通过预留手机号接收四位数动态验证码登录。如图5-2图5-3所示。图52登录页面图53动态验证码登录页面登录页面主要代码如下:#用户登录方法内置
classLoginView(View):
defget(self,request,*args,**kwargs):
#判断用户是否登录
ifrequest.user.is_authenticated:
returnHttpResponseRedirect(reverse("index"))
#登录页轮播图
banners=Banner.objects.all()[:3]
next=request.GET.get("next","")
#返回图片验证码表单登录页面
login_form=DynamicLoginForm()
returnrender(request,"login.html",{
"login_form":login_form,
"next":next,
"banners":banners,
})5.1.2注册功能用户点击主页面右上角的注册按钮会跳转到登录页面,可通过手机号进行注册。如图5-4所示。图54注册页面注册页面主要代码如下:defpost(self,request,*args,**kwargs):#注册接口
register_post_form=RegisterPostForm(request.POST)
ifregister_post_form.is_valid():
#没有注册账号依然可以登录
mobile=register_post_form.cleaned_data["mobile"]
password=register_post_form.cleaned_data["password"]
##判断用户是否存在
#existed_users=UserProfile.objects.filter(mobile=mobile)
#ifexisted_users:
#user=existed_users[0]
#else:
#用户不存在新建用户
user=UserProfile(username=mobile)
user.set_password(password)#set_password将密码加密
user.mobile=mobile
user.save()
login(request,user)
returnHttpResponseRedirect(reverse("index"))
else:
register_get_form=RegisterGetForm()#跳转回登录界面
returnrender(request,"register.html",{
"register_get_form":register_get_form,#配置显示图片验证码
"register_post_form":register_post_form,#显示错误信息
})5.1.3公开课功能用户可以点击公开课标签默认按照课程的上线时间展示,用户可以通过热门情况和参与人数降序排序,每页默认显示三个课程,自动分页点击课程可以进入课程学习页面进行学习。页面右端显示推荐的课程。其界面如图5-5图5-6所示。图55公开课页面图56公开课页面5.1.4授课教师功能用户就可以点击授课教师标签查看授课教师信息,可以按照人气进行降序排序,也可以进行关键字查询,页面右端显示授课教师排行榜,用户可以点击卡片跳转查看授课教师信息,对认可的授课教师进行收藏,用户也可以通过分享按钮分享到各个平台。其界面如图5-7图5-8所示。图57授课教师页面图58授课教师详情页面授课教师页面主要代码如下:#讲师详情
classTeacherDetailView(View):
defget(self,request,teacher_id,*args,**kwargs):#get方法
teacher=Teacher.objects.get(id=int(teacher_id))
#收藏状态
teacher_fav=False
org_fav=False
ifrequest.user.is_authenticated:
ifUserFavorite.objects.filter(user=request.user,fav_type=3,fav_id=teacher.id):
teacher_fav=True
ifUserFavorite.objects.filter(user=request.user,fav_type=2,fav_id=.id):
org_fav=True
hot_teachers=Teacher.objects.all().order_by("-click_nums")[:3]#热门教师排序
returnrender(request,"teacher-detail.html",{
"teacher":teacher,
"teacher_fav":teacher_fav,
"org_fav":org_fav,
"hot_teachers":hot_teachers,
})5.1.4授课机构功能用户可以点击页面首页的授课机构标签查看系统注册的授课机构。可以按照用户喜好,通过机构所在城市或者机构的类型进行用户的喜好筛选。用户也可以按照机构总学习人次,课程总量进行降序排列后筛选,筛选课程数多或者学习人次多的授课机构进行学习。顶部的搜索框还能对授课机构进行模糊查询。用户可以在页面右端进行咨询,数据会保存到后台。其界面如图5-9图5-10所示。图59授课机构页面图510授课机构详情页面授课机构相关功能代码如下:#从数据库中获取数据all_orgs=CourseOrg.objects.all()all_citys=City.objects.all()#读取全部city数据#授课机构热度排名hot_orgs=all_orgs.order_by("-click_nums")[:3]#首页搜索关键词实现keywords=request.GET.get("keywords","")s_type="org"ifkeywords:all_orgs=all_orgs.filter(Q(name__icontains=keywords)|Q(desc__icontains=keywords))#django的数据库or查询方法#通过机构类别对课程机构筛选category=request.GET.get("ct","")#取出前端传递的数据,默认为空ifcategory:all_orgs=all_orgs.filter(category=category)#通过所在城市对课程机构进行筛选city_id=request.GET.get("city","")ifcity_id:ifcity_id.isdigit():all_orgs=all_orgs.filter(city_id=int(city_id))#对机构进行排序sort=request.GET.get("sort","")ifsort=="students":all_orgs=all_orgs.order_by("-students")elifsort=="courses":all_orgs=all_orgs.order_by("-course_nums")org_nums=all_orgs.count()#执行数据库count语句,前端显示共几家#对课程机构数据进行分页try:page=request.GET.get('page',1)exceptPageNotAnInteger:page=1p=Paginator(all_orgs,per_page=3,request=request)#每页显示几条数据几个机构orgs=p.page(page)5.2后台管理模块实现后台是系统管理员管理入口,是一个完整的系统不可或缺的核心模块。系统使用开源Xadmin插件替代Django默认admin模块实现系统管理功能。Xadmin插件集成日志管理功能和权限管理功能,用户可根据需要对源码进行修改定制功能,其界面如图5-11图5-12图5-13所示。图511后台管理页面图5-12富文本编辑课程详情图5-12关联数据添加关联数据添加代码如下:#添加课程信息时同时添加章节信息暂时不支持两层嵌套不能添加视频
#添加章节信息
classLessonInline(object):
model=Lesson
#style="tab"
extra=0
exclude=["add_time"]
classCourseResourceInline(object):
model=CourseResource
style="tab"
extra=1
#结束#用户只读字段
readonly_fields=["students","add_time"]#用户数,添加时间
#exclude=["click_nums","fav_nums"]#用户点击数收藏数且看不到
ordering=["click_nums"]
#后台显示图标
model_icon='fafa-pause'
inlines=[LessonInline,CourseResourceInline]#添加课程信息时同时添加章节信息,VideoInline
style_fields={#detail字段显示为富文本
"detail":"ueditor"
}不同权限管理权限设置代码如下:#不同教师显示不同课程信息用户绑定讲师名
defqueryset(self):
qs=super().queryset()#返回信息
ifnotself.request.user.is_superuser:#判断是否为超级管理员
qs=qs.filter(teacher=self.request.user.teacher)
returnqs5.3系统部署环境表5-1系统部署环境工具名称备注服务器系统开发语言数据库框架服务器阿里云服务器Centos7Python3.8MariaDB5.8Django2.2Nginx、uWSGI
第6章系统测试6.1测试目标系统测试是一个完整系统必须的测试步骤,关乎着系统的稳定运行。在开发过程中穿插白盒测试使用打断点的方式对开发的功能进行测试,目的是在开发过程中发现问题解决问题,避免系统开发完毕后小问题扩大为大问题,导致系统崩溃,之前的开发心血白白浪费。系统部署到云端后,通过黑盒测试,模拟正常业务,对所有功能进行统一测试。本测试将从用户角度、授课教师角度、授课机构角度、超级管理员角度进行系统测试。使用火狐浏览器,配合人工操作的方式对系统数据准确性、数据安全性、功能完整性等等问题和需要改进功能。6.2系统功能测试6.2.1用户角度测试表6-1用户角度测试结果测试类别测试过程预期目标测试结果注册输入已经注册过的手机号输入正确手机号不符合标准密码错误短信验证码正确短信验证码弹出手机号已被注册验证短信发送成功弹出密码无效信息弹出验证码错误信息注册成功,跳转首页通过测试通过测试通过测试通过测试通过测试登录手机号或密码错误手机号密码都正确手机号或图片验证码错误手机号验证码都正确错误的四位动态验证码正确短四位动态验证码显示用户名或密码错误成功登陆并跳转显示字段不符合规范成功发送短信验证码弹出验证码错误信息登录成功,跳转首页通过测试通过测试通过测试通过测试通过测试通过测试课程相关功能查看轮播图广告位通过关键字进行课程搜索按照课程热门成度进行排序按照参与人数进行排序课程页面分页点击课程详情课程收藏分享视频资料下载课程评论显示切换正常搜索成功降序排序降序排序点击页码跳转正确跳转实现功能下载正常评论正常显示通过测试通过测试通过测试通过测试通过测试通过测试通过测试通过测试通过测试教师相关功能通过关键字搜索教师通过人气对教师排序点击教师查看教师详情教师收藏分享点击课跳转实现功能排序正常显示正常功能正常正常跳转通过测试通过测试通过测试通过测试通过测试机构相关功能通过关键字搜索搜索机构按照不同预设排序点击机构查看机构详情点击课程或教师跳转实现功能排序正常富文本显示机构信息正常跳转通过测试通过测试通过测试通过测试个人中心功能性别改为男生学习过的课程收藏的教师个人消息修改成功显示全部学习课程显示收藏的教师信息显示我的全部消息通过测试通过测试通过测试通过测试登录失败测试结果如图6-1所示。图6-1登录失败测试结果动态验证码错误,注册失败测试结果如图6-2所示。图6-2动态验证码错误测试结果6.2.2授课机构授课教师角度测试表6-2授课机构授课教师角度测试结果测试类别测试过程预期目标测试结果授课机构功能修改教师姓名删除章节资料调整视频播放顺序删除用户咨询信息显示新的教师姓名无法显示原资料视频顺序被修改删除后无法显示通过测试通过测试通过测试通过测试授课教师功能修改课须知删除章节资料修改课程标签管理他人课程显示新的课程须知无法显示原资料显示新的课程标签没有查看修改权限通过测试通过测试通过测试通过测试课程信息管理测试结果如图6-3所示。图6-3课程信息管理测试结果6.2.3超级管理员角度测试表6-3超级管理员角度测试结果测试类别测试过程预期目标测试结果登录后台普通账号登录授课教师登录授课机构登录超级管理员登录弹出错误信息有教师权限组权限有课程机构权限组权限拥有全部权限通过测试通过测试通过测试通过测试管理系统修改用户地址修改授课机构类型为高校取消教师认证修改课程封面图日志管理成功修改前端显示机构类型为高校前端不显示认证教师牌前端显示新的封面查看日志信息通过测试通过测试通过测试通过测试通过测试权限管理给新用户添加权限管理权限组添加相应权限将部分权限打包成组通过测试通过测试权限组管理测试结果如图6-4所示。图6-4权限组管理测试结果6.3本章小节本章通过从户角度、授课教师角度、授课机构角度、超级管理员角度进行测试,系统预设目标均已经实现,模块化编程概念,业务流程合理,能够满足一个在线学习系统的需要。第7章总结与展望7.1系统总结经过思考前与充分的前期准备,基于Python的在线教育网站系统已经开发完毕,通过了测试,并且进行了项目在线部署,提供了一个稳定的在线学习网站系统。系统的设计,前期的准备工作非常重要。通过大量的阅读相关文献,研究市场上已有的系统,充分的了解到了在线教育系统的工功能点。本文的工作总结如下,首先,通过搜索引擎搜索相关在线学习系统的资料,深入研究其业务逻辑关系与功能实现方式,挖掘系统缺陷。并通过作者学习的开发知识,确定开发语言为Python3.8编程语言,开发框架为Django2.2网站开发框架等技术细节。其次确定在线教育系统的业务需求,角色划分,权限管理,基本功能流程图,数据库相关关系设计。最后根据开发计划,书写项目代码,穿插相关技术的学习。对项目中的开发接口,例如:手机验证码接收,图片验证码显示与验证等功能,进行白盒测试,确定每个功能模块的正常使用。项目开发完成后,模拟用户正常业务,对系统进行黑盒测试,确保系统的稳定运行。解决了人们想在课堂之余进行在线学习的问题。作者在开发过程中收获颇丰,开发过程是对本科相关专业知识学习的检验。完成基于Python的在线教育网站系统后,各种专业知识融汇贯通起来,串成了一条线,不在独立作战。作者的进步要归功于本次毕业设计的开发过程。7.2系统展望因为开发经验不足,系统的设计与代码的实现上还有许多地需要优化改进,项目代码存在冗余。需要改进的地方如下:1.移动端发展迅猛,但是屏幕较小,由于时间问题没有对前端进行项目优化,没有采用动态势页面布局,对于小屏用户体验不好。2.鸿蒙系统发展态势迅猛,配合鸿蒙系统,实现在线教育系统从网页端到手机端的过渡,为鸿蒙系统生态圈贡献自己的力量。3.使用video.js进行视频播放,只
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年税务合规中的内部控制
- 2026年燃爆危险环境下的电气安全设计
- 货运驾驶员春运安全培训课件
- 货运车安全维修知识培训课件
- 临床护理管理优化与实施
- 儿科治疗进展及反思
- 医疗健康产业市场细分与竞争格局
- 医疗设备升级改造
- 2026年湖南高尔夫旅游职业学院单招综合素质笔试参考题库带答案解析
- 医疗创新项目汇报
- 翻车机工操作技能水平考核试卷含答案
- 2025年中职食品雕刻(食品雕刻技术)试题及答案
- 2026青海西宁市湟源县水务发展(集团)有限责任公司招聘8人考试参考试题及答案解析
- 2025年大学(运动康复)运动康复治疗技术测试试题及答案
- 1256《数据库应用技术》国家开放大学期末考试题库
- 美容院店长年度总结课件
- 2025年门诊部工作总结及2026年工作计划
- 《马克思主义基本原理概论》习题库完整版
- (2025年)昆山杜克大学ai面试真题附答案
- 2025年涉密信息系统集成资质保密知识测试新版题库(附答案)
- 污水处理设施运维服务投标方案(技术标)
评论
0/150
提交评论