예제 #1
0
파일: main.py 프로젝트: Ginstein/DKT
def publish_homework(request, post_data):
    """
    老师发布作业
    :param request:
    :param post_data:
    """
    account = post_data.get('account')
    course_id = post_data.get('course_id')
    tasks = post_data.get('task')
    role = get_user_role(account)
    if role != UserRole.TEACHER.value:
        raise ValidationError('only teacher can publish homework')
    course = COURSE.objects.filter(course_id=course_id).first()
    if not course:
        raise ValidationError('course id does not exist')
    homework = json.loads(course.homework)
    if not homework.get('task'):
        # 初始化作业表
        homework['task'] = []
        homework['status'] = CourseStatus.NOT_START.value
        homework['start_time'] = post_data.get('start_time', int(time.time()))
        homework['finish_time'] = post_data.get('finish_time', int(time.time()))
    homework['task'] += tasks
    course.homework = json.dumps(homework)
    course.save()
    return ObjectStatus.SUCCESS.value
예제 #2
0
파일: live.py 프로젝트: Ginstein/DKT
def get_course_room(request, post_data):
    """
    获取房间链接
    :param request:
    :param post_data:
    """
    account = post_data.get('account')
    course_id = post_data.get('course_id')
    role = get_user_role(account)
    room_url = get_room_url(course_id, role)
    if role == UserRole.STUDENT.value:
        room_url.replace(RoomRole.HOST.value, RoomRole.GUEST.value)
    index = room_url[:-1].rfind('/') + 1
    return room_url[:index] + account + '/'
예제 #3
0
파일: main.py 프로젝트: Ginstein/DKT
def publish_course(request, post_data):
    """
    学生发布课程任务
    :param request:
    :param post_data:
    """
    account = post_data.get('account')
    role = get_user_role(account)
    data = post_data.get('course_info', {})
    data['course_id'] = random_str(8)
    data['status'] = CourseStatus.NOT_START.value
    data["info"] = json.dumps(data.get('info', {}))
    data['s_account'] = account if role == UserRole.STUDENT.value else ObjectStatus.UNDEFINED.value
    data['t_account'] = account if role == UserRole.TEACHER.value else ObjectStatus.UNDEFINED.value
    return ObjectStatus.SUCCESS.value if COURSE.objects.create(**data) else ObjectStatus.FAILED.value
예제 #4
0
파일: main.py 프로젝트: Ginstein/DKT
def check_course(request, post_data):
    """
    认领课程
    :param request:
    :param post_data:
    """
    account = post_data.get('account')
    course_id = post_data.get("course_id")
    role = get_user_role(account)
    query = Q(course_id=course_id)
    if role == UserRole.STUDENT.value:
        status = COURSE.objects.select_for_update().filter(
            query and Q(s_account=ObjectStatus.UNDEFINED.value)).update(s_account=account)
    else:
        status = COURSE.objects.select_for_update().filter(
            query and Q(t_account=ObjectStatus.UNDEFINED.value)).update(t_account=account)
    return ObjectStatus.SUCCESS.value if status else ObjectStatus.FAILED.value
예제 #5
0
파일: main.py 프로젝트: Ginstein/DKT
def correct_homework(request, post_data):
    """
    老师批改作业
    :param request:
    :param post_data:
    """
    account = post_data.get('account')
    course_id = post_data.get('course_id')
    score = post_data.get('score')
    role = get_user_role(account)
    if role != UserRole.TEACHER.value:
        raise ValidationError('only teacher can correct homework')
    course = COURSE.objects.filter(course_id=course_id).first()
    if not course:
        raise ValidationError('course id does not exist')
    homework = json.loads(course.homework)
    if homework['finish_time'] >= int(time.time()):
        raise ValidationError('the homework is not over yet')
    homework['score'] = score
    course.homework = json.dumps(homework)
    course.save()
    return ObjectStatus.SUCCESS.value
예제 #6
0
파일: main.py 프로젝트: Ginstein/DKT
def search_pending(request, post_data):
    """
    查找和自己有关的请求
    :param request:
    :param post_data:
    :return:
    """
    re = []
    account = post_data.get("account")
    obj = PENDING.objects.filter(Q(another_id=account) | Q(applicant_id=account))
    obj1 = obj.filter(another_id=account, another_op='').order_by("-_t")
    re.append("need my opinion")
    for ob in obj1:
        dic = {"course_id": ob.course_id, "info": ob.info, "applicant": ob.applicant_id}
        re.append(dic)
    re.append("my pending")
    obj2 = obj.filter(applicant_id=account).order_by("-_t")
    for ob in obj2:
        if get_user_role(ob.another_id) == UserRole.STUDENT.value:
            dic = {"course_id": ob.course_id, "student_op": ob.another_op, "admin_op": ob.admin_op}
        else:
            dic = {"course_id": ob.course_id, "teacher_op": ob.another_op, "admin_op": ob.admin_op}
        re.append(dic)
    return re
예제 #7
0
파일: main.py 프로젝트: Ginstein/DKT
def get_homework(request, post_data):
    """
    老师或学生获取作业
    :param request:
    :param post_data:
    """
    account = post_data.get('account')
    course_id = post_data.get('course_id')
    role = get_user_role(account)
    course = COURSE.objects.filter(course_id=course_id).first()
    if not course:
        raise ValidationError('course id does not exist')
    homework = json.loads(course.homework)
    if role == UserRole.STUDENT.value and homework['start_time'] > int(time.time()):
        raise ValidationError('the homework has not started')
    if homework['status'] == CourseStatus.NOT_START.value:
        homework['status'] = CourseStatus.ONGOING.value
    if homework['finish_time'] <= int(time.time()):
        homework['status'] = CourseStatus.FINISH.value
    homework = json.dumps(homework)
    if course.homework != homework:
        course.homework = homework
        course.save()
    return homework