def getCourselistByTag(request): try: model = [] # 如果没有tag,表示是获取首页的课程,按分类的前三个获取 if request.body != '': body = eval(request.body) tag = body['tag'] index = body['index'] size = body['size'] courseList = list(Course.objects.all().filter( tag=tag).order_by('-creattime'))[size * (index - 1):size * index] for course in courseList: model.append(coursemodel(course)) else: taglist = list(Tag.objects.all().order_by('creattime')) # 获取tag之后循环获取相关课程 for tag in taglist: tagcourseList = list(Course.objects.all().filter( tag=tag.tagid).order_by('creattime'))[0:5] # 循环格式化course for course in tagcourseList: tagcourseList[tagcourseList.index(course)] = coursemodel( course) # 添加到model中 if len(tagcourseList) != 0: model.append(tagcourseList) return pack(data=model) 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 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 searchCourse(request): try: model = [] body = eval(request.body) # keyword为课程名的情况 courselist = list( Course.objects.filter(title__contains=body['keyword'])) # keyword为老师名的情况 teacherlist = list( User.objects.filter(username__contains=body['keyword'])) if len(teacherlist) > 0: for teacher in teacherlist: newcourselist = list( Course.objects.filter(creator=teacher.userid)) # 不同的课程才加入 for course in newcourselist: if course not in courselist: courselist.append(course) if len(courselist) > 0: for course in courselist: model.append(coursemodel(course)) return pack(data=model) 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 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 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 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 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 getnoticdetail(request): try: body = eval(request.body) notic = list(Notic.objects.filter(noticid=body['noticid']))[0] return pack(data=noticmodel(notic)) 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 getTaglist(request): try: taglist = list(Tag.objects.all()) model = [] for tag in taglist: tag = list(Tag.objects.filter(tagid=tag.tagid))[0] model.append({'tagid': tag.tagid, 'title': tag.title}) return pack(data=model) except Exception as e: return pack(msg=e)
def getCarouselList(request): try: courselist = list(Carousel.objects.all()) model = [] for course in courselist: course = list(Course.objects.filter(courseid=course.courseid))[0] model.append(coursemodel(course)) return pack(data=model) except Exception as e: return pack(msg=e)
def getHomework(request): try: body = eval(request.body) homework = list( Homework.objects.all().filter(homeworkid=body['homeworkid'])) if len(homework) == 0: raise Exception('题目id错误') return pack(data=homeworkModel(homework)) except Exception as e: return pack(msg=e)
def creatnotic(request): try: body = eval(request.body) noticid = random_str() notic = Notic(noticid=noticid, title=body['title'], content=body['content'], creattime=int(1000 * time.time())) notic.save() return pack() 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 searchResource(request): try: body = eval(request.body) resourcelist = list( Resource.objects.filter(title__contains=body['keyword'])) # 保存查询结果的数组 model = [] for resource in resourcelist: model.append(resourceModel(resource)) return pack(data=model) except Exception as e: return pack(msg=e)
def getHomeworkByUser(request): try: body = eval(request.body) homeworklist = list( Homework.objects.all().filter(creator=body['userid'])) if len(homeworklist) == 0: return pack(data=[], msg='未获取到数据') for homework in homeworklist: homework = homeworkModel(homework) return pack(data=homeworklist) 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 getnoticlist(request): try: model = [] body = eval(request.body) size = body['size'] index = body['index'] noticlist = Notic.objects.all().order_by( '-creattime')[size * (index - 1):size * index] for notic in noticlist: model.append(noticmodel(notic)) return pack(data=model) except Exception as e: return pack(msg=e)
def getHomeworkBySection(request): try: model = [] body = eval(request.body) homeworklist = list( Homework.objects.all().filter(father=body['sectionid'])) if len(homeworklist) == 0: return pack(data=[], msg='未获取到数据') for homework in homeworklist: model.append(homeworkModel(homework)) return pack(data=model) except Exception as e: return pack(msg=e)
def codeRun(request): try: body = eval(request.body) code = body['code'] id = body['homeworkid'] sfile = BASE_DIR + '/static/c/' + random_str() + '.c' with open(sfile, 'w') as cfile: cfile.write(code) cfile.close() dist = BASE_DIR + '/static/c/' + random_str() # 编译程序 gcc = subprocess.Popen(['gcc', sfile, '-o', dist], stderr=subprocess.PIPE) gcc.wait() if gcc.stderr.read() != '': log('error: ' + gcc.stderr.read()) raise Exception('编译出错') log('source ' + sfile + '\n' + dist) homework = list(Homework.objects.filter(homeworkid=id))[0] inputlist = eval(homework.input) outputlist = eval(homework.output) # 记录正确与否的list resultlist = [] # 循环执行 for input in inputlist: p = subprocess.Popen(dist, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p.stdin.write(input + '\n') p.wait() # 如果出错,那么记录错误 result = p.stdout.read() if result != '': # 获取编码 # encoding = chardet.detect(result)['encoding'] # 转码 # result = result.decode(encoding).encode('utf-8') if p.stderr.read() != '': raise Exception('type error') # 正确的话,记录正确 elif result == outputlist[inputlist.index(input)]: resultlist.append(True) else: resultlist.append(False) os.remove(sfile) os.remove(dist) return pack(data=resultlist) except Exception as e: os.remove(sfile) 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 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 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 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 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 signup(request): try: # 获取求情信息 body = eval(request.body) # 是否已注册 if len(User.objects.all().filter(username=body['username'])): raise Exception('用户名重复') # 注册用户 userid = random_str() token = random_str() user = User(userid=userid, token=token, username=body['username'], password=body['password'], type=body['type']) user.save() return pack(data={'token': token}) except Exception as e: return pack(msg=e)