Пример #1
0
def get_talking():
    try:
        data = request.get_json()
        class_id = int(data.get("class_id"))
        c = Class.query.get(class_id)
        talkings = Talkings.query.with_parent(c).order_by(
            Talkings.publish_time.desc()).all()
        response_info = []
        for t in talkings:
            cs = Comments.query.with_parent(t).filter_by(
                is_reply=False).count()
            response_info.append({
                "id":
                t.id,
                "title":
                t.title,
                "content":
                t.content,
                "userName":
                t.publish_user.username,
                "date":
                datetime.datetime.strftime(t.publish_time,
                                           "%Y-%m-%d %H:%M:%S"),
                "replyNum":
                cs
            })
        return responseBody(data=response_info)
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
Пример #2
0
def submit_work():
    try:
        data = request.get_json()
        title = data.get("title")
        sc_id = data.get("sc_id")
        # 获取选择题答案
        answer = data.get("answer")
        sc_id = int(sc_id.split("-")[1])
        # 要上传的作业图片base64编码
        work_img_base64 = data.get("work_img")
        work_id = max([a.id for a in Assignment.query.all()]) + 1
        work_path = '/py3env/West2/West2OlineWork/static/works/%s.jpg' % str(
            work_id)
        with open(work_path, 'wb') as w:
            w.write(base64.b64decode(work_img_base64))
        # 获得修改后的头像的base64编码
        with open(work_path, 'rb') as f:
            stream = base64.b64encode(f.read())
            work_base64_str = str(stream, encoding='utf-8')
        assignment = Assignment(title=title,
                                content=work_path,
                                belong_category_id=sc_id,
                                answer=answer)
        db.session.add(assignment)
        db.session.commit()
        return responseBody(data=[{"work_img": work_base64_str}])
    except Exception as e:
        print(e)
        db.session.rollback()
        return responseError(Responses.PARAMETERS_ERROR)
Пример #3
0
def get_comments():
    try:
        data = request.get_json()
        talkings_id = int(data.get("talking_id"))
        comments = Comments.query.filter_by(
            belong_talking_id=talkings_id,
            is_reply=False).order_by(Comments.send_time.desc()).all()
        Message = []
        for index, c in enumerate(comments):
            Message.append({
                "index":
                index,
                "comment_id":
                c.id,
                "content":
                c.content,
                "userName":
                User.query.filter_by(id=c.from_user_id).first().username,
                "reply_num":
                len(c.replies),
                "date":
                datetime.datetime.strftime(c.send_time, '%Y-%m-%d %H:%M:%S')
            })
        return responseBody(data=Message)
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
Пример #4
0
def get_replies():
    try:
        data = request.get_json()
        # comment_id为要查看的某条评论/回复 的id
        comment_id = int(data.get("comment_id"))
        Mes = Comments.query.filter_by(id=comment_id).first()
        # 获取这条评论/回复的所有回复,每个回复是一个Comment对象
        replies = Mes.replies
        Message = []
        for index, c in enumerate(replies):
            Message.append({
                # index为评论编号,从0开始
                "index":
                index,
                "comment_id":
                c.id,
                "user_id":
                c.from_user_id,
                "content":
                c.content,
                "userName":
                User.query.filter_by(id=c.from_user_id).first().username,
                "date":
                datetime.datetime.strftime(c.send_time, '%Y-%m-%d %H:%M:%S')
            })
        return responseBody(data=Message)
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
Пример #5
0
def update_face():
    try:
        user_data = request.get_json()
        user_id = int(user_data.get("user_id"))
        user_face = user_data.get("user_face")
        file_type = user_data.get("type")
        user = User.query.filter_by(id=user_id).first()
        user_avatar = "default.jpg"
        if user.avatar != "default":
            user_avatar = "%s.%s" % (user.username, file_type)
        avatar_filename = random_filename(user_avatar)
        user.avatar = avatar_filename
        db.session.commit()
        avatar_path = '/py3env/West2/West2OlineWork/static/avatars/%s' % avatar_filename
        Users = []
        # 写入图片并保存
        with open(avatar_path, 'wb') as w:
            w.write(base64.b64decode(user_face[23:]))
        # 获得修改后的头像的base64编码
        with open(avatar_path, 'rb') as f:
            stream = base64.b64encode(f.read())
            avatar_base64_str = str(stream, encoding='utf-8')
        Users.append({
            "user_name": user.username,
            "avatar": avatar_base64_str,
            "type": file_type,
            "total_study": user.total_study
        })
        return responseBody(data=Users)
    except Exception as e:
        print(e)
        db.session.commit()
        return responseError(Responses.PARAMETERS_ERROR)
Пример #6
0
def get_assignment_submit():
    try:
        # 可以一次性获得所有,也可以只获取一个
        data = request.get_json()
        assignment_id = int(data.get("assignment_id"))
        # index表示要获取第几个提交内容,若不传则获取所有
        require_index = data.get("index")
        assign = Assignment.query.get(assignment_id)
        # 先获取到所有提交内容
        fss = assign.finish_status
        response_info = []
        temp = {"total_num": len(fss)}
        if require_index is None:
            # 提交总数
            details = []
            for fs in fss:
                details.append({
                    "id": fs.id,
                    "from_user": fs.finish_user.username,
                    "content": fs.finish_content
                })
                temp["details"] = details
        else:
            # 获取单个,index从0开始
            single_fs = fss[int(require_index)]
            temp["detail"] = {
                "id": single_fs.id,
                "from_user": single_fs.finish_user.username,
                "content": single_fs.finish_content
            }
        response_info.append(temp)
        return responseBody(data=response_info)
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
Пример #7
0
def get_unread():
    data = request.get_json()
    try:
        user_id = int(data.get("user_id"))
        user = User.query.get(user_id)
        # 未读课程和未读作业个数
        unread_classes = []
        unread_assignment_count = 0
        # 用户的所有班级
        classes = user.user_classes
        for c in classes:
            classes_read = CourseRead.query.filter_by(class_id=c.id).first()
            if classes_read is not None:
                cIds_str = classes_read.readed_std_ids
                # id不再里面表示该课程未读
                if str(user.id) not in cIds_str.split("|"):
                    unread_classes.append({"name": c.class_name})
                #  该课程的作业
                assignments = c.assignments
                for a in assignments:
                    assignment_read = AssignmentRead.query.filter_by(
                        assignment_id=a.id).first()
                    aIds_str = assignment_read.readed_std_ids
                    if str(a.id) not in aIds_str.split("|"):
                        unread_assignment_count += 1
        response_info = {
            "readingClassNum": len(unread_classes),
            "classNameList": unread_classes,
            "messageNum": unread_assignment_count
        }
        return responseBody(data=response_info)
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
Пример #8
0
def get_statistical_data():
    try:
        data = request.get_json()
        assignment_id = int(data.get("assignment_id"))
        assign = Assignment.query.get(assignment_id)
        # 获取该作业的所有完成情况
        fss = assign.finish_status
        score_list = []
        max_score = 0
        min_score = 0
        avg_score = 0.0
        if len(score_list) != 0:
            for fs in fss:
                score_list.append(fs.score)
                max_score = max(score_list)
                min_score = min(score_list)
                avg_score = sum(score_list) / len(score_list)
        return responseBody(data=[{
            "avg_score": round(avg_score, 2),
            "min_score": min_score,
            "max_score": max_score
        }])
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
Пример #9
0
def get_work():
    try:
        data = request.get_json()
        assignment_id = int(data.get("assignment_id"))
        assign = Assignment.query.get(assignment_id)
        if assign is None:
            return responseError(Responses.NO_RECORD_FOUND)
        work_img_path = "47.96.231.121/works/" + assign.content
        with open(work_img_path, 'rb') as f:
            stream = base64.b64encode(f.read())
            work_base64_str = str(stream, encoding='utf-8')
        return responseBody(data=work_base64_str)
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
Пример #10
0
def get_classes():
    try:
        data = request.get_json()
        user_id = int(data.get("user_id"))
        classes = User.query.get(user_id).user_classes
        Classes = []
        for i in classes:
            Classes.append({
                "teacher": find_teacher(i.id).username,
                "subName": str(i.class_name),
                "class_id": i.id
            })
        return responseBody(data=Classes)
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
Пример #11
0
def get_messages():
    try:
        user_data = request.get_json()
        user_id = int(user_data.get("user_id"))
        user = User.query.filter_by(id=user_id).first()

        Messages = []
        # 用户班级信息
        Classes = []
        # 用户个人信息
        Users = []
        classes = user.user_classes
        for i in classes:
            Classes.append({
                "teacher": find_teacher(i.id).username,
                "subName": str(i.class_name),
                "class_id": int(i.id)
            })
        user_avatar = "default.jpg"
        if user.avatar != "default":
            user_avatar = user.avatar
            Type = user_avatar.strip('.')[1]
        else:
            Type = 'jpg'
        avatar_path = '/py3env/West2/West2OlineWork/static/avatars/%s' % user_avatar
        with open(avatar_path, 'rb') as f:
            stream = base64.b64encode(f.read())
            avatar_base64_str = str(stream, encoding='utf-8')
        print(Type)
        Users.append({
            "user_name":
            user.username,
            "avatar":
            avatar_base64_str,
            "login_date":
            session.get("login_date",
                        datetime.datetime.now()).strftime("%Y-%m-%d %H:%M:%S"),
            "class_count":
            len(classes),
            "type":
            Type
        })
        Messages.append({"user_info": Users, "classes_info": Classes})
        return responseBody(data=Messages)
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
Пример #12
0
def get_notices():
    try:
        data = request.get_json()
        class_id = int(data.get("class_id"))
        c = Class.query.get(class_id)
        notices = Notices.query.with_parent(c).order_by(
            Notices.create_time.desc()).all()
        response_info = []
        for n in notices:
            response_info.append({
                "notice_id": n.id,
                "title": n.title,
                "contant": n.content
            })
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
    return responseBody(data=response_info)
Пример #13
0
def login():
    data = request.get_json()
    account = data.get("account")
    password = data.get("password")
    # 用户身份,若是教师,则is_teacher为True
    is_teacher = data.get("is_teacher")
    user = User.query.filter_by(account=account).first()
    # 用户不存在
    if not user or user.is_teacher != is_teacher:
        return responseError(Responses.NO_USER_FOUND)
    # 密码错误
    if not user.check_password(password):
        return responseError(Responses.INCORRECT_PASSWORD)
    # 生成token
    token = generate_token(user_id=user.id)
    session["token"] = token
    session["user_id"] = user.id
    # 获取用户头像路径
    user_avatar = "default.jpg"
    if user.avatar != "default":
        user_avatar = user.avatar
    avatar_path = '/py3env/West2/West2OlineWork/static/avatars/%s' % user_avatar
    # 用户账号,姓名,当前时间
    account = user.account
    username = user.username
    date = datetime.datetime.now()
    # 保存登录时间
    session["login_date"] = date
    # 获得头像base64编码
    with open(avatar_path, 'rb') as f:
        stream = base64.b64encode(f.read())
        avatar_base64_str = bytes.decode(stream)
        #print(avatar_base64_str)
        # 返回数据
        response_info = {
            "avadar": avatar_base64_str,
            "name": username,
            "userid": account,
            "user_id": user.id,
            "date": date.strftime("%Y-%m-%d %H:%M:%S"),
            "classNum": len(user.user_classes),
            "token": token
        }
        return responseBody(data=response_info)
Пример #14
0
def search_course():
    try:
        data = request.get_json()
        query = data.get("query")
        user_id = int(data.get("user_id"))
        user = User.query.get(user_id)
        result = Class.query.with_parent(user).whooshee_search(query).order_by(
            Class.id).all()
        class_info = []
        for i in result:
            class_info.append({
                "teacher": find_teacher(i.id).username,
                "subName": str(i.class_name),
                "class_id": i.id
            })
        return responseBody(data=class_info)
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
Пример #15
0
def class_num_management():
    try:
        data = request.get_json()
        class_id = int(data.get("class_id"))
        user_id = int(data.get("user_id"))
        # 判断要操作的用户是不是老师
        if not User.query.filter_by(id=user_id).first().is_teacher:
            return responseError(Responses.AUTHORIZATION_ERROR)
        teacher_class = Class.query.get(class_id)
        stds = User.query.with_parent(teacher_class).filter_by(
            is_teacher=False).all()
        Message = []
        for s in stds:
            Message.append({
                'user_id': s.id,
                'account': s.account,
                'username': s.username
            })
        return responseBody(data=Message)
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
Пример #16
0
def get_submit():
    try:
        data = request.get_json()
        # 提交用户
        user_id = int(data.get("user_id"))
        # 作业id
        assignment_id = int(data.get("assignment_id"))
        fs = FinishStatus.query.filter_by(assignment_id=assignment_id,
                                          finish_user_id=user_id).first()
        if fs is None:
            return responseError(Responses.NO_RECORD_FOUND)
        response_info = [{
            "content":
            fs.finish_content,
            # 上次修改时间
            "update_time":
            datetime.datetime.strftime(fs.finish_time, "%Y-%m-%d %H:%M:%S")
        }]
        return responseBody(data=response_info)
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
Пример #17
0
def class_management():
    try:
        data = request.get_json()
        user_id = int(data.get("user_id"))
        user = User.query.filter_by(id=user_id).first()
        if not user.is_teacher:
            return responseError(Responses.AUTHORIZATION_ERROR)

        classes = User.query.get(user_id).user_classes
        Message = [{
            'avatar': user.avatar,
        }]
        classes_message = []
        for c in classes:
            classes_message.append({
                'subName': c.class_name,
                'class_id': c.id,
                'num': len(c.stds)
            })
        Message[0]["classes_message"] = classes_message
        return responseBody(data=Message)
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
Пример #18
0
def get_course_list():
    try:
        data = request.get_json()
        # 用户id
        user_id = int(data.get("user_id"))
        # 班级id
        class_id = int(data.get("class_id"))
        if class_id is None or user_id is None:
            return responseError(Responses.SEARCH_CATS_ERROR)
        # 获得班级记录
        user_class = Class.query.get(class_id)
        if user_class is None:
            return responseError(Responses.NO_CLASS_FOUND)
        # 班级对应的第一个一级目录
        first_cat = FirstCategory.query.with_parent(user_class).filter_by(
            is_first_category=True).first()
        if first_cat is None:
            return responseBody(data=[])
        response_data = []
        # 遍历目录的下一个目录,直到最后一个之前
        while first_cat.next_category_id != 0:
            details = []
            temp_dict = {
                "id": "1-" + str(first_cat.id),
                "name": first_cat.name,
                "num": len(first_cat.sub_categories)
            }
            # 每个一级目录对应的二级目录,通过添加时间排序
            for sc in SecondCategory.query.with_parent(first_cat).order_by(
                    SecondCategory.add_time).all():
                details.append({
                    "details_id":
                    "2-" + str(sc.id),
                    "details_name":
                    sc.name,
                    # 二级目录对应的视频路径
                    "details_movie":
                    "47.96.231.121/movies/" + sc.movie
                })
            temp_dict["details"] = details
            response_data.append(temp_dict)
            # 下一个一级目录
            first_cat = FirstCategory.query.get(first_cat.next_category_id)
        # 加入最后一个目录
        details = []
        temp_dict = {
            "id": "1-" + str(first_cat.id),
            "name": first_cat.name,
            "num": len(first_cat.sub_categories)
        }
        # 最后一个一级目录对应的二级目录
        for sc in SecondCategory.query.with_parent(first_cat).order_by(
                SecondCategory.add_time).all():
            details.append({
                "details_id": "2-" + str(sc.id),
                "details_name": sc.name,
                "details_movie": "47.96.231.121/movies/" + sc.movie
            })
        temp_dict["details"] = details
        response_data.append(temp_dict)

        return responseBody(data=response_data)
    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)
Пример #19
0
def get_work_list():
    try:
        data = request.get_json()
        class_id = int(data.get("class_id"))
        user_id = int(data.get("user_id"))
        user_class = Class.query.get(class_id)
        # 获取该班级下的所有大章节链表表头
        first_cat = FirstCategory.query.with_parent(user_class).filter_by(
            is_first_category=True).first()
        response_info = []
        # 循环到最后一个章节之前
        while first_cat.next_category_id != 0:
            details = []
            temp_dict = {
                "id": "1-" + str(first_cat.id),
                "name": first_cat.name,
                "num": len(first_cat.sub_categories)
            }
            # 每个一级目录对应的二级目录,通过添加时间排序
            for sc in SecondCategory.query.with_parent(first_cat).order_by(
                    SecondCategory.add_time).all():
                is_done = True
                assignment = sc.assignment
                if len(assignment) != 0:
                    # 查看用户是否完成该作业
                    assignment = assignment[0]
                    record = FinishStatus.query.filter_by(
                        assignment_id=assignment.id,
                        finish_user_id=user_id).first()
                    if record is None:
                        is_done = False
                    details.append({
                        "sc_id": "2-" + str(sc.id),
                        "details_isdone": is_done,
                        # 作业的id
                        "details_id": assignment.id,
                        "details_name": assignment.title,
                    })
                temp_dict["details"] = details
            response_info.append(temp_dict)
            # 下一个一级目录
            first_cat = FirstCategory.query.get(first_cat.next_category_id)
        # 加入最后一个章节
        details = []
        temp_dict = {
            "id": "1-" + str(first_cat.id),
            "name": first_cat.name,
            "num": len(first_cat.sub_categories)
        }
        # 最后一个一级目录对应的二级目录,通过添加时间排序
        for sc in SecondCategory.query.with_parent(first_cat).order_by(
                SecondCategory.add_time).all():
            is_done = True
            assignment = sc.assignment
            if len(assignment) != 0:
                # 查看用户是否完成该作业
                assignment = assignment[0]
                record = FinishStatus.query.filter_by(
                    assignment_id=assignment.id,
                    finish_user_id=user_id).first()
                if record is None:
                    is_done = False
                details.append({
                    "sc_id": "2-" + str(sc.id),
                    "details_isdone": is_done,
                    # 作业的id
                    "details_id": assignment.id,
                    "details_name": assignment.title,
                })
            temp_dict["details"] = details
        response_info.append(temp_dict)
        return responseBody(data=response_info)

    except Exception as e:
        print(e)
        return responseError(Responses.PARAMETERS_ERROR)