Как создать компонент JavaScript таймера в шаблоне Django - PullRequest
1 голос
/ 15 мая 2011

Я пытаюсь создать онлайн-экзамен с использованием 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>

заранее спасибо

Ответы [ 4 ]

5 голосов
/ 16 мая 2011

Это то, что я сделал.

Вы знаете, когда они начали тестирование, и вы знаете, как долго они должны его пройти, поэтому, когда тест начинается, рассчитайте ожидаемое время окончания и сохраните его где-нибудь.(база данных и т. д.).Передайте время окончания в качестве переменной в шаблон и используйте его в своем javascript для расчета оставшегося времени.Поскольку время окончания всегда будет одинаковым для каждой страницы, вам не нужно беспокоиться о передаче значений между формами.

Если вы передадите значения между формами или установите файлы cookie, то вам будет очень легко взломать тест, чтобы дать им больше времени.Хранить это значение за кулисами, а не изменять его на страницах, будет немного сложнее для взлома.Они все еще могут взломать таймер javascript, но это нормально, потому что после каждого вопроса вы просто проверяете, больше ли текущее время, чем время окончания, и если это так, вы знаете, что время истекло, и вы можете закончить тест.

Если вы используете плагин jquery, например http://keith -wood.name / countdown.html , это также облегчит вашу жизнь.

Надеюсь, что это поможет.

3 голосов
/ 15 марта 2012

Используйте сеанс для сохранения даты \ времени.

Сначала вы создаете переменную, если она не существует, например:

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

Чтобы прочитать значение, вы просто используете

time_started = request.session['time_started']

Если вам нужно удалить переменную time_started, вы можете использовать это:

del request.session['time_started'] #delete time_started variable in session
1 голос
/ 16 мая 2011

Самым простым для реализации было бы просто передать текущее значение таймера в параметрах POST и перезапустить таймер, используя это значение таймера на следующей странице.

Вероятно, лучше использовать ajax (возможно, через библиотеку django, например, dajax ), и это хороший способ для этого, и иметь таймер на одной странице (который постоянно обновляет вопросы по мере их продвижения) ,

Кроме того, если этот онлайн-тест используется каким-либо образом (например, в качестве оценки теста для класса), вы должны записать начальную и конечную временную метку на сервере и использовать только эту разницу (возможно, предоставив несколько дополнительных секунд для приходится на коммуникационное отставание). В общем, вы не можете поверить, что работа JavaScript не была изменена. Это все еще может быть удобно, чтобы сообщить им, сколько осталось времени, но помните, что все клиентские java-скрипты легко модифицируются пользователем, чтобы дать им больше времени.

1 голос
/ 16 мая 2011

Самый простой способ, на мой взгляд, это просто использовать AJAX и заменить форму на текущей странице.Таким образом, вам не нужно обновлять, и таймер будет продолжать работать.Также будет загружена следующая форма быстрее!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...