示例#1
0
 def put(request):
     req = request.data
     if len(req) == 4:
         try:
             bid = req['bid']
             text = req['text']
             score = req['score']
             student_id = req['student_id']
         except KeyError:
             raise ArgumentError()
         if not 1 <= score <= 5:
             raise ArgumentError(detail="评分只能为1-5分")
         try:
             student = Student.objects.get(id=student_id)
         except Student.DoesNotExist:
             raise UnAuthorizedError()
         try:
             course = Course.objects.get(bid=bid)
         except Course.DoesNotExist:
             raise NotFoundError(detail="没有这门课程")
         try:
             evaluation = CourseEvaluation.objects.get(student=student,
                                                       course=course)
             evaluation.evaluation = text
             evaluation.score = score
         except CourseEvaluation.DoesNotExist:
             evaluation = CourseEvaluation(student=student,
                                           course=course,
                                           score=score,
                                           evaluation=text)
         evaluation.save()
         return HttpResponse(status=201)
     raise ArgumentError()
 def get(request):
     # 记录次数
     try:
         count = RequestRecord.objects.get(name='score')
     except RequestRecord.DoesNotExist:
         count = RequestRecord(name='score', count=0)
     count.count += 1
     count.save()
     # 查询
     req = request.query_params.dict()
     result = Score.objects.all()
     if len(req) == 2:
         for key, value in req.items():
             if key == 'semester':
                 result = result.filter(semester=value)
             elif key == 'student_id':
                 # 检查学生是否存在
                 try:
                     Student.objects.get(id=req['student_id'])
                 except Student.DoesNotExist:
                     raise UnAuthorizedError()
                 result = result.filter(student_id=value)
             else:
                 raise ArgumentError()
     else:
         raise ArgumentError()
     score_serializer = ScoreSerializer(result, many=True)
     return Response(score_serializer.data)
示例#3
0
    def get(request):
        """
        管理员调用获得用户反馈信息
        http://127.0.0.1:8000/feedback/
        http://127.0.0.1:8000/feedback/?date=2020-05-14
        http://127.0.0.1:8000/feedback/?kind=bug
        无参数或参数插入日期或反馈类别
        返回结果:学生id,插入日期,反馈类别,具体内容
        :param request:
        :return:
        """
        req = request.query_params.dict()

        if (len(req) != 1) & (len(req) != 0):
            raise ArgumentError()

        result = []
        if "date" in req:
            result = Feedback.objects.filter(date__contains=req["date"])
        elif "kind" in req:
            result = Feedback.objects.filter(kind=req["kind"])
        elif len(req) == 0:
            result = Feedback.objects.all()
        else:
            raise ArgumentError()
        content = []
        for i in result:
            name = i.student_id.name
            content.append({"name": name, "date": i.date, "kind": i.kind, "content": i.content})
        return Response(content)
    def get(request):
        """
        根据学号返回该学生的所有功能更新时间
        访问方法
        GET
        http://127.0.0.1:8000/spider/update/?student_id=17373349 某个学生的所有功能更新时间
        http://127.0.0.1:8000/spider/update/?calendar=1       校历
        http://127.0.0.1:8000/spider/update/?empty_room=1    空教室
        :param request:
        :return:
        """
        req = request.query_params.dict()

        if len(req) != 1:
            raise ArgumentError()

        content = {}
        if "student_id" in req:
            try:
                student = Student.objects.get(id=req["student_id"])
                content = PostRecord.objects.filter(student_id=student).values(
                    "name", "time")
            except Student.DoesNotExist:
                raise UnAuthorizedError
        elif ("calendar" in req) and (req["calendar"] == "1"):
            content = PostRecord.objects.filter(name="calendar").values(
                "name", "time")
        elif ("empty_room" in req) and (req["empty_room"] == "1"):
            content = PostRecord.objects.filter(name="empty_room").values(
                "name", "time")
        else:
            raise ArgumentError

        return Response(content)
示例#5
0
 def default(request):
     req = request.query_params.dict()
     teacher_courses = []
     if 'student_id' in req.keys():
         output = {}
         student_id = req['student_id']
         try:
             student = Student.objects.get(id=student_id)
         except Student.DoesNotExist:
             raise UnAuthorizedError()
         courses = StudentCourse.objects.filter(student_id=student)
         for course in courses:
             select_course = course.course_id
             teacher_course = TeacherCourse.objects.filter(
                 course_id=select_course)[0]
             teacher_courses.append(teacher_course)
         result = TeacherCourseSerializer(teacher_courses, many=True).data
         info = format_search(result)
         total = len(info)
         output['total'] = total
         output['cur_page'] = 1
         output['total_page'] = 1
         output['info'] = info
         return Response(output)
     raise ArgumentError()
示例#6
0
    def get(request):
        """
        输入:校区,日期,第几节到第几节,返回:教学楼,教室
        参数1:校区 e.g. 新主楼
        参数2:日期 e.g. 2020-4-18
        参数3:第几节到第几节 e.g. 1,2,3,
        例:http://114.115.208.32:8000/classroom/?campus=学院路校区&date=2020-04-20&section=1, 2, 3,
        返回:查询结果
        没有提供参数,参数数量错误,返回400错误;
        参数错误,返回400错误;
        """

        try:  # 保存前端请求数据
            record = RequestRecord.objects.get(name="classroom")
            record.count = record.count + 1
            record.save()
        except RequestRecord.DoesNotExist:
            RequestRecord(name="classroom", count=1).save()
        req = request.query_params.dict()

        if (len(req) != 3) | ("campus" not in req) | ("date" not in req) | ("section" not in req):
            raise ArgumentError()

        campus = req["campus"]
        date = req["date"]
        section = req["section"]
        content = {}
        req = Classroom.objects.filter(campus=campus, date=date, section__contains=section)
        tb_re = req.values("teaching_building").distinct()

        for i in tb_re:
            cr_re = req.filter(teaching_building=i["teaching_building"]).values("classroom").distinct()
            content.update({i["teaching_building"]: cr_re})

        return Response(content)
示例#7
0
    def get(request):
        """
        功能:前端获取校历和该学生未完成的ddl
        调用方法:http://127.0.0.1:8000/ddl/Calendar/?student_id=17373349&school_year=2019-2020
        返回参数:具体学期,日期,节假日,ddl事件
        具体json格式见接口文档,两个列表,一个ddl,一个节假日
        :param request:
        :return:
        """
        try:  # 保存前端请求数据
            record = RequestRecord.objects.get(name="SchoolCalendar")
            record.count = record.count + 1
            record.save()
        except RequestRecord.DoesNotExist:
            RequestRecord(name="SchoolCalendar", count=1).save()

        req = request.query_params.dict()

        if (len(req) != 2) or ("student_id" not in req) or ("school_year"
                                                            not in req):
            raise ArgumentError()

        try:
            Student.objects.get(id=req['student_id'])
            ddl_req = DDL.objects.filter(student_id=req['student_id'])
        except Student.DoesNotExist:
            raise UnAuthorizedError()

        # 该学生未完成的ddl
        ddl = ddl_req.filter((Q(state="尚未提交") | Q(state="草稿 - 进行中"))).values(
            "course", "homework", "ddl")

        # 第一学期开始日期+寒假开始日期+第二学期开始日期+第三学期开始日期
        try:
            semester = SchoolYear.objects.get(school_year=req["school_year"])
        except SchoolYear.DoesNotExist:
            raise DatabaseNotExitError

        # 节假日信息
        holiday = SchoolCalendar.objects.filter(
            Q(semester__contains=req["school_year"])
            & ~Q(holiday__contains=req["school_year"]))

        content = {
            "school_year": req["school_year"],
            "first_semester": semester.first_semester,
            "winter_semester": semester.winter_semester,
            "second_semester": semester.second_semester,
            "third_semester": semester.third_semester,
            "end_semester": semester.end_semester
        }

        content.update({
            "holiday":
            holiday.values("year", "semester", "date", "holiday"),
            "ddl":
            ddl
        })

        return Response(content)
示例#8
0
    def post(request):  #
        """
        访问方法 POST http://127.0.0.1:8000/classroom/
        数据格式
        {
            "date":"2020-04-20",
            "classroom":[
                {
                    "campus":"学院路校区",
                    "teaching_building":"一号楼",
                    "classroom":"(一)203",
                    "section":"1,2,3,4,5,7,"
                }
                    ]
        }
        输出:HTTP状态码,错误为500
            正确,{"state":1}
        """
        req = request.data
        Classroom.objects.filter(date=req['date']).delete()

        try:  # 学生更新数据最新时间
            PostRecord.objects.get(name="empty_room").delete()
            PostRecord.objects.get(name="empty_room").save()
        except PostRecord.DoesNotExist:
            PostRecord(name="empty_room").save()

        if "classroom" not in req:
            raise ArgumentError()
        for key in req["classroom"]:
            Classroom(campus=key["campus"], teaching_building=key["teaching_building"],
                      classroom=key["classroom"], date=req["date"], section=key["section"]).save()

        content = {"state": 1}
        return Response(content)
示例#9
0
 def delete(request):
     req = request.data
     if 'ack' in req.keys() and req['ack'] == "sure":
         course = Course.objects.all()
         teacher = Teacher.objects.all()
         public_course = PublicCourse.objects.all()
         course.delete()
         teacher.delete()
         public_course.delete()
         return HttpResponse(status=204)
     raise ArgumentError(detail=None)
示例#10
0
 def get(request):
     start_day = '2020-2-24'
     req = request.query_params.dict()
     result = StudentCourse.objects.all()
     # 记录查询次数
     try:
         count = RequestRecord.objects.get(name='timetable')
     except RequestRecord.DoesNotExist:
         count = RequestRecord(name='timetable', count=0)
     count.count += 1
     count.save()
     # 课表查询请求
     if len(req) == 2:
         for key, value in req.items():
             if key == 'student_id':
                 try:
                     Student.objects.get(id=req['student_id'])
                 except Student.DoesNotExist:
                     raise UnAuthorizedError()
                 result = result.filter(student_id__id=value)
             elif key == 'week':
                 if value != 'all':
                     value += ','
                     result = result.filter(week__icontains=value)
             else:
                 raise ArgumentError()
         course_serializer = StudentCourseSerializer(result, many=True)
         return Response(course_serializer.data)
     # 当前周查询请求
     if len(req) == 1:
         if 'date' in req.keys():
             content = []
             date1 = datetime.strptime(req['date'], "%Y-%m-%d")
             date2 = datetime.strptime(start_day, "%Y-%m-%d")
             total_week = min(16, int((date1 - date2).days / 7 + 1))
             value = str(total_week)
             content.append({"week": value})
             return Response(content)
         raise ArgumentError()
     # 其他非法请求
     raise ArgumentError()
    def post(request):
        """
        pm调用在数据库中插入最新版本信息
        访问方法 http://127.0.0.1:8000/version/
        参数:版本号,更新日期,更新公告,下载地址
        返回结果:插入状态
        """

        req = request.data
        if (len(req) != 4) | (("version_number" not in req) | ("update_date" not in req) |
                              ("announcement" not in req) | ("download_address" not in req)):
            raise ArgumentError()

        if len(VERSION.objects.filter(version_number=req["version_number"])) > 0:
            raise ArgumentError()

        VERSION(version_number=req["version_number"], update_date=req["update_date"],
                announcement=req["announcement"],
                download_address=req["download_address"]).save()

        return Response({"state": "成功"})
示例#12
0
 def cancel_down_action(request):
     req = request.data
     if len(req) == 3:
         actor, evaluation = get_evaluation(req)
         try:
             down = EvaluationDownRecord.objects.get(evaluation=evaluation,
                                                     student=actor)
             down.delete()
             up_cnt = up_count(evaluation)
             down_cnt = down_count(evaluation)
             return Response({"up": up_cnt, "down": down_cnt}, status=201)
         except EvaluationDownRecord.DoesNotExist:
             raise NotFoundError(detail="不存在这条被踩记录")
     raise ArgumentError()
示例#13
0
 def get(request):
     req = request.query_params.dict()
     result = CourseEvaluation.objects.all()
     teachers = TeacherCourse.objects.all()
     info_dict = {}
     if len(req) == 2:
         try:
             bid = req['bid']
             student_id = req['student_id']
         except KeyError:
             raise ArgumentError()
         try:
             student = Student.objects.get(id=student_id)
         except Student.DoesNotExist:
             raise UnAuthorizedError()
         try:
             course = Course.objects.get(bid=bid)
         except Course.DoesNotExist:
             raise NotFoundError(detail="没有这门课程")
         result = result.filter(course__bid=bid)
         teachers = teachers.filter(course_id__bid=bid)
         teacher_info = TeacherEvaluationSerializer(teachers,
                                                    many=True).data
         teacher_info = format_serializer_teacher(teacher_info, student)
         info = CourseEvaluationSerializer(result, many=True).data
         info = format_serializer(info, student)
         avg_score = result.aggregate(Avg('score'))['score__avg']
         avg_score = 0.0 if avg_score is None else round(avg_score, 1)
         evaluation_num = evaluator_count(course)
         info_dict["course_name"] = course.name
         info_dict["evaluation_num"] = evaluation_num
         info_dict["avg_score"] = avg_score
         info_dict["teacher_info"] = teacher_info
         info_dict["info"] = info
         info_dict["score_info"] = get_score_info(course)
         return Response(info_dict)
     raise ArgumentError()
示例#14
0
 def get(request):
     req = request.query_params.dict()
     result = TeacherCourse.objects.all()
     if 1 <= len(req) <= 5:
         page = 1
         output = {}
         for key, value in req.items():
             if value == "":
                 continue
             if key == 'course':
                 name = req['course']
                 result = result.filter(course_id__name__icontains=name)
             elif key == 'teacher':
                 name = req['teacher']
                 result = result.filter(teacher_id__name__icontains=name)
             elif key == 'type':
                 types = req['type']
                 result = result.filter(course_id__type=types)
             elif key == 'department':
                 department = req['department']
                 result = result.filter(course_id__department=department)
             elif key == 'page':
                 page = int(req['page'])
             else:
                 raise ArgumentError()
         results = TeacherCourseSerializer(result, many=True).data
         result = format_search(results)
         total = len(result)
         start = 30 * (page - 1)
         end = min(page * 30, total)
         result = result[start:end]
         output['total'] = total
         output['cur_page'] = page
         output['total_page'] = max(1, math.ceil(total / 30))
         output['info'] = result
         return Response(output)
     raise ArgumentError()
示例#15
0
 def post(request):
     req = request.data
     if len(req) == 4:
         teacher_name = req['teacher']
         bid = req['bid']
         actor = req['actor']
         action = req['action']
         try:
             teacher = Teacher.objects.get(name=teacher_name)
         except Teacher.DoesNotExist:
             raise NotFoundError(detail="没有这个老师")
         try:
             course = Course.objects.get(bid=bid)
         except Course.DoesNotExist:
             raise NotFoundError(detail="没有这门课程")
         try:
             student = Student.objects.get(id=actor)
         except Student.DoesNotExist:
             raise UnAuthorizedError()
         try:
             teacher_course = TeacherCourse.objects.get(teacher_id=teacher,
                                                        course_id=course)
         except TeacherCourse.DoesNotExist:
             raise NotFoundError(detail="没有这个课程评价")
         if action == 'up':
             try:
                 # 已经点过赞
                 TeacherEvaluationRecord.objects.get(
                     teacher_course=teacher_course, student=student)
                 return Response({"up": teacher_course.up}, status=202)
             except TeacherEvaluationRecord.DoesNotExist:
                 # 没点过赞
                 up_record = TeacherEvaluationRecord(
                     teacher_course=teacher_course, student=student)
                 up_record.save()
                 teacher_course.up = up_count_teacher(teacher_course)
                 teacher_course.save()
             return Response({"up": teacher_course.up}, status=201)
         if action == 'cancel_up':
             try:
                 up_record = TeacherEvaluationRecord.objects.get(
                     teacher_course=teacher_course, student=student)
                 up_record.delete()
                 teacher_course.up = up_count_teacher(teacher_course)
                 teacher_course.save()
             except TeacherEvaluationRecord.DoesNotExist:
                 raise NotFoundError(detail="不存在这个点赞记录")
             return Response({"up": teacher_course.up}, status=201)
     raise ArgumentError()
 def post(request):
     req = request.data
     # 确保数据库中有此学生的记录
     try:
         student = Student.objects.get(id=req['student_id'])
     except Student.DoesNotExist:
         raise UnAuthorizedError()
     # 爬虫的数据库插入请求
     if len(req) == 3:
         semester = req['semester']
         for key in req['info']:
             insert_score(student=student, semester=semester, key=key)
         return HttpResponse(status=201)
     # 其他非法请求
     raise ArgumentError()
示例#17
0
 def delete(request):
     req = request.data
     if len(req) == 2:
         try:
             bid = req['bid']
             student_id = req['student_id']
         except KeyError:
             raise ArgumentError()
         try:
             student = Student.objects.get(id=student_id)
         except Student.DoesNotExist:
             raise UnAuthorizedError()
         try:
             course = Course.objects.get(bid=bid)
         except Course.DoesNotExist:
             raise NotFoundError(detail="没有这门课程")
         try:
             evaluation = CourseEvaluation.objects.get(student=student,
                                                       course=course)
             evaluation.delete()
             return HttpResponse(status=204)
         except CourseEvaluation.DoesNotExist:
             raise NotFoundError(detail="没有这条评价")
     raise ArgumentError()
示例#18
0
def add_student_course(student, semester, info):
    if len(info) == 6:
        bid = info[0].replace(' ', '')
        name = info[1].replace(' ', '')
        name, bid = check_public(name, bid)
        place = info[2].replace(' ', '')
        teacher = info[3].replace(' ', '')
        week = info[4].replace(' ', '')
        time = info[5]
        # 获取课程信息
        try:
            course = Course.objects.get(bid=bid)
            if len(name) <= len(course.name):
                course.name = name
                course.save()
        except Course.DoesNotExist:
            if name.find('体育') != -1:
                course = Course(bid=bid,
                                name=name,
                                credit=0.5,
                                hours=16,
                                department='体育部',
                                type='体育类')
            else:
                course = Course(bid=bid, name=name)
            course.save()
        # 保存信息
        new_student_course = StudentCourse(student_id=student,
                                           course_id=course,
                                           week=split_week(week),
                                           time=split_time(time),
                                           place=place,
                                           semester=semester)
        new_student_course.save()
        # 增加教师信息
        teachers = teacher.split(',')
        # 一门课程可能有多个教师
        for key in teachers:
            teacher = add_teacher(key)
            # 增加总课的关联关系
            add_teacher_relation(teacher, course)
            # 增加这节课的关联关系
            relation = TeacherCourseSpecific(
                student_course_id=new_student_course, teacher_id=teacher)
            relation.save()
        return HttpResponse(status=201)
    # 不是5项表示数据有缺失
    raise ArgumentError()
示例#19
0
 def add_course(request):
     req = request.data
     if 'info' in req.keys():
         for info in req['info']:
             if info[0].find('体育') != -1:
                 continue
             course = add_course(info)
             teacher_list = info[6]
             teachers = teacher_list.split(',')
             for teacher_name in teachers:
                 teacher_name = teacher_name.replace(' ', '')
                 if teacher_name == "":
                     continue
                 teacher = add_teacher(teacher_name)
                 add_teacher_relation(teacher, course)
         return HttpResponse(status=201)
     raise ArgumentError()
示例#20
0
    def get(request):
        """
        输入:学号,输出:作业,dll,提交状态,课程
        参数1:学生学号 e.g. 17373349
        例:http://127.0.0.1:8000/ddl/?student_id=17373349
        返回作业,dll,提交状态,课程
        没有提供参数,参数数量错误,返回500错误;
        参数错误,返回400错误;
        查询用户不存在返回401
        """
        try:  # 保存前端请求数据
            record = RequestRecord.objects.get(name="ddl")
            record.count = record.count + 1
            record.save()
        except RequestRecord.DoesNotExist:
            RequestRecord(name="ddl", count=1).save()

        req = request.query_params.dict()

        if (len(req) != 1) or ("student_id" not in req):
            raise ArgumentError()

        student_id = req["student_id"]
        content = []

        try:
            Student.objects.get(id=req['student_id'])
            req = DDL.objects.filter(student_id=student_id)
        except Student.DoesNotExist:
            raise UnAuthorizedError()

        course_re = req.values("course").distinct()

        for i in course_re:
            cr_re_1 = req.filter(
                Q(course=i["course"])
                & (Q(state="尚未提交") | Q(state="草稿 - 进行中"))).values(
                    "homework", "ddl", "state").distinct()
            cr_re_2 = req.filter(
                Q(course=i["course"])
                & (~Q(state="尚未提交") & ~Q(state="草稿 - 进行中"))).values(
                    "homework", "ddl", "state").distinct()
            cr_re = chain(cr_re_1, cr_re_2)
            content.append({"name": i["course"], "content": cr_re})
        return Response(content)
 def get(request):
     req = request.query_params.dict()
     student_id = req['student_id']
     score_sum = 0.0
     credit_sum = 0.0
     try:
         Student.objects.get(id=student_id)
     except Student.DoesNotExist:
         raise UnAuthorizedError()
     if len(req) == 1 and 'student_id' in req.keys():
         scores = Score.objects.filter(student_id=student_id)
         for score in scores:
             score_sum += score.score * score.credit
             credit_sum += score.credit
         if credit_sum == 0:
             return Response({'score': 0.00000})
         return Response({'score': score_sum / credit_sum})
     raise ArgumentError()
    def get(request):
        """
        前端调用得到最新版本信息
        访问方法 http://127.0.0.1:8000/version/
        无参数
        返回结果:版本号,更新日期,更新公告,下载地址
        """
        req = request.query_params.dict()

        if len(req) != 0:
            raise ArgumentError()

        data = VERSION.objects.all()
        length = data.count()
        if length > 0:
            return Response(
                data.values("version_number", "update_date", "announcement", "download_address")[length - 1])
        return Response({"version_number": "", "update_date": "", "announcement": "", "download_address": ""})
 def post(request):
     # 爬虫执行完成时返回完成的request id
     req = request.data
     if len(req) == 1 and 'req_id' in req.keys():
         cur_id = int(req['req_id'])
         try:
             PENDING_WORK.remove(cur_id)
         except ValueError:
             raise NotFoundError(detail='没有这个任务号')
         return HttpResponse(status=200)
     if len(req) == 4:
         REQ_QUEUE.append(req)
         log = open('log.txt', 'a')
         log.write('new request: ')
         log.write(str(req))
         log.write('\n')
         PENDING_WORK.append(req['req_id'])
         return HttpResponse(status=201)
     raise ArgumentError()
    def get(request):
        req = request.query_params.dict()
        # 爬虫在这里取得request
        if not req:
            if not REQ_QUEUE:
                return HttpResponse(status=204)
            cur_queue = REQ_QUEUE.pop(0)
            log = open('log.txt', 'a')
            log.write('request has been sent: ')
            log.write(str(cur_queue))
            log.write('\n')
            return Response(cur_queue)

        # 前端在这里取得对应任务是否完成的信息, true为已完成
        if len(req) == 1 and 'id' in req:
            return Response([{'status': int(req['id']) not in PENDING_WORK}])

        # 其他非法请求
        raise ArgumentError()
 def get(request):
     req = request.query_params.dict()
     student_id = req['student_id']
     gpa_sum = 0.0
     credit_sum = 0.0
     try:
         Student.objects.get(id=student_id)
     except Student.DoesNotExist:
         raise UnAuthorizedError()
     if len(req) == 1 and 'student_id' in req.keys():
         scores = Score.objects.filter(student_id=student_id)
         for score in scores:
             if score.origin_score != '通过' and score.origin_score != '不通过':
                 gpa_sum += get_gpa(score.origin_score, score.credit)
                 credit_sum += score.credit
         if credit_sum == 0:
             return Response({'gpa': 0.0000})
         return Response({'gpa': gpa_sum / credit_sum})
     raise ArgumentError()
示例#26
0
    def post(request):
        """
        前端调用插入用户反馈信息
        http://127.0.0.1:8000/feedback/
        参数:学生id,反馈类别,具体内容
        :param request:
        :return:
        """
        req = request.data
        if (len(req) != 3) | (("student_id" not in req) |
                              ("kind" not in req) | ("content" not in req)):
            raise ArgumentError()

        try:
            student = Student.objects.get(id=req['student_id'])
        except Student.DoesNotExist:
            raise UnAuthorizedError()

        Feedback(student_id=student, kind=req["kind"], content=req["content"]).save()

        return Response({"state": "成功"})
def insert_score(student, semester, key):
    if len(key) == 6:
        bid = key[0].replace(' ', '')
        course_name = key[1]
        credit = key[2].replace(' ', '')
        label = key[3].replace(' ', '')
        origin_score = key[4].replace(' ', '')
        score = key[5].replace(' ', '')
        if origin_score == '缓考':
            return
        try:
            old_score = Score.objects.get(student_id=student, bid=bid)
            if label == '补考':
                insert_failed_course(old_score=old_score,
                                     semester=semester,
                                     label=label,
                                     origin_score=origin_score,
                                     score=score)
            elif label == '重修':
                old_score.label = label
                old_score.origin_score = origin_score
                old_score.score = score
                old_score.semester = semester
                old_score.save()
            else:
                old_score.origin_score = origin_score
                old_score.score = score
                old_score.save()
        except Score.DoesNotExist:
            new_score = Score(student_id=student,
                              semester=semester,
                              course_name=course_name,
                              bid=bid,
                              credit=credit,
                              label=label,
                              origin_score=origin_score,
                              score=score)
            new_score.save()
        return
    raise ArgumentError()
    def post(request):
        """
        根据学号删除某个学生的信息,且在消息队列中删除该学生的请求
        访问方法 POST http://127.0.0.1:8000/spider/delete/
        参数usr_name, password, error_type
        如果数据库中无该学生,返回0
        如果数据库中密码不相同,返回-1
        如果成功删除返回1
        """
        req = request.data

        if (len(req) != 3) | ("usr_name" not in req) | (
                "password" not in req) | ("error_type" not in req):
            raise ArgumentError()
        max_error = 2  #账号密码错误允许次数
        number = 1
        if req["error_type"] == 1:  #账号被锁
            number = max_error

        state = 0
        try:
            student = Student.objects.get(usr_name=req["usr_name"])
            if student.usr_password != req["password"]:
                state = -1
            else:
                try:
                    ste = StudentError.objects.get(student_id=student.id)
                except StudentError.DoesNotExist:
                    ste = StudentError(student_id=student)
                    ste.save()
                ste.number = ste.number + number
                ste.save()
                if ste.number >= max_error:
                    student.delete()
                    delete_request(student.usr_name, student.usr_password)
                state = 1
        except Student.DoesNotExist:
            raise UnAuthorizedError
        content = {"state": state}
        return Response(content)
示例#29
0
def get_evaluation(req):
    try:
        student_id = req['student_id']
        actor = req['actor']
        bid = req['bid']
    except KeyError:
        raise ArgumentError()
    try:
        student = Student.objects.get(id=student_id)
        actor = Student.objects.get(id=actor)
    except Student.DoesNotExist:
        raise UnAuthorizedError()
    try:
        course = Course.objects.get(bid=bid)
    except Course.DoesNotExist:
        raise NotFoundError(detail="没有这门课程")
    try:
        evaluation = CourseEvaluation.objects.get(student=student,
                                                  course=course)
    except CourseEvaluation.DoesNotExist:
        raise NotFoundError(detail="没有这条评价")
    return actor, evaluation
示例#30
0
 def post(request):
     """
     根据post的json文件来将相关数据插入数据库;
     格式:{student_id:(id), semester:(sm), info:[[课程名称1,地点1...],[课程名称2,地点2...]}
     """
     req = request.data
     # 确保数据库中有这个同学的信息
     student_id = req['student_id']
     try:
         student = Student.objects.get(id=student_id)
     except Student.DoesNotExist:
         raise UnAuthorizedError()
     # 爬虫的数据库插入请求
     if len(req) == 2:
         semester = '2020_Spring'
         # 更新则默认将原记录删除
         StudentCourse.objects.filter(student_id=student_id).delete()
         # 将爬虫爬取的数据写入数据库
         for lists in req['info']:
             for info in lists:
                 add_student_course(student, semester, info)
         return HttpResponse(status=201)
     # 其他非法请求
     raise ArgumentError()