def creatCourse(request): try: body = eval(request.body) user = tokenActive(request.COOKIES) if not isinstance(user, User): return pack(code=user) # 如果是学生,那么不让创建 if user.type == 0: return pack(msg='学生无法创建课程') # 获取当前时间戳 now = int(1000 * time.time()) course = Course(courseid=random_str(), creattime=now, creator=user.userid, title=body['title'], tag=body['tag']) course.save() model = { 'courseid': course.courseid, 'creator': course.creator, 'title': course.title } return pack(data=model) except Exception as e: return pack(msg=e)
def login(request): try: # 获取求情信息 body = {} if request.body != '': body = eval(request.body) # 验证token user = tokenActive(request.COOKIES) if not isinstance(user, User) and 'username' in body: # 用户名密码验证 user = list(User.objects.all().filter(username=body['username'])) if len(user) == 0 or user[0].password != body['password']: raise Exception('用户名或密码错误') user = user[0] user.token = random_str() user.save() elif not isinstance(user, User): return pack(code=user) # 返回model model = { 'userid': user.userid, 'token': user.token, 'username': user.username, 'type': user.type } return pack(data=model) except Exception as e: return pack(msg=str(e))
def creatHomework(request): try: body = eval(request.body) user = tokenActive(request.COOKIES) if not isinstance(user, User): pack(code=user) id = random_str() now = int(1000 * time.time()) user = Homework(homeworkid=id, title=body['title'], creator=user.userid, type=body['type'], creattime=now, father=body['father']) if body['type'] != '2': user.answer = body['answer'] if body['type'] == '0': user.option = body['option'] if body['type'] == '2': user.input = body['input'] user.output = body['output'] user.save() return pack(data={'homeworkid': id}) except Exception as e: return pack(msg=e)
def creatResource(request): try: body = request.POST.dict() user = tokenActive({'token': body['token']}) if not isinstance(user, User): return pack(code=user) # 获取上传的文件,如果没有文件,则默认为None file = request.FILES.get("file", None) if not file: pack(msg="no files for upload!") # 获取扩展名 filetype = '.' + str(file).split('.')[-1] resourceid = random_str() fileurl = resourceid + filetype resource = Resource(resourceid=resourceid, fileurl=fileurl, creator=user.userid, title=body['title'], creattime=int(1000 * time.time())) if 'introduction' in body: resource.introduction = body['introduction'] # 打开特定的文件进行二进制的写操作 destination = open( BASE_DIR + os.sep + 'static' + os.sep + 'resources' + os.sep + fileurl, 'wb+') # 分块写入文件 for chunk in file.chunks(): destination.write(chunk) destination.close() resource.save() return pack() except Exception as e: return pack(msg=e)
def getHistoryCourse(request): try: body = eval(request.body) if 'userid' in body: userid = body['userid'] else: global user user = tokenActive(request.COOKIES) if not isinstance(user, User): return pack(code=user) userid = user.userid historylist = list( Record.objects.filter(userid=userid, time__gte=int(1000 * time.time()) - 604800000).order_by('-time')) # 根据获取的courseid获取courselist courselist = [] courseidlist = [] for historycourse in historylist: course = list( Course.objects.filter(courseid=historycourse.courseid))[0] if course.courseid not in courseidlist: courselist.append(coursemodel(course)) courseidlist.append(course.courseid) return pack(data=courselist) except Exception as e: return pack(msg=e)
def addCourseCover(request): try: body = request.POST.dict() if 'courseid' not in body: t = loader.get_template('imgupload.html') return HttpResponse(t.render()) user = tokenActive({'token': body['token']}) if not isinstance(user, User): return pack(code=user) course = list(Course.objects.filter(courseid=body['courseid']))[0] # 获取上传的文件,如果没有文件,则默认为None file = request.FILES.get("file", None) if not file: pack(msg="no files for upload!") # 获取扩展名 filetype = '.' + file.name.split('.')[-1] # 记录原来文件的地址,成功保存之后删除原来的 # prefile = BASE_DIR + os.sep + 'static' + os.sep + 'covers' + os.sep + course.cover # 保存fileurl course.cover = random_str() + filetype # 打开特定的文件进行二进制的写操作 destination = open( BASE_DIR + os.sep + 'static' + os.sep + 'covers' + os.sep + course.cover, 'wb+') # 分块写入文件 for chunk in file.chunks(): destination.write(chunk) destination.close() course.save() # 删除原来的文件 # os.remove(prefile) return pack(data={'cover': course.cover}) except Exception as e: return pack(msg=e)
def getSectionList(request): try: model = [] user = tokenActive(request.COOKIES) if isinstance(user, User) and request.body == '': sectionlist = list( Section.objects.all().filter(creator=user.userid)) else: body = eval(request.body) sectionlist = list(Section.objects.all().filter( father=body['courseid']).order_by('creattime')) # 记录用户查看课程的记录 if isinstance(user, User): record = Record(userid=user.userid, courseid=body['courseid'], time=int(1000 * time.time())) record.save() if len(sectionlist) > 0: for section in sectionlist: model.append({ 'sectionid': section.sectionid, 'title': section.title, 'creator': section.creator, 'type': section.type, 'creattime': section.creattime }) return pack(data=model) except Exception as e: return pack(msg=e)
def getcoursedetail(request): try: global user user = tokenActive(request.COOKIES) courseid = eval(request.body)['courseid'] course = list(Course.objects.all().filter(courseid=courseid))[0] return pack(data=coursemodel(course)) except Exception as e: return pack(msg=e)
def deleteResource(request): try: body = eval(request.body) user = tokenActive(cookie=request.COOKIES) if not isinstance(user, User): return pack(code=user) resource = Resource.objects.filter(creator=user.userid).filter( resourceid=body['resourceid']) resource.delete() return pack() except Exception as e: return pack(msg=e)
def getrecommendsources(request): try: model = [] recommendcourses = [] # 首先查看记录表里面有没有用户的内容 user = tokenActive(request.COOKIES) if isinstance(user, User): recordlist = list( Record.objects.filter(userid=user.userid, time__gte=int(1000 * time.time()) - 604800000)) if len(recordlist) == 0: recommendcourses = list(RecommendCourse.objects.all()) else: taglist = {} # 记录总共有多少记录的变量 allnum = 0 # 循环record,记录tag比例 for record in recordlist: try: tag = list( Course.objects.filter( courseid=record.courseid))[0].tag # 判断是否已经记录这个分类 if tag in taglist: taglist[tag] += 1 else: taglist[tag] = 1 allnum += 1 # 抛出此异常表示已经删除了课程 except IndexError as e: pass # 把次数变为以5为基础的 for tag in taglist: num = int(round(float(taglist[tag]) / allnum * 5)) # 获取相应tag的数量 recommendcourses.extend( list(Course.objects.filter(tag=tag))[0:num]) while True: if len(recommendcourses) > 5: recommendcourses.pop() else: break else: recommendcourses = list(RecommendCourse.objects.all()) for course in recommendcourses: course = list(Course.objects.filter(courseid=course.courseid)) model.append(coursemodel(course[0])) return pack(data=model) except Exception as e: return pack(msg=e)
def alertpwd(request): try: body = eval(request.body) user = tokenActive(request.COOKIES) if not isinstance(user, User): return pack(code=user) if user.password == body['oldpwd']: user.password = body['newpwd'] user.save() return pack() else: raise Exception('旧密码错误') except Exception as e: return pack(msg=e)
def getCourseList(request): try: if request.body != '': userid = eval(request.body)['userid'] else: user = tokenActive(request.COOKIES) if not isinstance(user, User): return pack(code=user) userid = user.userid courseList = list(Course.objects.all().filter(creator=userid)) model = [] for course in courseList: model.append(coursemodel(course)) return pack(data=model) except Exception as e: return pack(msg=e)
def editCourse(request): try: body = eval(request.body) user = tokenActive(request.COOKIES) if not isinstance(user, User): return pack(code=user) if user.type == 0: raise Exception('学生无法编辑') course = list(Course.objects.all().filter(creator=user.userid).filter( courseid=body['courseid']))[0] course.title = body['title'] course.tag = body['tag'] course.save() return pack() except Exception as e: return pack(msg=e)
def editSection(request): try: body = eval(request.body) user = tokenActive(request.COOKIES) if not isinstance(user, User): return pack(code=user) if user.type == 0: raise Exception('学生无法编辑') section = list( Section.objects.filter(creator=user.userid).filter( sectionid=body['sectionid']))[0] section.title = body['title'] section.save() return pack() except Exception as e: return pack(msg=e)
def creatSection(request): try: body = request.POST.dict() user = tokenActive({'token': body['token']}) if not isinstance(user, User): return pack(code=user) # 如果是学生,那么不让创建 if user.type == 0: return pack(msg='学生无法创建课程') # 获取当前时间戳 now = int(1000 * time.time()) id = random_str() section = Section(sectionid=id, creattime=now, creator=user.userid, type=body['type'], title=body['title'], father=body['courseid']) # 获取上传的文件,如果没有文件,则默认为None file = request.FILES.get("file", None) if not file: pack(msg="no files for upload!") # 文字文件和视频文件分别处理 if body['type'] == '1': # 获取扩展名 filetype = '.' + str(file).split('.')[1] # 保存fileurl section.fileurl = random_str() + filetype # 打开特定的文件进行二进制的写操作 destination = open( BASE_DIR + '\\static\\' + '\\sectionfile\\' + section.fileurl, 'wb+') # 分块写入文件 for chunk in file.chunks(): destination.write(chunk) destination.close() elif body['type'] == '0': filecontent = file.read() # 获取编码方式 encodetype = chardet.detect(filecontent)['encoding'] section.content = filecontent.decode(encodetype) section.save() return pack() except Exception as e: return pack(msg=e)
def getResourcelist(request): try: if request.body != '': userid = eval(request.body)['userid'] else: user = tokenActive(request.COOKIES) if not isinstance(user, User): return pack(code=user) userid = user.userid resourcelist = list(Resource.objects.filter(creator=userid)) # 保存查询结果的数组 model = [] for resource in resourcelist: model.append(resourceModel(resource)) return pack(data=model) except Exception as e: return pack(msg=e)
def deletesection(request): try: body = eval(request.body) user = tokenActive(request.COOKIES) if not isinstance(user, User): return pack(code=user) if user.type == 0: raise Exception('学生无法删除') section = Section.objects.all().filter(creator=user.userid).filter( sectionid=body['sectionid']) # for sec in list(section): # if sec.fileurl is not None: # os.remove(sectionfiledir + sec.fileurl) section.delete() return pack() except Exception as e: return pack(msg=e)
def collectCourse(request): try: body = eval(request.body) user = tokenActive(request.COOKIES) if not isinstance(user, User): return pack(code=user) # 1代表收藏,0代表取消收藏 if body['operate'] == 1: course = CollectCourse(userid=user.userid, courseid=body['courseid']) course.save() elif body['operate'] == 0: course = CollectCourse.objects.filter(userid=user.userid, courseid=body['courseid']) course.delete() return pack() except Exception as e: return pack(msg=e)
def getCollectCourseByUser(request): try: if request.body != '': userid = eval(request.body)['userid'] else: global user user = tokenActive(request.COOKIES) if not isinstance(user, User): return pack(code=user) userid = user.userid collectcourselist = list(CollectCourse.objects.filter(userid=userid)) # 根据获取的courseid获取courselist courselist = [] for collectcourse in collectcourselist: course = list( Course.objects.filter(courseid=collectcourse.courseid))[0] courselist.append(coursemodel(course)) return pack(data=courselist) except Exception as e: return pack(msg=e)
def getuserdetail(request): try: body = {} if request.body != '': body = eval(request.body) user = tokenActive(request.COOKIES) if user == -2: return pack(code=-2) elif user == -3 or 'userid' in body: # 如果token有效且用户的userid为空,那么表示取得是自己的信息 # token为空则肯定是根据userid查询别人的信息 user = list(User.objects.all().filter(userid=body['userid'])) # 如果没查到数据,返回空 if len(user) == 0: return pack(data={}) else: user = user[0] # 根据用户的类型返回不一样的数据 # if user.type == 0: # pass # elif user.type == 1: # # 老师返回所创建的课程id # courses = list(Course.objects.all().filter(creator=user.userid)) # user.courses = [] # if len(courses) > 0: # for course in courses: # user.courses.append({ # 'courseid': course.courseid, # 'title': course.title # }) model = { 'userid': user.userid, 'username': user.username, 'type': user.type } return pack(data=model) except Exception as e: return pack(msg=e)
def userinfo(request): try: body = eval(request.body) user = tokenActive(request.COOKIES) if user == -2: return pack(code=-2) elif user == -3 or body['userid'] != '': # 如果token有效且用户的userid为空,那么表示取得是自己的信息 # token为空则肯定是根据userid查询别人的信息 user = list(User.objects.all().filter(userid=body.userid)) # 如果没查到数据,返回空 if len(user) == 0: return pack(data={}) else: user = user[0] model = { 'userid': user.userid, 'username': user.username, 'type': user.type, } return pack(data=model) except Exception as e: return pack(msg=e)
def deleteCourse(request): try: body = eval(request.body) user = tokenActive(request.COOKIES) if not isinstance(user, User): return pack(code=user) if user.type == 0: raise Exception('学生无法删除') course = Course.objects.all().filter(creator=user.userid).filter( courseid=body['courseid']) # 删除所有章节 section = Section.objects.filter(father=list(course)[0].courseid) # for sec in list(section): # if sec.fileurl is not None: # os.remove(sectionfiledir+sec.fileurl) section.delete() # 删除待审核章节 edit = EditSection.objects.filter(father=list(course)[0].courseid) edit.delete() course.delete() return pack() except Exception as e: return pack(msg=e)
def creatSection(request): try: body = request.POST.dict() if 'courseid' not in body: t = loader.get_template('upload.html') return HttpResponse(t.render()) user = tokenActive({'token': body['token']}) if not isinstance(user, User): return pack(code=user) # 如果是学生,那么不让创建 if user.type == 0: return pack(msg='学生无法创建课程') # 获取当前时间戳 now = int(1000 * time.time()) id = random_str() section = EditSection(sectionid=id, creattime=now, creator=user.userid, type=body['type'], title=body['title'], father=body['courseid'], operator=0) # 获取上传的文件,如果没有文件,则默认为None file = request.FILES.get("file", None) if not file: pack(msg="no files for upload!") # 文字文件和视频文件分别处理 if body['type'] == '1': appid = 1252409052 secret_id = u'AKIDQkspaAxYEZItIV7K2axCF6yuhHIDfVr0' secret_key = u'CG8nkZJtJXaS7au1vdJsGtOp4JQQFsRp' region_info = u"tj" cos_client = qcloud_cos.CosClient(appid, secret_id, secret_key, region=region_info) creatSectionFile(file=file, section=section) request = qcloud_cos.UploadFileRequest( u'conlinestatic1', u'/sectionfile/' + section.fileurl, u'' + sectionfiledir + section.fileurl) res = cos_client.upload_file(request) if res['code'] != 0: raise Exception('上传失败') request = qcloud_cos.UpdateFileRequest( u'conlinestatic1', u'/sectionfile/' + section.fileurl) request.set_content_disposition(u'inline; filename=' + section.fileurl) cos_client.update_file(request) os.remove(sectionfiledir + section.fileurl) elif body['type'] == '0': filetype = '.' + str(file).split('.')[1] # 如果是txt或者md那么存到数据库 if filetype == '.txt' or filetype == '.md': filecontent = file.read() # 获取编码方式 encodetype = chardet.detect(filecontent)['encoding'] section.content = filecontent.decode(encodetype) # 如果是pdf那么创建文件 elif filetype == '.pdf': creatSectionFile(file=file, section=section) # 如果是doc那么先转pdf再保存文件 elif filetype == '.doc': creatSectionFile(file=file, section=section) desfile = random_str() + '.pdf' log('des: ' + desfile) log('sre' + section.fileurl) office = subprocess.Popen(['sh', '/home/ubuntu/office.sh']) office.wait() write = subprocess.Popen([ 'python3', '/home/ubuntu/DocumentConverter.py', sectionfiledir + section.fileurl, sectionfiledir + desfile ], stderr=subprocess.PIPE, stdout=subprocess.PIPE) write.wait() if write.stderr.read() != '': log('error: ' + write.stderr.read()) raise Exception('上传出错') section.fileurl = desfile else: raise Exception('文件类型错误') section.save() return pack() except Exception as e: return pack(msg=e)