开发起因
谢老师有一个操作系统测评软件,需要安装客户端,不太方便,于是前段时间突发奇想想做一个web版的,主要是熟悉一下如何用python开发网站。
web版的有如下优点:
- 不用安装任何客户端软件,打开浏览器就能在线测试
- 数据库放在云端,增加安全性
- 基于web,跨平台
- 更方便地统计所有用户的成绩
- 方便用户获取自己的排名
需求分析
需要实现的功能:
前端:
首页:选择题目难度
测试页面:展示题目,提供输入框,显示剩余时间,时间到自动提交,防止复制,防止粘贴
成绩及答案页面:显示得分,排名,以及错题的正确答案
后台:
数据库部分:题目入库,题目检索,获取答案,成绩入库,获取排名
web页面部分:为测试页面提供题目,时间等数据,接收用户数据,判断用户答案是否正确,计算成绩,返回排名与正确答案,错误处理,纠错功能,自动删除输入空格,输入字母自动转大写
实现方案:
- 后台编程语言:python。因为python是一门全能语言,既能处理数据库应用,还能方便得处理事物联系,比如计算成绩。web模块也很强大
- 前台实现:主要是html,通过css美化,用javascript来实现计时和自动提交动作。
- web框架:web.py。这是一个轻量级的web框架,可以很方便地构建小型web服务器并对外提供服务,一个类就是一个页面,每个页面有POST和GET两种方法。可以很方便获取用户输入
- 数据库:sqlite数据库,因为这个程序用到的数据很少,sqlite数据库采用单个文件来存放,管理方便,python自带其模块,使用也很简单,查询速度方面也是比较给力的。
- 模板引擎:jinja2。jinja2模板可以很方便的嵌入到html中,还可以实现一些判断,循环等操作来动态生成html代码。
具体实现
首先是题目入库,连接数据库,建表,从文本文件读取题目数据写入数据库。当web服务器启动后,初始页一个静态页面,可以选择题目难度,通过GET方法告诉服务器题目难度,然后服务器从数据库里面随机选出6个题目,根据难度和空数确定时间,通过jinja2模板填充页面数据,并返回测试页面。测试者开始做题,时间到或者测试者手动提交都会将测试者的答案提交到服务器,然后服务器对答案依次进行判断,并统计正确个数和错误答案,根据正确个数确定成绩,在根据成绩获取在系统里面的排名,一并将上面的信息返回。后台自动保存用户的成绩信息。测试者可以选择再测一次或者重新选择题目难度。
程序代码
演示地址
存在问题
- 在成绩页面点击浏览器后退按钮页面不能刷新
- 排名页面只给出排名第几,没有具体排名列表
- 页面还需要进一步美化
- 没有提供后台管理页面
- 如果用户禁用javascript则不能正常计时和自动提交(后台可以检测出来)
其他
- 前台美工:zcz
- 后台实现:ma6174