如何在Django-temp中创建计时器javascript组件

2024-10-01 04:59:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用django创建一个在线考试。我使用了一个倒计时javascript计时器来判断时间何时结束。在

但问题是:每次我移到下一个问题页面,计时器都会重新启动。在

有没有办法让时间在刷新页面后继续?在

这是我的模板代码(有定时器)

    <form name="counter"><input type="text" size="8" 
name="d2"></form> 

<script> 
<!-- 
// 
 var milisec=0; 
 var seconds={{time}}; 
 document.counter.d2.value={{time}}; 



function display()
{ 
 if (milisec<=0){ 
    milisec=9 
    seconds-=1 
 } 
 if (seconds<=-1){ 
    milisec=0 
    seconds+=1 
 } 
 else 
    milisec-=1 
    document.counter.d2.value=seconds+"."+milisec 
    setTimeout("display()",1000) 
} 
display() 
-->
</script>

提前谢谢


Tags: nameformtimevaluevardisplaycounter时间
3条回答

最容易实现的方法是在POST参数中传递当前计时器值,然后在下一页中使用该计时器值重新启动计时器。在

使用ajax(可能通过django库,比如dajax)似乎是一个很好的方法,并将计时器放在一个页面上(在问题移动时不断更新)。在

此外,如果以任何方式使用该在线测试(例如,作为一个类的测验成绩),则应在服务器上记录初始和最终时间戳,并仅根据该差异进行计算(可能会额外提供几秒钟来考虑通信延迟)。一般来说,你不能相信运行的javascript没有被改变。它仍然可以方便地让他们知道还剩多少时间,但是请记住,所有客户端java脚本都可以很容易地被用户修改,以便给自己更多的时间。在

我就是这么做的。在

你知道他们什么时候开始测试的,你也知道他们需要多长时间,所以当测试开始时,计算预期的结束时间,并将其存储在某个地方(数据库等)。将结束时间作为一个变量传递给模板,并在javascript中使用它来计算剩余时间。因为每一页的结束时间总是相同的,所以您不必担心在表单之间传递值。在

如果你在表单之间传递值或者设置cookies,那么你就可以很容易地让别人破解测试,给自己更多的时间。将这些值存储在幕后,而不在页面上进行更改,则会使黑客攻击变得更加困难。他们仍然可以破解javascript计时器,但这很好,因为在提交每个问题后,您只需检查当前时间是否大于结束时间,如果大于结束时间,您就知道时间已过期,您可以结束测试。在

如果您使用像http://keith-wood.name/countdown.html这样的jquery插件,它也会让您的生活更轻松。在

希望有帮助。在

使用session存储日期\时间。在

如果变量不存在,则首先创建该变量,例如:

import datetime
#Store the current time in session  
if 'time_started' not in request.session:   
    request.session['time_started'] = datetime.datetime.today()

读取你刚刚使用的值

^{2}$

如果需要删除time_started变量,可以使用以下命令:

del request.session['time_started'] #delete time_started variable in session

相关问题 更多 >