Ejemplo n.º 1
0
    def post(self, request):
        # 1.从前端获取参数
        json_data = request.body
        if not json_data:
            return to_json_data(errno=Code.PARAMERR,
                                errmsg=error_map[Code.PARAMERR])
        # 2.将json转化为dict
        dict_data = json.loads(json_data.decode('utf8'))
        form = forms.NewsPubForm(data=dict_data)
        if form.is_valid():
            # 3.保存到数据库
            # 只有form继承了forms.ModelForm 才能使用这种方法
            news_instance = form.save(commit=False)
            news_instance.author_id = request.user.id
            # news_instance.author_id = 1     # for test
            news_instance.save()
            # 4. 返回给前端
            return to_json_data(errmsg='文章创建成功')
        else:
            # 定义一个错误信息列表
            err_msg_list = []
            for item in form.errors.get_json_data().values():
                err_msg_list.append(item[0].get('message'))
            err_msg_str = '/'.join(err_msg_list)  # 拼接错误信息为一个字符串

            return to_json_data(errno=Code.PARAMERR, errmsg=err_msg_str)
Ejemplo n.º 2
0
    def post(self, request):
        image_file = request.FILES.get('image_file')
        if not image_file:
            logger.info('从前端获取图片失败')
            return to_json_data(errno=Code.NODATA, errmsg='从前端获取图片失败')

        if image_file.content_type not in ('image/jpeg', 'image/png',
                                           'image/gif'):
            return to_json_data(errno=Code.DATAERR, errmsg='不能上传非图片文件')

        try:
            image_ext_name = image_file.name.split('.')[-1]
        except Exception as e:
            logger.info('图片拓展名异常:{}'.format(e))
            image_ext_name = 'jpg'

        try:
            upload_res = FDFS_Client.upload_by_buffer(
                image_file.read(), file_ext_name=image_ext_name)
        except Exception as e:
            logger.error('图片上传出现异常:{}'.format(e))
            return to_json_data(errno=Code.UNKOWNERR, errmsg='图片上传异常')
        else:
            if upload_res.get('Status') != 'Upload successed.':
                logger.info('图片上传到FastDFS服务器失败')
                return to_json_data(Code.UNKOWNERR, errmsg='图片上传到服务器失败')
            else:
                image_name = upload_res.get('Remote file_id')
                image_url = settings.FASTDFS_SERVER_DOMAIN + image_name
                return to_json_data(data={'image_url': image_url},
                                    errmsg='图片上传成功')
Ejemplo n.º 3
0
    def post(self, request):
        """
        :param request: 返回json_dict到前端
        :return: JsonResponse(json_dict)
        """
        json_data = request.body
        if not json_data:
            return to_json_data(errno=Code.PARAMERR,
                                errmsg=error_map[Code.PARAMERR])
        dict_data = json.loads(json_data.decode('utf8'))

        # 修改
        tag_name = dict_data.get('name')
        if tag_name:
            tag_name = tag_name.strip()
            tag_tuple = models.Tag.objects.get_or_create(name=tag_name)
            tag_instance, tag_boolean = tag_tuple
            if tag_boolean:
                news_tag_dict = {
                    'id': tag_instance.id,
                    'name': tag_instance.name
                }
                return to_json_data(errmsg='标签创建成功', data=news_tag_dict)
            else:
                return to_json_data(errno=Code.DATAEXIST, errmsg='标签已存在')
        else:
            return to_json_data(errno=Code.PARAMERR, errmsg='标签不能为空')
Ejemplo n.º 4
0
    def put(self, request, news_id):
        """
        :param request:
        :param news_id:
        :return:
        """
        news = models.News.objects.filter(id=news_id).first()
        # 验证参数
        if not news:
            return to_json_data(errno=Code.PARAMERR, errmsg="文章不存在")
        json_data = request.body
        if not json_data:
            return to_json_data(errno=Code.PARAMERR,
                                errmsg=error_map[Code.PARAMERR])
        dict_data = json.loads(json_data.decode('utf8'))
        form = forms.NewsPubForm(data=dict_data)
        if form.is_valid():
            news.title = form.cleaned_data.get('title')
            news.digest = form.cleaned_data.get('digest')
            news.content = form.cleaned_data.get('content')
            news.image_url = form.cleaned_data.get('image_url')
            news.tag = form.cleaned_data.get('tag')
            news.save()
            return to_json_data(errmsg='文章更新成功')
        else:
            # 定义一个错误信息列表
            err_msg_list = []
            for item in form.errors.get_json_data().values():
                err_msg_list.append(item[0].get('message'))
            err_msg_str = '/'.join(err_msg_list)  # 拼接错误信息为一个字符串

            return to_json_data(errno=Code.PARAMERR, errmsg=err_msg_str)
Ejemplo n.º 5
0
    def post(self, request):
        text_file = request.FILES.get('text_file')
        if not text_file:
            logger.info('从前端获取文件失败!')
            return to_json_data(errno=Code.NODATA, errmsg='从前端获取文件失败')
        if text_file.content_type not in ('application/octet-stream',
                                          'application/pdf', 'application/zip',
                                          'text/plain', 'application/x-rar'):
            return to_json_data(errno=Code.DATAERR, errmsg='不能上传非正常文件')

        try:
            text_ext_name = text_file.name.split('.')[-1]
        except Exception as e:
            logger.info('文件拓展名异常:{}'.format(e))
            text_ext_name = 'pdf'

        try:
            upload_res = FDFS_Client.upload_by_buffer(
                text_file.read(), file_ext_name=text_ext_name)
        except Exception as e:
            logger.error('文件上传出现异常:{}'.format(e))
            return to_json_data(errno=Code.UNKOWNERR, errmsg='文件上传异常')
        else:
            if upload_res.get('Status') != 'Upload successed.':
                logger.info('文件上传到FastDFS服务器失败')
                return to_json_data(Code.UNKOWNERR, errmsg='文件上传到服务器失败')
            else:
                text_name = upload_res.get('Remote file_id')
                text_url = settings.FASTDFS_SERVER_DOMAIN + text_name
                return to_json_data(data={'text_file': text_url},
                                    errmsg='文件上传成功')
Ejemplo n.º 6
0
    def put(self, request, tag_id):
        """
        :param request: request.body
        :param tag_id:
        :return: 前端传入和数据库对比验证
        """
        json_data = request.body
        # 校验前端传入是否正确
        if not json_data:
            return to_json_data(errno=Code.PARAMERR,
                                errmsg=error_map[Code.PARAMERR])
        dict_data = json.loads(json_data.decode('utf8'))
        tag_name = dict_data.get('name').strip()

        # 比对数据库
        tag = models.Tag.objects.only('name').filter(id=tag_id).first()
        if tag:
            if not models.Tag.objects.only('id').filter(
                    name=tag_name).exists():
                if tag.name == tag_name:
                    return to_json_data(errno=Code.PARAMERR, errmsg='标签未修改')
                tag.name = tag_name
                tag.save(update_fields=['name'])
                return to_json_data(errmsg='标签更新成功')
            else:
                return to_json_data(errmsg='标签名已存在')
        else:
            return to_json_data(errno=Code.PARAMERR, errmsg='标签不存在')
Ejemplo n.º 7
0
 def delete(self, request, banner_id):
     banner = models.Banner.objects.only('id').filter(id=banner_id).first()
     if banner:
         banner.is_delete = True
         banner.save(update_fields=['is_delete', 'update_time'])
         return to_json_data(errmsg='轮播图删除成功')
     else:
         return to_json_data(errno=Code.PARAMERR, errmsg='轮播图不存在')
Ejemplo n.º 8
0
 def delete(self, request, doc_id):
     # 获取参数并验证
     doc = Doc.objects.only('id').filter(id=doc_id, is_delete=False).first()
     if doc:
         doc.is_delete = True
         # 更新参数
         doc.save(update_fields=['is_delete', 'update_time'])
         return to_json_data(errmsg='轮播图删除成功')
     else:
         return to_json_data(errno=Code.PARAMERR, errmsg='轮播图不存在')
Ejemplo n.º 9
0
 def delete(self, request, news_id):
     """
     删除文章
     """
     news = models.News.objects.only('id').filter(id=news_id).first()
     if news:
         news.is_delete = True
         # 更新参数
         news.save(update_fields=['is_delete', 'update_time'])
         return to_json_data(errmsg='文章删除成功')
     else:
         return to_json_data(errno=Code.PARAMERR, errmsg='文章不存在')
Ejemplo n.º 10
0
 def delete(self, request, tag_id):
     """
     :param request:
     :param tag_id: 前端传入和数据库对比验证
     :return: JsonResponse(json_dict)
     """
     tag = models.Tag.objects.only('id').filter(id=tag_id).first()
     if tag:
         tag.is_delete = True
         tag.save(update_fields=['is_delete'])
         return to_json_data(errmsg='标签删除成功')
     else:
         return to_json_data(errno=Code.PARAMERR, errmsg='标签不存在')
Ejemplo n.º 11
0
 def delete(self, request, hotnews_id):
     """
     :param request:
     :param hotnews_id:
     :return: 前端传入和数据库对比验证
     """
     # 获取参数并验证
     tag = models.Tag.objects.only('id').filter(id=hotnews_id).first()
     if tag:
         tag.is_delete = True
         # 更新参数
         tag.save(update_fields=['is_delete', 'update_time'])
         return to_json_data(errmsg='标签删除成功')
     else:
         return to_json_data(errno=Code.PARAMERR, errmsg='标签不存在')
Ejemplo n.º 12
0
 def delete(self, request, course_id):
     """"""
     courses = Course.objects.only('id').filter(is_delete=False,
                                                id=course_id).first()
     if courses:
         courses.is_delete = True
         courses.save(update_field=['is_delete', 'update_time'])
         return to_json_data(errmsg="在线课堂删除成功")
Ejemplo n.º 13
0
 def post(self, request):
     json_data = request.body
     if not json_data:
         return to_json_data(errno=Code.PARAMERR,
                             errmsg=error_map[Code.PARAMERR])
     # 2.将json转化为dict
     dict_data = json.loads(json_data.decode('utf8'))
     try:
         news_id = int(dict_data.get('news_id'))
     except Exception as e:
         logger.info('热门文章:\n{}'.format(e))
         return to_json_data(errno=Code.PARAMERR, errmsg='参数错误')
     if not models.News.objects.filter(id=news_id).exists():
         return to_json_data(errno=Code.PARAMERR, errmsg='文章不存在')
     try:
         priority = int(dict_data.get('priority'))
         priority_list = [i for i, _ in models.HotNews.PRI_CHOICES]
         if priority not in priority_list:
             return to_json_data(errno=Code.PARAMERR, errmsg='热门文章优先级设置错误')
     except Exception as e:
         logger.info('热门文章:\n{}'.format(e))
         return to_json_data(errno=Code.PARAMERR, errmsg='参数错误')
     try:
         image_url = dict_data.get('image_url')
     except Exception as e:
         logger.info('图片url:\n{}'.format(e))
         return to_json_data(errno=Code.PARAMERR, errmsg='图片上传错误')
     banner_tuple = models.Banner.objects.get_or_create(news_id=news_id)
     banner, is_created = banner_tuple
     banner.priority = priority
     banner.image_url = image_url
     banner.save()
     return to_json_data(errmsg='轮播图修改成功')
Ejemplo n.º 14
0
    def post(self, request):
        json_data = request.body
        if not json_data:
            return to_json_data(errno=Code.PARAMERR,
                                errmsg=error_map[Code.PARAMERR])
        dict_data = json.loads(json_data.decode('utf8'))

        form = forms.CoursesPubForm(data=dict_data)
        if form.is_valid():
            courses_instance = form.save()
            return to_json_data(errmsg='课程发布成功')
        else:
            # 定义一个错误信息列表
            err_msg_list = []
            for item in form.errors.get_json_data().values():
                err_msg_list.append(item[0].get('message'))
            err_msg_str = '/'.join(err_msg_list)  # 拼接错误信息为一个字符串

            return to_json_data(errno=Code.PARAMERR, errmsg=err_msg_str)
Ejemplo n.º 15
0
 def get(self, request, course_id):
     """"""
     course = Course.objects.filter(is_delete=False, id=course_id).first()
     teachers = Teacher.objects.all()
     categories = CourseCategory.objects.only('name').filter(
         is_delete=False)
     if not course:
         return to_json_data(errno=Code.PARAMERR,
                             errmsg=error_map[Code.PARAMERR])
     return render(request, 'admin/course/courses_pub.html', locals())
Ejemplo n.º 16
0
    def get(self, request):
        # 1获取参数
        # 2校验参数
        try:
            tag_id = int(request.GET.get('tag_id', 0))
        except Exception as e:
            logger.error('标签错误:\n{}'.format(e))
            tag_id = 0

        try:
            page = int(request.GET.get('page', 1))
        except Exception as e:
            logger.error('页面错误:\n{}'.format(e))
            page = 1

        # 3数据库获取数据
        # title、digest、image_url、update_time
        # select_related
        news_queryset = models.News.objects.select_related(
            'tag', 'author').only('title', 'digest', 'image_url',
                                  'update_time', 'tag__name',
                                  'author__username')
        news = news_queryset.filter(
            is_delete=False,
            tag_id=tag_id) or news_queryset.filter(is_delete=False)

        # 4分页
        paginator = Paginator(news, constants.PER_PAGE_NEWS_COUNT)
        try:
            news_info = paginator.page(page)
        except Exception:
            logger.error('访问页面失败')
            news_info = paginator.page(paginator.num_pages)
        # 5序列化输出
        news_info_list = []
        for n in news_info:
            news_info_list.append({
                'id':
                n.id,
                'title':
                n.title,
                'digest':
                n.digest,
                'image_url':
                n.image_url,
                'update_time':
                n.update_time.strftime('%Y年%m月%d日 %H:%M'),
                'tag_name':
                n.tag.name,
                'author':
                n.author.username
            })
        data = {'news': news_info_list, 'total_pages': paginator.num_pages}
        # 6返回数据到前端
        return to_json_data(data=data)
Ejemplo n.º 17
0
 def get(self, request, news_id):
     """
     :param request:
     :param news_id:
     :return:
     """
     news = models.News.objects.filter(is_delete=False, id=news_id).first()
     if not news:
         return to_json_data(errno=Code.PARAMERR, errmsg="文章不存在")
     tags = models.Tag.objects.only('id', 'name').filter(is_delete=False)
     return render(request, 'admin/news/news_pub.html', locals())
Ejemplo n.º 18
0
    def put(self, request, hotnews_id):
        json_data = request.body
        # 验证参数
        if not json_data:
            return to_json_data(errno=Code.PARAMERR,
                                errmsg=error_map[Code.PARAMERR])
        dict_data = json.loads(json_data.decode('utf8'))
        try:
            priority = int(dict_data.get('priority'))
            priority_list = [i for i, _ in models.HotNews.PRI_CHOICES]
            if priority not in priority_list:
                return to_json_data(errno=Code.PARAMERR, errmsg='热门文章优先级设置错误')
        except Exception as e:
            logger.info('热门文章优先级异常:\n{}'.format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg='热门文章优先级设置错误')

        hotnews = models.HotNews.objects.only('id').filter(
            id=hotnews_id).first()
        if not hotnews:
            return to_json_data(errno=Code.PARAMERR, errmsg='需要更新的热门文章不存在')
        if hotnews.priority == priority:
            return to_json_data(errno=Code.PARAMERR, errmsg='热门文章优先级优先级无变化')
        hotnews.priority = priority
        hotnews.save(update_fields=['priority', 'update_time'])
        return to_json_data(errmsg='热门文章更新成功')
Ejemplo n.º 19
0
    def post(self, request):
        """
        :param request:
        :return:
        """
        json_data = request.body
        if not json_data:
            return to_json_data(errno=Code.PARAMERR,
                                errmsg=error_map[Code.PARAMERR])
        dict_data = json.loads(json_data.decode('utf8'))
        try:
            news_id = int(dict_data.get('news_id'))
        except Exception as e:
            logger.info('热门文章:\n{}'.format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg='参数错误')
        if not models.News.objects.filter(id=news_id).exists():
            return to_json_data(errno=Code.PARAMERR, errmsg='文章不存在')
        try:
            priority = int(dict_data.get('priority'))
            priority_list = [i for i, _ in models.HotNews.PRI_CHOICES]
            if priority not in priority_list:
                return to_json_data(errno=Code.PARAMERR, errmsg='热门文章优先级设置错误')
        except Exception as e:
            logger.info('热门文章:\n{}'.format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg='参数错误')

        hotnews_tuple = models.HotNews.objects.get_or_create(news_id=news_id)
        hotnews, is_created = hotnews_tuple
        hotnews.priority = priority
        hotnews.save(update_fields=['priority'])
        return to_json_data(errmsg='热门新闻修改成功')
Ejemplo n.º 20
0
    def put(self, request, course_id):
        """"""
        json_data = request.body
        if not json_data:
            return to_json_data(errno=Code.PARAMERR,
                                errmsg=error_map[Code.PARAMERR])
        dict_data = json.loads(json_data.decode("utf8"))
        course = Course.objects.filter(id=course_id, is_delete=False).first()
        form = forms.CoursesPubForm(data=dict_data)
        if form.is_valid():
            for attr, value in form.cleaned_data.items():
                setattr(course, attr, value)
            course.save()
            return to_json_data(errmsg='课程更新成功')
        else:
            # 定义一个错误信息列表
            err_msg_list = []
            for item in form.errors.get_json_data().values():
                err_msg_list.append(item[0].get('message'))
            err_msg_str = '/'.join(err_msg_list)  # 拼接错误信息为一个字符串

            return to_json_data(errno=Code.PARAMERR, errmsg=err_msg_str)
Ejemplo n.º 21
0
    def put(self, request, doc_id):
        json_data = request.body
        if not json_data:
            return to_json_data(errno=Code.PARAMERR, errmsg='参数不存在')
        dict_data = json.loads(json_data.decode('utf8'))

        doc = Doc.objects.filter(id=doc_id, is_delete=False).first()
        form = forms.DocsPubForm(data=dict_data)
        if form.is_valid():
            doc.title = form.cleaned_data.get('title')
            doc.desc = form.cleaned_data.get('desc')
            doc.file_url = form.cleaned_data.get('file_url')
            doc.image_url = form.cleaned_data.get('image_url')
            doc.save()
            return to_json_data(errmsg='文档更新成功')
        else:
            # 定义一个错误信息列表
            err_msg_list = []
            for item in form.errors.get_json_data().values():
                err_msg_list.append(item[0].get('message'))
            err_msg_str = '/'.join(err_msg_list)  # 拼接错误信息为一个字符串

            return to_json_data(errno=Code.PARAMERR, errmsg=err_msg_str)
Ejemplo n.º 22
0
    def get(self, request):
        banners = models.Banner.objects.select_related('news').only(
            'image_url', 'news_id',
            'news__title').filter(is_delete=False).order_by(
                'priority', '-news__clicks')[:constants.SHOW_BANNER_COUNT]

        # 序列化输出
        banners_info_list = []
        for b in banners:
            banners_info_list.append({
                'image_url': b.image_url,
                'news_id': b.news_id,
                'news_title': b.news.title
            })
        data = {'banners': banners_info_list}
        return to_json_data(data=data)
Ejemplo n.º 23
0
    def post(self, request, news_id):
        # 1获取参数
        # 是否登录
        if not request.user.is_authenticated:
            return to_json_data(errno=Code.SESSIONERR,
                                errmsg=error_map[Code.SESSIONERR])

        if not models.News.objects.only('id').filter(is_delete=False,
                                                     id=news_id).exists():
            return to_json_data(errno=Code.PARAMERR, errmsg='新闻不存在')

        json_data = request.body
        # 2校验参数
        if not json_data:
            return to_json_data(errno=Code.PARAMERR,
                                errmsg=error_map[Code.PARAMERR])
        dict_data = json.loads(json_data.decode('utf8'))
        content = dict_data.get('content')
        if not content:
            return to_json_data(errno=Code.PARAMERR, errmsg='评论内容不能为空')
        # 提取父评论
        parent_id = dict_data.get('parent_id')
        # 验证父评论
        try:
            if parent_id:
                parent_id = int(parent_id)
                if not models.Comments.objects.only('id').filter(
                        is_delete=False, id=parent_id,
                        news_id=news_id).exists():
                    return to_json_data(errno=Code.PARAMERR,
                                        errmsg=error_map[Code.PARAMERR])
        except Exception as e:
            logger.info('parent_id有误:{}'.format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg='parent_id异常')
        # 3存入数据
        news_comment = models.Comments()
        news_comment.content = content
        news_comment.news_id = news_id
        news_comment.author = request.user
        news_comment.parent_id = parent_id if parent_id else None
        news_comment.save()
        # 4返回前端
        return to_json_data(data=news_comment.to_dict_data())
Ejemplo n.º 24
0
    def put(self, request, banner_id):
        json_data = request.body
        if not json_data:
            return to_json_data(errno=Code.PARAMERR, errmsg='参数不存在')
        dict_data = json.loads(json_data.decode('utf8'))
        try:
            priority = int(dict_data.get('priority'))
            priority_list = [i for i, _ in models.Banner.PRI_CHOICES]
            if priority not in priority_list:
                return to_json_data(errno=Code.PARAMERR, errmsg='轮播图优先级设置错误')
        except Exception as e:
            logger.info('轮播图优先级异常:\n{}'.format(e))
            return to_json_data(errno=Code.PARAMERR, errmsg='热门文章优先级设置错误')

        banner = models.Banner.objects.only('id').filter(id=banner_id).first()
        if not banner:
            return to_json_data(errno=Code.PARAMERR, errmsg='需要更新的轮播图不存在')
        if banner.priority == priority:
            return to_json_data(errno=Code.PARAMERR, errmsg='轮播图优先级优先级无变化')
        banner.priority = priority
        banner.save(update_fields=['priority', 'update_time'])
        return to_json_data(errmsg='轮播图更新成功')
Ejemplo n.º 25
0
 def get(self, request, doc_id):
     doc = Doc.objects.only('id').filter(id=doc_id).first()
     if not doc:
         return to_json_data(errno=Code.PARAMERR, errmsg="文档不存在")
     tags = models.Tag.objects.only('id', 'name').filter(is_delete=False)
     return render(request, 'admin/doc/docs_pub.html', locals())
Ejemplo n.º 26
0
 def get(self, request, tag_id):
     news = models.News.objects.filter(is_delete=False,
                                       tag_id=tag_id).values('id', 'title')
     news_list = [i for i in news]
     return to_json_data(data={'news': news_list})