使用django完成的项目,当时赶时间完成,并没有深入进去。现在回顾一下技术,深挖一下知识。
这个比赛在进行的时候出了两个大问题。先回顾一下比赛规则,这两个问题都与规则相关。
比赛以组队方式进行每队三个人,共有五十道题目,前三十道题目每答完十道会给出一条信息,当30题答完,就会拿到3条提示信息。对这三条提示信息进行处理后,将会得出解锁后20题的密码。
第一个问题是,比赛时的答题数目是按照队伍计算的,而且代码里写的是当解锁题目数量==10||20||30的时候分别出现提示信息。也就是说当不小心刷新页面或者答了11题,返回的页面上就没有提示信息了。虽然一开始反复强调,但是还是出了乱子,几乎就没有一个队伍听见了我的话。
解决方法是现场改代码,想当然的方法是将==改成>=,后来证明这个方法是对的。可是我并没这么做,我害怕出现别的麻烦,然后就跳过了这个环节,好在这个环节只有五分钟,剩下20道题目自动解锁掉了。
第二个问题是,第二轮开始一定时间后,第一轮的题目将被锁定,不能再答。但是由于不知道现场选手的答题速度,我把这个锁定题目的操作设置为了手动控制(做了个主控台页面,每一轮的准备、锁定、排名操作都在上面)。由于前几届比赛都没有这个东西,作为一个从没测试过的新嵌入网站的系统,我在测试时,跟学生会的同学配合做了仔细的测试。但令人没有想到的事,百密一疏。这个代码的逻辑是遍历数据库中每一位用户,找到他们的队伍,然后锁定队伍中每位队员的题目。
在做测试时我给每位同学组了队。没有出现任何问题。但我忽略了实际比赛时,数据库中有很多报了名但是没有参赛也就没有队伍的同学,对,代码走到这里报错了:没有对应的队伍。好在不是什么太大的问题,不能锁定就不锁了呗。当然后来证明我错了。
第三个问题是,url配置,有几个应该功能独立的button之间我写的相对路径。也就是说,不按第一个就不能按第二个(或者说手动输入url才能按第二个,我没发觉有什么大问题所以就没这么做。)。比如刚才的“锁定第一轮题目”的按钮不能用,修改之后我想点它就必须点一下开始第一轮(好在这个开始按钮没有清空成绩的操作),然后再点锁定题目。可能最后很多人的总时间比比赛时间长好多(考虑了罚时还是长)的缘故在这里。不过还好,这些操作是对所有人有效的,不影响排名。但是返回来说,url配置太重要了,想做出一套好的url配置,应该好好钻研才是。
第四个问题是,代码中没有方便推迟时间的变量,每次推迟时间都要手动修改每一轮的开始和结束时间。代码这东西,每次修改都可能出现莫名其妙的问题。造成了不小的心理压力。
亮点:实在是没什么脸说亮点了。但是团体赛到个人赛的淘汰过程没出任何问题,淘汰逻辑做的很好,也没有收到数据库垃圾数据的影响。
问题总结:
心理问题:只有一个问题,就是做事没有尽善尽美的工匠精神。当然这话分两说,如果我能有一个队友,即使我们都是什么都不会,从零开始学,逻辑和代码商量着来, 比赛时出了问题有个商量,可能会好很多。另外时间还是不够,我已经很努力了,一个月时间从知道此事比赛。我从一个连网站分前后端都不知道的人写成了这个网站,并且基本上经受住了全校三百多为同学的考验(没崩就谢天谢地了,当然这要归功于前辈们做的配置)。
技术问题:我觉得这个项目有以下几个问题值得探究。
1、几百个同学同时提交答案,服务器和数据库能否够经受住这种考验?常用的几种不同的数据库有什么优劣?比如每个团队有一个正确题目数量,三位同学同时访问这个数据,是否会出错?
2、你的登录页面是检测cookie的,如果有request时cookie将会跳过登录环节。过滤淘汰同学只能在登录时拦截,那么决赛阶段怎样防止被淘汰的同学参与答题?
3、之后你对url配置方法是否有研究?
4、过滤掉数据库垃圾数据的方法?
回顾:
你在筹划这个项目时,觉得最大的问题是什么?
你在做这个项目时,遇到最大的问题是什么?怎样解决的?
你对django这个框架有什么看法?