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