示例#1
0
    def get(self, request):
        token = request.META.get('HTTP_TOKEN')
        homework_id = request.GET.get('homework_id')

        tea_id = t_chk_token(token)
        if isinstance(tea_id, Response):
            return tea_id

        h = chk_homework_id(homework_id)
        if isinstance(h, Response):
            return h

        h.delete()

        return Response(
            {
                'info': 'success',
                'code': 200,
                'data': HomeworkSer(h).data
            },
            status=200)
    def get(self, request):
        token = request.META.get('HTTP_TOKEN')
        homework_id = request.GET.get('homework_id')
        # 查token确认用户
        stu_id = s_chk_token(token)
        if isinstance(stu_id, Response):
            return stu_id
# 确认作业chk_homework
        h = chk_homework_id(homework_id)
        if isinstance(h, Response):
            return h
# 获取题目列表
        questions = question.objects.filter(
            Homework=homework_id).order_by('QuesNo')

        return Response(
            {
                'info': 'success',
                'code': 200,
                'data': QuestionSer(questions, many=True).data
            },
            status=200)
示例#3
0
    def get(self, request):
        token = request.META.get('HTTP_TOKEN')
        homework_id = request.GET.get('homework_id')

        # 查token确认用户
        tea_id = t_chk_token(token)
        if isinstance(tea_id, Response):
            return tea_id
        # 确认是哪门课
        h = chk_homework_id(homework_id)
        if isinstance(h, Response):
            return h

        # 获取作业详情
        homework_detail = question.objects.filter(
            Homework=homework_id).order_by('QuesNo')

        return Response(
            {
                'info': 'success',
                'code': 200,
                'data': QuestionSer(homework_detail, many=True).data
            },
            status=200)
示例#4
0
    def get(self, request):
        token = request.META.get('HTTP_TOKEN')
        homework_id = request.GET.get('homework_id')

        # 查token确认用户
        tea_id = t_chk_token(token)
        if isinstance(tea_id, Response):
            return tea_id
        # 确认是哪门课
        h = chk_homework_id(homework_id)
        if isinstance(h, Response):
            return h

        # 获取学生完成情况列表
        student_homework_list = submission.objects.filter(
            Homework=homework_id).order_by('-id')

        return Response(
            {
                'info': 'success',
                'code': 200,
                'data': SubmissionSer(student_homework_list, many=True).data
            },
            status=200)
    def post(self, request):
        token = request.META.get('HTTP_TOKEN')
        homework_id = request.POST.get('homework_id')
        # subtime = request.POST.get('subtime')

        json_list = request.POST.get('json_list')
        '''
        示例:
        [
            {"quesno":"1","stuans":"我不会做"},
            {"quesno":"2","stuans":"略略略"},
            ......
        ]
        '''
        # 查token确认用户
        stu_id = s_chk_token(token)
        if isinstance(stu_id, Response):
            return stu_id
        # 确认作业chk_homework
        h = chk_homework_id(homework_id)
        if isinstance(h, Response):
            return h

# 根据token获取学生学号
        stuno = student.objects.get(pk=stu_id).StudentNo
        student_name = student.objects.get(pk=stu_id).StudentName

        if len(submission.objects.filter(Homework=homework_id,
                                         StudentNo=stuno)) > 0:  #已提交
            # 查看作业表和答案表
            return Response(
                {
                    'info': '已经完成过作业,跳转到查看已完成作业、答案和分数的页面',
                    'code': 403,
                },
                status=403)

        else:
            # 处理是否过期的需求
            check_isExpired = homework.objects.get(pk=homework_id).isExpired
            print(check_isExpired)
            # 已过期
            if check_isExpired == True:
                return Response({
                    'info': '该作业已过期,不可提交',
                    'code': 400,
                },
                                status=400)

            else:
                list = json.loads(json_list)
                print(list)

                create_submission = submission.objects.create(
                    StudentNo=stuno,
                    StudentName=student_name,
                    SubTime=timezone.now(),
                    isSubmitted=True,
                    Homework=h)

                # 向answer中批量添加记录
                for i in list:
                    create_answer = answer.objects.create(
                        QuesNo=i['quesno'],
                        StudentAnswer=i['stuans'],
                        Submission=create_submission)

                ############# 这里放自动批改的方法
                # 通过作业id查提交id
                sub_id = submission.objects.get(Homework=homework_id,
                                                StudentNo=stuno).pk
                # 取出学生所有答案的记录
                all_answers = answer.objects.filter(Submission=sub_id)

                # 取题目表中所有题的记录
                all_questions = question.objects.filter(Homework=homework_id)
                # 取所有题个数
                all_counts = all_questions.count()
                # # 取该次作业所有题的类型type
                # all_type = all_questions.Type

                # 循环计分
                for i in range(int(all_counts)):
                    # 如果不是客观题就跳出当前循环
                    if all_questions[i].Type != '0':
                        continue
                    # 分别取出标准答案和学生答案
                    correct_answer = all_questions[i].CorrectAnswer
                    student_answer = all_answers[i].StudentAnswer
                    # 取出学生那道题的记录
                    certain_answer = all_answers[i]
                    # 取出那道题的分值
                    score = all_questions[i].Score
                    # 比较学生答案和标准答案并给分
                    if student_answer == correct_answer:
                        certain_answer.Grade = score
                        certain_answer.save()
                    else:
                        certain_answer.Grade = float('0')
                        certain_answer.save()

                # 提交表记录
                student_submission = submission.objects.get(pk=sub_id)
                # 所有答案记录
                all_answers = answer.objects.filter(Submission=sub_id)
                total = all_answers.aggregate(Sum('Grade'))
                totalgrade = total['Grade__sum']
                student_submission.TotalGrade = totalgrade
                student_submission.save()

                return Response(
                    {
                        'info': 'success',
                        'code': 200,
                        'data': StuAnswerSer(all_answers, many=True).data
                    },
                    status=200)
示例#6
0
    def get(self, request):
        token = request.META.get('HTTP_TOKEN')
        homework_id = request.GET.get('homework_id')

        # 查token确认用户
        tea_id = t_chk_token(token)
        if isinstance(tea_id, Response):
            return tea_id
        # 确认是哪门课
        h = chk_homework_id(homework_id)
        if isinstance(h, Response):
            return h

        if len(analysis.objects.filter(Homework=homework_id)) > 0:
            pass

        else:
            # 本次作业人数,平均分,满分,最高分,最低分,各分数人数分布,每道题目回答的正确率;
            ##### 本次作业需完成人数
            course_id = homework.objects.get(pk=homework_id).Course
            students = student.objects.filter(Course=course_id)
            all_counts = students.count()

            # 先提取出提交表中本次作业的所有提交记录
            all_submission = submission.objects.filter(Homework=homework_id)
            ##### 本次作业提交人数
            # count作业id为homeworkid的提交记录数量
            submission_counts = all_submission.count()

            ##### 平均分
            # 先提取出提交表中本次作业的所有提交记录,然后对TotalGrade求平均
            ave = all_submission.aggregate(Avg('TotalGrade'))
            print(ave)
            average = ave['TotalGrade__avg']

            ##### 满分
            all_question = question.objects.filter(Homework=homework_id)
            f = all_question.aggregate(Sum('Score'))
            full = f['Score__sum']

            ##### 最高分
            ma = all_submission.aggregate(Max('TotalGrade'))
            max = ma['TotalGrade__max']

            ##### 最低分
            mi = all_submission.aggregate(Min('TotalGrade'))
            min = mi['TotalGrade__min']

            create_analysis = analysis.objects.create(
                AllCounts=all_counts,
                SubCounts=submission_counts,
                Average=average,
                Full=full,
                Max=max,
                Min=min,
                Homework=h)

        get_analysis = analysis.objects.get(Homework=homework_id)

        return Response(
            {
                'info': 'success',
                'code': 200,
                'data': AnalysisSer(get_analysis).data
            },
            status=200)