我正准备在Django进行测试或测验。测验需要在特定时间范围内完成。说40分钟30分钟。我总是可以在测试开始时启动一个时钟,然后在测验完成时计算时间。但是,在尝试期间,可能会出现诸如互联网连接中断或系统崩溃/断电等问题。
我需要一个策略来确定何时发生这样的事故,并停止时钟,然后让用户再次从停止的地方进行测试,然后再次启动时钟。
什么是正确的策略?任何帮助,包括示例代码/示例/想法都是最受欢迎的
答案 0 :(得分:2)
最简单的方法是在人员开始测验时添加时间戳,然后将其与他们提交的时间进行比较。当然,这并没有考虑连接丢失,崩溃等等......就像你提到的那样。
为了解决这些问题,我可能会使用像node.js这样的东西。每个客户端在连接到测验时都会“登记”。然后定期(每1s,10s,1m等等)客户端检入。如果在这些时间间隔客户端没有办理登机手续,你可以假设他们已经连接掉线了。您可以跟踪他们何时再次连接,并从他们离开的地方开始计时器。
这是我最初关于如何跟踪连接丢失和崩溃的想法。使用对Django视图的前端ajax调用也可以这样做。
答案 1 :(得分:2)
要么你在客户端做时钟,在这种情况下他们总是以某种方式作弊,或者你在服务器端做,然后你没有考虑到这些中断。
为了减少作弊并且仍允许中断,你可以做“保持活力”。
这里客户端代码向服务器宣布它每隔一段时间仍然存在,比如说每5秒一次。服务器端注意到它何时停止获取这些消息,并暂停/停止时钟。但是它仍然有开始和结束时间,所以你知道真正花费了多长时间,以及在客户端应该在那里花了多长时间。
通过这两条信息,您可以非常轻松地追踪奇怪的行为并将人们列入黑名单。列入黑名单的人可能不知道他们被列入黑名单,但他们的测验分数并没有出现在你的测验系统的其他用户身上。
答案 2 :(得分:2)
您的策略应该取决于测试的重要性和重新进行整个测试的能力。
这些是您首先需要回答的问题。
请记住:
我的方法是:
答案 3 :(得分:0)
当与用户的连接断开时暂停时钟的问题是,用户每次收到新问题时都可以断开他们的计算机与互联网的连接,然后在他们得出答案后重新连接。
您可以做的一件事是为用户提供一定的时间来处理每个问题。
当用户成功地将问题提交给他们的浏览器时,时钟启动,如果用户在时间限制之前提交了答案,则会被接受,否则无效。
这意味着如果用户失去连接,它只会影响他们当前的问题。但这也意味着用户无法灵活分配他们想要分配给每个问题的时间,您可以自行决定。
我原以为你可以做一些事情,比如从屏幕上删除问题,除非与服务器的连接仍然存在,但用户总是可以在断开连接之前屏幕拍摄问题。