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)
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)
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)
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)