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)
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)
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('Такая страница не существует!')