Exemplo n.º 1
0
def probationers_list(request):
    test = Test.objects.get(id=request.data['test'])
    probationer = Probationer(
        date = datetime.datetime.now(),
        test = test,
        name = request.data['name'],
        precent = round(request.data['percent'],2),
        mark = request.data['mark']
    )
    probationer.save()
    return Response(status=status.HTTP_201_CREATED)
Exemplo n.º 2
0
def test_detail(request, id):
    user = request.user
    test = get_object_or_404(Test, id=id, group_access=user.study_group)

    if request.method == "GET":
        test_serializer = TestSecondSerializer(test).data
        #шарим данные
        for option in test_serializer['options']:
            random.shuffle(option['questions'])
            for question in option['questions']:
                random.shuffle(question['answers'])

        return JsonResponse({'test': test_serializer})
    elif request.method == "POST":
        data = json.loads(request.body.decode("utf-8"))
        option = get_object_or_404(Option, id=data.get('option', ''), test=test)
        probationer = Probationer(
            option = option,
            user = user,
            mark = data.get('mark', ''),
            precent = round(data.get('percent', ''), 2),
            date = timezone.now()
        )

        probationer.save()
        for question in data.get('questions', ''):
            for answer in question['answers']:
                if answer.get('selected', False):
                    answer = get_object_or_404(Answer, id=answer['id'])
                    probationer_answer = ProbationerAnswer(
                        probationer = probationer,
                        answer = answer
                    )

                    probationer_answer.save()

        return HttpResponse(status=status.HTTP_201_CREATED)
    else:
        return HttpResponse(status=status.HTTP_404_NOT_FOUND)
Exemplo n.º 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('Такая страница не существует!')