Example #1
0
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)
Example #2
0
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)
Example #3
0
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)
Example #4
0
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)
Example #5
0
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)
Example #6
0
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)
Example #7
0
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)
Example #8
0
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))
Example #9
0
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)
Example #10
0
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)
Example #11
0
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)
Example #12
0
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)
Example #13
0
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)
Example #14
0
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)
Example #15
0
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)
Example #16
0
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)
Example #17
0
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)
Example #18
0
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)
Example #19
0
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)
Example #20
0
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)
Example #21
0
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)
Example #22
0
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)
Example #23
0
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)
Example #24
0
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)
Example #25
0
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)
Example #26
0
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)
Example #27
0
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)
Example #28
0
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)
Example #29
0
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)
Example #30
0
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)