Exemple #1
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)
Exemple #2
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))
Exemple #3
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)
Exemple #4
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)
Exemple #5
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)
Exemple #6
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)
Exemple #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)
Exemple #8
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)
Exemple #9
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)
Exemple #10
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)
Exemple #11
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)
Exemple #12
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)
Exemple #13
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)
Exemple #14
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)
Exemple #15
0
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)
Exemple #16
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)
Exemple #17
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)
Exemple #18
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)
Exemple #19
0
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)
Exemple #20
0
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)
Exemple #21
0
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)
Exemple #22
0
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)
Exemple #23
0
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)