Example #1
0
def test_results(request, login, id):
	user = check_sign_in(request)
	test = get_object_or_404(Test,id=id, creator=user)
	if request.is_ajax():
		probationers = models_to_dict(Probationer.objects.filter(test=test).order_by('-date'))
		return HttpResponse(json.dumps(probationers))
	else:
		return render_to_response('test_results.html', {'login': user, 'test': test})
Example #2
0
def test(request, id):
	login = check_sign_in(request)
	test = get_object_or_404(Test, id=id, public_access=True)
	if request.is_ajax():
		#Если не существует сессии с данным тестом , мы ее создаем
		if 'test' not in request.session or request.session['test']['id'] != test.id:
			questions = models_to_dict(Query.objects.filter(test=test).order_by('?')[:test.questions_count])
			random.shuffle(questions)

			request.session['test'] = {
				'id': test.id,
				'questions' : list(map(lambda quest: quest['id'], questions)),
				'answers' : [],
				'current_quset': 0,
				'user': ''
			}

		quest = Query.objects.get(id=request.session['test']['questions'][request.session['test']['current_quset']])
		answers = models_to_dict(Answer.objects.filter(query=quest))
		random.shuffle(answers)
		#проверяем включены ли подсказки и время сдачи
		test = model_to_dict(test)
		quest = model_to_dict(quest)
		if not test['time_completion']:
			quest['time'] = False
		if not test['helps']:
			quest['help'] = False

		#проверяем авторизирован ли пользователь и присутствие имении в сессии
		#Включаем возможность модификации сесии
		request.session.modified = True

		if login.is_authenticated() and len(login.get_full_name()) != 0:
			request.session['test']['user'] = login.get_full_name()
			name = True
		elif len(request.session['test']['user']) == 0:
			name = False

		return HttpResponse(json.dumps({'quest': quest, 'answers': answers, 'name': name}))
	else:
		return render_to_response('test.html', {'login': login, 'test': test})
Example #3
0
def test_next_quest(request):
	if request.is_ajax():
		if 'test' in request.session:
			#Включаем возможность модификации сесии
			request.session.modified = True
			#сохраняем ответы
			answers = list(map(lambda answer: {'id': answer['id'], 'selection': answer['selection']},json.loads(request.POST['answers'])))
			request.session['test']['answers'].append(answers)
			#отдаем следующий вопрос или завершаем тест
			next_question = request.session['test']['current_quset'] + 1
			if next_question <= len(request.session['test']['questions']) - 1:
				#увеличиваем индекс текущего вопроса
				request.session['test']['current_quset'] = next_question
				#находим данные
				test = Test.objects.get(id=request.session['test']['id'])
				quest = Query.objects.get(id=request.session['test']['questions'][next_question], test=test)
				answers = models_to_dict(Answer.objects.filter(query=quest))
				random.shuffle(answers)
				#проверяем включены ли подсказки и время сдачи
				test = model_to_dict(test)
				quest = model_to_dict(quest)
				if not test['time_completion']:
					quest['time'] = False
				if not test['helps']:
					quest['help'] = False

				return HttpResponse(json.dumps({'quest': quest, 'answers': answers}))
			else:
				#расчитываем результаты
				test_data = request.session['test']
				test = Test.objects.get(id=test_data['id'])
				max_points = 0
				user_points = 0
				#начинаем обработку вопросов и ответов
				for num in range(len(test_data['questions'])):
					question = Query.objects.get(id=test_data['questions'][num])
					test_data['questions'][num] = model_to_dict(question)
					max_points += test_data['questions'][num]['point']
					check_question = True
					#перебираем ответы и формируем ответ, так же полученный бал и максимально возможный балл
					for answer in test_data['answers'][num]:
						answer_data = model_to_dict(Answer.objects.get(id=answer['id'],query=question))
						if answer_data['correct'] != answer['selection']:
							check_question = False
							answer['error'] = True
						else:
							answer['error'] = False
						answer['correct'] = answer_data['correct']
						answer['text'] =  answer_data['text']
					if check_question:
						user_points += test_data['questions'][num]['point']

					test_data['questions'][num]['answers'] = test_data['answers'][num]

				#получаем процент
				user_percent = user_points * 100 / max_points
				test = model_to_dict(test)

				if user_percent >= 0 and user_percent < test['two_mark']:
					color = 'red'
					result = 2
				elif user_percent >= test['two_mark'] and user_percent < test['three_mark']:
					color = 'yellow'
					result = 3
				elif user_percent >= test['three_mark'] and user_percent < test['four_mark']:
					color = 'blue'
					result = 4
				else:
					color = 'green'
					result = 5

				#создаем объект тестируемого
				user = check_sign_in(request)
				if user.is_authenticated():
					probationer = Probationer(
						test = Test.objects.get(id=test['id']),
						user = user,
						name = test_data['user'],
						precent = round(user_percent, 1),
						mark = result,
						date = datetime.datetime.now()
					)
				else:
					probationer = Probationer(
						test = Test.objects.get(id=test['id']),
						name = test_data['user'],
						precent = round(user_percent, 1),
						mark = result,
						date = datetime.datetime.now()
					)
				probationer.save()
				#удаляем сессию
				questions = test_data['questions']
				del request.session['test']

				return HttpResponse(json.dumps({'test_result': result, 'color': color, 'questions': questions}))
		else:
			raise Http404('Отсутствует сессия')
	else:
		raise Http404('Такая страница не существует!')