コード例 #1
0
ファイル: views.py プロジェクト: lxj23626/Blog-System
def create_article(request):
    blog_id = request.session['userinfo']['blog__bid']

    if request.method == 'GET':
        form = ArticleForm(request)
        return render(request, 'backend/create_article.html', {'form': form})

    elif request.method == 'POST':
        form = ArticleForm(request, data=request.POST)
        if form.is_valid():
            with transaction.atomic():
                content = form.cleaned_data.pop('content')
                tag = form.cleaned_data.pop('tag')
                content = XSSFilter().process(content)

                form.cleaned_data['blog_id'] = blog_id
                article_obj = models.Article.objects.create(
                    **form.cleaned_data)
                models.Article_detail.objects.create(article=article_obj,
                                                     content=content)

                tag_list = []
                for tag_id in tag:
                    tag_id = int(tag_id)
                    tag_list.append(
                        models.Article2Tag(article=article_obj, tag_id=tag_id))
                models.Article2Tag.objects.bulk_create(tag_list)

            return redirect('/backend/article-0-0.html')
        return render(request, 'backend/create_article.html', {'form': form})
コード例 #2
0
def add_article(request):
    if request.method == 'GET':
        form = ArticleForm(request=request)
        return render(request, 'backend_add_article.html', {'form': form})
    elif request.method == 'POST':
        print(request.POST)
        form = ArticleForm(request=request, data=request.POST)
        if form.is_valid():

            with transaction.atomic():
                tags = form.cleaned_data.pop('tags')
                content = form.cleaned_data.pop('content')
                form.cleaned_data['blog_id'] = request.session['user_info'][
                    'blog__nid']
                obj = models.Article.objects.create(**form.cleaned_data)
                models.ArticleDetail.objects.create(content=content,
                                                    article=obj)
                tag_list = []
                for tag in tags:
                    tag = int(tag)
                    tag_list.append(
                        models.Article2Tag(article_id=obj.nid, tag_id=tag))
                models.Article2Tag.objects.bulk_create(tag_list)
            return redirect('/backend/article-0-0.html')
        else:
            return render(request, 'backend_add_article.html', {'form': form})
    else:
        return redirect('/')
コード例 #3
0
ファイル: user.py プロジェクト: aurorazl/BBS-Blog
def add_article(request):
    """
    添加文章
    :param request:
    :return:
    """
    if request.method == 'GET':
        obj = ArticleForm(request=request)
        return render(request, 'backend_add_article.html', {'form': obj})
    elif request.method == 'POST':
        form = ArticleForm(request=request, data=request.POST)
        if form.is_valid():
            with transaction.atomic():
                tags = form.cleaned_data.pop('tags')
                detail = form.cleaned_data.pop('detail')
                detail = XSSFilter().process(detail)
                a_obj = models.ArticleContent.objects.create(content=detail)
                form.cleaned_data['detail_id'] = a_obj.nid
                form.cleaned_data['author_id'] = request.session['user_info'][
                    'nid']
                obj = models.Article.objects.create(**form.cleaned_data)
                tag_list = []
                for tag_id in tags:
                    tag_id = int(tag_id)
                    tag_list.append(
                        models.Article2Tag(article_id=obj.nid, tag_id=tag_id))
                models.Article2Tag.objects.bulk_create(tag_list)
            return redirect('/backend/article-0-0.html')
        else:
            return render(request, 'backend_add_article.html', {'form': form})
    else:
        return redirect('/')
コード例 #4
0
ファイル: user.py プロジェクト: YANGYANGMING/Blog
def add_article(request):
    """
   添加文章
   :param request:
   :return:
   """
    if request.method == 'GET':
        form = ArticleForm(request=request)
        return render(request, 'backend_add_article.html', {'form': form})
    elif request.method == 'POST':
        form = ArticleForm(request=request, data=request.POST)
        if form.is_valid():
            with transaction.atomic():  #在执行上下文里面的内容时候时,遇到错误执行回滚操作,类似mysql回滚函数
                tags = form.cleaned_data.pop('tags')
                content = form.cleaned_data.pop('content')
                content = XSSFilter().process(content)
                form.cleaned_data['blog_id'] = request.session['user_info'][
                    'blog__nid']
                obj = models.Article.objects.create(**form.cleaned_data)
                models.Article_Detail.objects.create(content=content,
                                                     article=obj)
                tag_list = []
                for tag_id in tags:
                    tag_id = int(tag_id)
                    tag_list.append(
                        models.Article2Tag(article_id=obj.nid, tag_id=tag_id))
                models.Article2Tag.objects.bulk_create(tag_list)

            return redirect('/backend/article-0-0.html')
        else:
            return render(request, 'backend_add_article.html', {'form': form})
    else:
        return redirect('/')
コード例 #5
0
ファイル: user.py プロジェクト: ScorchHu/blog
def article_create(request):
    if request.method == 'GET':
        form = ArticleForm(request=request)
        return render(request, 'backend_article_create.html', {'form': form})
    elif request.method == 'POST':
        form = ArticleForm(request=request, data=request.POST)
        if form.is_valid():
            with transaction.atomic():  # 事务操作,方便出错回滚
                tags = form.cleaned_data.pop('tags')  # 只能选数据库本身有的tag,不能直接存进去
                # 把提交过来的content去除掉,因为models字段里面没有
                content = form.cleaned_data.pop('content')
                # 理论上content应该加一个防止XSS攻击
                form.cleaned_data['blog_id'] = request.session['user_info']['blog__nid']
                # print(form.cleaned_data)
                obj = models.Article.objects.create(**form.cleaned_data)
                models.ArticleDetail.objects.create(
                    content=content, article=obj)
                tag_list = []
                for tag_id in tags:  # 文章分类是多选
                    tag_id = int(tag_id)
                    tag_list.append(
                        models.Article2Tag(
                            article_id=obj.nid,
                            tag_id=tag_id))
                models.Article2Tag.objects.bulk_create(tag_list)  # 批量插入数据

            return redirect('/backend/backend_article-0-0.html')
        else:
            return render(
                request, 'backend_article_create.html', {
                    'form': form})
    else:
        return redirect('/')
コード例 #6
0
ファイル: views.py プロジェクト: Brucehaha/ExceptionAsE
def edit_article(request, article_id, *args, **kwargs):
    """
    eidit arthcle
    :param request:
    :return:
    """
    blog_id = request.session.get('user_info')['blog__nid']
    if blog_id:
        if request.method == 'GET':
            obj = models.Article.objects.filter(nid=article_id,
                                                blog_id=blog_id).first()
            tag_list = models.Article2Tag.objects.filter(
                article=obj).values_list('tag_id')
            if tag_list:
                tags = list(zip(*tag_list))[0]
            else:
                tags = ()
            data = {
                'title': obj.title,
                'summary': obj.summary,
                'content': obj.articledetail.content,
                'category_id': obj.category_id,
                'type_id': obj.type_id,
                'tags': tags,
            }
            instance = form.ArticleForm(request=request, data=data)

            return render(request, 'backend/edit_article.html',
                          {'form': instance})
        elif request.method == 'POST':
            # stop modify other one's article like edit-article-1.hml change to edit-article-2.hml
            obj = models.Article.objects.filter(nid=article_id,
                                                blog_id=blog_id).first()
            if not obj:
                return redirect('/login.html')
            instance = form.ArticleForm(request=request, data=request.POST)
            if instance.is_valid():
                content = instance.cleaned_data.pop('content')
                tags = instance.cleaned_data.pop('tags')
                print(tags)
                try:
                    with transaction.atomic():
                        models.Article.objects.filter(nid=obj.nid).update(
                            **instance.cleaned_data)
                        models.ArticleDetail.objects.filter(
                            article=obj).update(content=content)
                        models.Article2Tag.objects.filter(article=obj).delete()
                        tag_list = []
                        for x in tags:
                            tag_id = int(x)
                            tag_list.append(
                                models.Article2Tag(article_id=obj.nid,
                                                   tag_id=x))
                        # tag_list = map(lambda x: models.Article2Tag(article=obj, tag_id=x), tags)
                        models.Article2Tag.objects.bulk_create(list(tag_list))
                except Exception as e:
                    return HttpResponse(e)
                return redirect('/backend/index.html')
    else:
        return redirect('/login.html')
コード例 #7
0
ファイル: user.py プロジェクト: yigeshazi/First
def add_article(request):
    """
    添加文章
    :param request:
    :return:
    """
    if request.method == 'GET':
        form = ArticleForm(request=request)
        return render(request, 'backend_add_article.html', {'form': form})
    elif request.method == 'POST':
        form = ArticleForm(request=request, data=request.POST)
        if form.is_valid():
            with transaction.atomic():
                tags = form.cleaned_data.pop('tags') # 移出 tags需要在第三张Article2Tag表上手动添加
                content = form.cleaned_data.pop('content')# 移出 content需要在表ArticleDetail上手动添加、关联Article
                content = XSSFilter().process(content) # 对content进行数据过滤  过滤掉script等标签
                form.cleaned_data['blog_id'] = request.session['user_info']['blog__nid']# 把博客id添加到cleande_data中
                # dict格式cleaned_data 包含的字段{ 'blog_id' 'article_type' 'category_id'  'summary'  'title'  }
                obj = models.Article.objects.create(**form.cleaned_data) # Article表添加cleaned_data里的内容
                models.ArticleDetail.objects.create(content=content, article=obj) # ArticleDetail添加数据、关联
                tag_list = []
                for tag_id in tags:
                    tag_id = int(tag_id)
                    tag_list.append(models.Article2Tag(article_id=obj.nid, tag_id=tag_id))
                models.Article2Tag.objects.bulk_create(tag_list)

            return redirect('/backend/article-0-0.html')
        else:
            return render(request, 'backend_add_article.html', {'form': form})
    else:
        return redirect('/')
コード例 #8
0
def edit_article(request, nid):
    """
    编辑文章
    :param request:
    :return:
    """
    blog_id = request.session['user_info']['blog__nid']
    if request.method == 'GET':
        obj = models.Article.objects.filter(nid=nid, blog_id=blog_id).first()
        if not obj:
            return render(request, 'backend_no_article.html')
        tags = obj.tags.values_list('nid')
        if tags:
            tags = list(zip(*tags))[0]
        init_dict = {
            'nid': obj.nid,
            'title': obj.title,
            'summary': obj.summary,
            'category_id': obj.category_id,
            'article_type_id': obj.article_type_id,
            'content': obj.articledetail.content,
            'tags': tags
        }
        form = ArticleForm(request=request, data=init_dict)
        return render(request, 'backend_edit_article.html', {
            'form': form,
            'nid': nid
        })
    elif request.method == 'POST':
        form = ArticleForm(request=request, data=request.POST)
        if form.is_valid():
            obj = models.Article.objects.filter(nid=nid,
                                                blog_id=blog_id).first()
            if not obj:
                return render(request, 'backend_no_article.html')
            with transaction.atomic():
                content = form.cleaned_data.pop('content')
                content = XSSFilter().process(content)
                tags = form.cleaned_data.pop('tags')
                models.Article.objects.filter(nid=obj.nid).update(
                    **form.cleaned_data)
                models.ArticleDetail.objects.filter(article=obj).update(
                    content=content)
                models.Article2Tag.objects.filter(article=obj).delete()
                tag_list = []
                for tag_id in tags:
                    tag_id = int(tag_id)
                    tag_list.append(
                        models.Article2Tag(article_id=obj.nid, tag_id=tag_id))
                models.Article2Tag.objects.bulk_create(tag_list)
            return redirect('/backend/article-0-0.html')
        else:
            print(form.errors)
            return render(request, 'backend_edit_article.html', {
                'form': form,
                'nid': nid
            })
コード例 #9
0
ファイル: user.py プロジェクト: ScorchHu/blog
def article_edit(request, nid):
    blog_id = request.session['user_info']['blog__nid']
    if request.method == 'GET':
        article_obj = models.Article.objects.filter(
            nid=nid, blog_id=blog_id).first()
        content_dict = models.ArticleDetail.objects.filter(
            article=article_obj).values('content').first()
        tag_id = article_obj.tags.values_list('nid')
        print(tag_id)
        if tag_id:
            tag_id = list(zip(*tag_id))[0]
        print(tag_id)
        condition = {
            'nid': article_obj.nid,
            'title': article_obj.title,
            'summary': article_obj.summary,
            'content': content_dict['content'],
            'article_type_id': article_obj.article_type_id,
            'category_id': article_obj.category_id,
            'tags': tag_id
        }
        form = ArticleForm(request=request, data=condition)
        return render(
            request, 'backend_article_edit.html', {
                'form': form, 'nid': nid})

    elif request.method == 'POST':
        form = ArticleForm(request=request, data=request.POST)
        if form.is_valid():
            obj = models.Article.objects.filter(
                nid=nid, blog_id=blog_id).first()
            with transaction.atomic():  # 事务操作,方便出错回滚
                tags = form.cleaned_data.pop('tags')  # 只能选数据库本身有的tag,不能直接存进去
                # 把提交过来的content去除掉,因为models字段里面没有
                content = form.cleaned_data.pop('content')
                # 理论上content应该加一个防止XSS攻击
                models.Article.objects.filter(
                    nid=obj.nid).update(
                    **form.cleaned_data)
                models.ArticleDetail.objects.filter(
                    article=obj).update(content=content)
                models.Article2Tag.objects.filter(article=obj).delete()
                tag_list = []
                for tag_id in tags:  # 文章分类是多选
                    tag_id = int(tag_id)
                    tag_list.append(
                        models.Article2Tag(
                            article_id=obj.nid,
                            tag_id=tag_id))
                models.Article2Tag.objects.bulk_create(tag_list)  # 批量插入数据
            return redirect('/backend/backend_article-0-0.html')
        else:
            return render(
                request, 'backend_article_edit.html', {
                    'form': form, 'nid': nid})
    else:
        return redirect('/')
コード例 #10
0
ファイル: user.py プロジェクト: aurorazl/BBS-Blog
def edit_article(request, article_id):
    """
    编辑文章
    :param request:
    :return:
    """
    blog_id = request.session['user_info']['blog__nid']
    if request.method == 'GET':
        o = models.Article.objects.filter(nid=article_id,
                                          blog_id=blog_id).first()
        if not o:
            return render(request, 'backend_no_article.html')
        tags = o.tags.values_list('nid')
        if tags:
            tags = list(zip(*tags))[0]
        init_dict = {
            'title': o.title,
            'content': o.content,
            'category_id': o.category_id,
            'tags': tags,
            'detail': o.detail.content
        }
        obj = ArticleForm(request=request, initial=init_dict)
        return render(request, 'backend_edit_article.html', {
            'form': obj,
            'article_id': article_id
        })
    elif request.method == 'POST':
        form = ArticleForm(request=request, data=request.POST)
        if form.is_valid():
            obj = models.Article.objects.filter(nid=article_id,
                                                blog_id=blog_id).first()
            with transaction.atomic():
                detail = form.cleaned_data.pop('detail')
                detail = XSSFilter().process(detail)
                tags = form.cleaned_data.pop('tags')
                models.Article.objects.filter(nid=article_id).update(
                    **form.cleaned_data)
                models.ArticleContent.objects.filter(article=obj).update(
                    content=detail)
                models.Article2Tag.objects.filter(article=obj).delete()
                tag_list = []
                for tag_id in tags:
                    tag_id = int(tag_id)
                    tag_list.append(
                        models.Article2Tag(article_id=obj.nid, tag_id=tag_id))
                models.Article2Tag.objects.bulk_create(tag_list)
            return redirect('/backend/article-0-0.html')
        else:
            return render(request, 'backend_edit_article.html', {
                'form': form,
                'nid': article_id
            })
コード例 #11
0
ファイル: article_op.py プロジェクト: viking-h/Django-blog
def add_article(request, site):
    """
    添加文章
    :param request: 请求
    :param site: 博主
    :return:
    """
    # 从数据库中获取博客以及属于博客的分类,标签列表
    blog = models.Blog.objects.filter(site=site).select_related('user').first()
    #category_list = models.Category.objects.filter(blog=blog)
    #tag_list = models.Tag.objects.filter(blog=blog)
    if request.method == 'GET':
        article_form = ArticleForm(request=request)
        return render(request, 'web_home/add_article.html', {
            'article_form': article_form,
            'blog': blog,
        })
    else:
        #print(request.POST)
        article_form = ArticleForm(request=request, data=request.POST)
        if article_form.is_valid():
            # 获取验证后的数据
            article_post = article_form.cleaned_data
            #print(article_post)
            tags = article_post.pop('tags')
            #category_title = article_post.pop('category')
            article_body = article_post.pop('body')
            # 过滤掉白名单之外的标签
            #article_body = XSSFilter().process(article_body)
            #print(article_type_id)
            # 在文章表中添加文章记录
            article = models.Article.objects.create(blog=blog, **article_post)
            # 文章内容表与文章表是一对一的关系
            models.ArticleDetail.objects.create(content=article_body,
                                                article=article)
            tag_list = []
            for tag_id in tags:
                tag_id = int(tag_id)
                tag_list.append(
                    models.Article2Tag(article=article, tag_id=tag_id))
            models.Article2Tag.objects.bulk_create(tag_list)
            return redirect('web:user_blog', site)

        else:
            print(article_form.errors)
            return render(request, 'web_home/add_article.html', {
                "article_form": article_form,
                'blog': blog,
            })
コード例 #12
0
def add_article(request):
    """
    添加文章
    :param request:
    :return:
    """
    username = request.session.get("username", None)  # 获取session中的用户名
    user_obj = models.UserInfo.objects.filter(
        username=username).select_related("blog").first()  # 获取用户对象
    if request.method == "GET":
        article_form = ArticleForm(request=request)
        return render(request, 'backend_add_article.html', {
            "user_obj": user_obj,
            "article_form": article_form,
        })
    elif request.method == "POST":
        article_form = ArticleForm(request=request, data=request.POST)
        if article_form.is_valid():
            with transaction.atomic():  # 开启事务
                top_list = article_form.cleaned_data.pop("top")  # 获取高级选项列表
                top_bool = int(top_list[0]) if top_list else 0  # 获取是否选中置顶
                obj = models.Article(
                    title=article_form.cleaned_data.pop("title"),  # 文章标题
                    summary=article_form.cleaned_data.pop("summary"),  # 文章简介
                    blog_id=user_obj.blog.nid,  # 博客ID
                    category_id=article_form.cleaned_data.pop(
                        "category_id"),  # 分类ID
                    article_type_id=article_form.cleaned_data.pop(
                        "article_type_id"),  # 类型ID
                    top=top_bool  # 是否置顶
                )
                obj.save()  # 创建文章对象
                content = XSSFilter().process(
                    article_form.cleaned_data.pop("content"))  # 获取过滤好的文章内容
                models.ArticleDetail.objects.create(content=content,
                                                    article_id=obj.nid)
                tags = article_form.cleaned_data.pop("tags")  # 获取用户选择的标签ID
                tag_list = []  # 存储标签对象
                for tag_id in tags:  # 循环所有标签ID,生成标签对象并存入列表
                    tag_id = int(tag_id)
                    tag_list.append(
                        models.Article2Tag(article_id=obj.nid, tag_id=tag_id))
                models.Article2Tag.objects.bulk_create(tag_list)  # 批量创建标签对象
            return redirect("/backend/article-0-0.html")
        else:
            return render(request, 'backend_add_article.html', {
                "user_obj": user_obj,
                "article_form": article_form,
            })
コード例 #13
0
ファイル: views.py プロジェクト: Brucehaha/ExceptionAsE
def add_article(request, *args, **kwargs):
    """
    create new article
    :param request:
    :param args: reqquest data, session
    :param kwargs:
    :return:
    """
    if request.method == "GET":
        form_obj = form.ArticleForm(request=request)
        return render(request, 'backend/add_article.html', {'form': form_obj})
    elif request.method == "POST":
        user_info = request.session.get('user_info')
        if user_info:
            blog_id = user_info['blog__nid']
            form_obj = form.ArticleForm(request=request, data=request.POST)
            if form_obj.is_valid():
                try:
                    with transaction.atomic():
                        tags_id = form_obj.cleaned_data.pop('tags')
                        content = form_obj.cleaned_data.pop('content')
                        form_obj.cleaned_data['blog_id'] = blog_id
                        article_obj = models.Article.objects.create(
                            **form_obj.cleaned_data)
                        models.ArticleDetail.objects.create(
                            content=content, article=article_obj)
                        tag_list = list(
                            map(
                                lambda x: models.Article2Tag(
                                    tag_id=int(x), article=article_obj),
                                tags_id))
                        models.Article2Tag.objects.bulk_create(tag_list)
                except Exception as e:
                    # return render(request, 'backend/add-article.html', {'form': form_obj})
                    print(e)
                    return HttpResponse("Created Failed")
            else:
                return render(request, 'backend/add_article.html',
                              {'form': form_obj})
            return redirect("/backend/index.html")
        else:
            return redirect("/account/login.html")
コード例 #14
0
ファイル: user.py プロジェクト: CharlesQQ/Python_Data_Analyse
def add_article(request):
    """
    添加文章
    :param request:
    :return:
    """
    if request.method == 'GET':
        form = ArticleForm(request=request)
        return render(request, 'backend_add_article.html', {'form': form})
    elif request.method == 'POST':
        form = ArticleForm(request=request, data=request.POST)
        if form.is_valid():

            with transaction.atomic():
                tags = form.cleaned_data.pop('tags')
                content = form.cleaned_data.pop('content')
                print(content)
                content = XSSFilter().process(
                    content
                )  #每一个用户请求到来的时候,都需要实例化这个类,而这个实例化的对象每次都一样,为了节省内存,使用单例模式
                form.cleaned_data['blog_id'] = request.session['user_info'][
                    'blog__nid']
                obj = models.Article.objects.create(**form.cleaned_data)
                models.ArticleDetail.objects.create(content=content,
                                                    article=obj)
                tag_list = []
                for tag_id in tags:
                    tag_id = int(tag_id)
                    tag_list.append(
                        models.Article2Tag(article_id=obj.nid, tag_id=tag_id))
                models.Article2Tag.objects.bulk_create(tag_list)

            return redirect('/backend/article-0-0.html')
        else:
            return render(request, 'backend_add_article.html', {'form': form})
    else:
        return redirect('/')
コード例 #15
0
ファイル: user.py プロジェクト: haishiniu/blog_min
def add_article(request):
    '''
    增添文章
    :param request:
    :return:
    '''
    if request.method == 'GET':
        upload_avatar = request.session.get('user_info')['avatar']
        print(request)  # <WSGIRequest: GET '/backend/add-article.html'>
        print(request.session['user_info'])
        form = ArticleForm(request=request)
        return render(
            request,
            'backend_add_article.html',
            {
                'form': form,
                'upload_avatar': upload_avatar
            },
        )
    elif request.method == 'POST':
        upload_avatar = request.session.get('user_info')['avatar']
        print('heool')
        print(request.POST)
        form = ArticleForm(request, request.POST)
        if form.is_valid():
            print('你好')
            print(form.cleaned_data)
            tags = form.cleaned_data.pop('tags')
            print(type(tags[0]))  # <class 'str'>
            print(type(tags))  # <class 'list'>
            content = form.cleaned_data.pop('content')
            form.cleaned_data['blog_id'] = request.session['user_info'][
                'blog__nid']
            obj = models.Article.objects.create(**form.cleaned_data)
            models.ArticleDetail.objects.create(content=content, article=obj)
            tag_list = []
            for tag_id in tags:
                # 将 标签表中的字符串类型转化成数字类型
                tag_id = int(tag_id)
                tag_list.append(
                    models.Article2Tag(article_id=obj.nid, tag_id=tag_id))
            print('表亲列表')
            print(
                tag_list
            )  #[<Article2Tag: Article2Tag object>, <Article2Tag: Article2Tag object>]
            # for i in tag_list:
            #     print(i.article.title,i.tag.title) # 阿打算 HTML ;阿打算 HTML

            # def bulk_create(self, objs, batch_size=None):
            #     # 批量插入
            #     # batch_size表示一次插入的个数
            #     objs = [
            #         models.DDD(name='r11'),
            #         models.DDD(name='r22')
            #     ]
            #     models.DDD.objects.bulk_create(objs, 10)
            models.Article2Tag.objects.bulk_create(tag_list)

            return redirect('/backend/article-0-0.html')
        else:
            return render(request, 'backend_add_article.html', {
                'form': form,
                'upload_avatar': upload_avatar
            })

    else:
        return redirect('/')
コード例 #16
0
ファイル: user.py プロジェクト: haishiniu/blog_min
def edit_article(request, nid):
    '''
    编辑文章
    :param request:
    :param nid:
    :return:
    '''
    blog_id = request.session['user_info']['blog__nid']
    if request.method == 'GET':
        obj = models.Article.objects.filter(nid=nid, blog_id=blog_id).first()
        # print(type(obj)) #<class 'django.db.models.query.QuerySet'>,此时是没有first()
        print(type(obj))  # <class 'repository.models.Article'>,此时才是一个文章对象
        if not obj:
            return render(request, 'backend_no_article.html', {'obj': obj})

        tags = obj.tags.values_list('nid', 'title')
        print(tags)  # <QuerySet [(1, 'HTML'), (2, '孤独者的python之路')]>
        if tags:
            tags = list(zip(*tags))[0]
            print(tags)  #(1, 2)

        init_dict = {
            'nid': obj.nid,
            'title': obj.title,
            'summary': obj.summary,
            'category_id': obj.category_id,
            'article_type_id': obj.article_type_id,
            'content': obj.articledetail.content,
            'tags': tags,
        }
        #  'content':obj.articledetail.content, 反跨的代表
        form = ArticleForm(request=request, data=init_dict)
        return render(request, 'backend_editor_article.html', {
            'form': form,
            'nid': nid
        })

    elif request.method == 'POST':
        form = ArticleForm(request, request.POST)
        if form.is_valid():
            obj = models.Article.objects.filter(nid=nid,
                                                blog_id=blog_id).first()
            if not obj:
                return render(
                    request,
                    'backend_no_article.html',
                )
            content = form.cleaned_data.pop('content')
            tags = form.cleaned_data.pop('tags')
            models.Article.objects.filter(nid=obj.nid).update(
                **form.cleaned_data)
            models.ArticleDetail.objects.filter(article=obj).update(
                content=content)
            models.Article2Tag.objects.filter(article=obj).delete()
            tag_list = []
            for tag_id in tags:
                tag_id = int(tag_id)
                tag_list.append(
                    models.Article2Tag(article_id=obj.nid, tag_id=tag_id))
            models.Article2Tag.objects.bulk_create(tag_list)
            return redirect('/backend/article-0-0.html')
        else:
            return render(request, 'backend_editor_article.html', {
                'form': form,
                'nid': nid
            })
コード例 #17
0
ファイル: views.py プロジェクト: lxj23626/Blog-System
def edit_article(request, aid):
    blog_id = request.session['userinfo']['blog__bid']

    if request.method == 'GET':
        article_obj = models.Article.objects.filter(blog_id=blog_id,
                                                    aid=aid).first()
        if not article_obj:
            return HttpResponse('not Found')
        article_tag = article_obj.tag.values_list('tid')  # <QuerySet [(2,)]>

        if article_tag:
            article_tag = list(zip(*article_tag))[0]

        try:
            content = article_obj.article_detail.content
        except Exception as e:
            return HttpResponse('not Found')

        init_dict = {
            'aid': article_obj.aid,
            'title': article_obj.title,
            'summary': article_obj.summary,
            'content': content,
            'article_type_id': article_obj.article_type_id,
            'tag': article_tag,
        }
        form = ArticleForm(request, data=init_dict)  # 把数据库的内容展现到get页面上
        # print(111,init_dict)

        return render(request, 'backend/edit_article.html', {
            'form': form,
            'aid': aid
        })

    elif request.method == 'POST':
        form = ArticleForm(request, data=request.POST)
        if form.is_valid():
            article_obj = models.Article.objects.filter(blog_id=blog_id,
                                                        aid=aid).first()
            if not article_obj:
                return HttpResponse('Not Found')
            with transaction.atomic():
                # print(222222,form.cleaned_data)
                content = form.cleaned_data.pop('content')
                content = XSSFilter().process(content)

                tag = form.cleaned_data.pop('tag')
                # print(777,tag)

                models.Article.objects.filter(aid=article_obj.aid).update(
                    **form.cleaned_data)
                models.Article_detail.objects.filter(
                    article=article_obj).update(content=content)

                models.Article2Tag.objects.filter(article=article_obj).delete()

                tag_list = []
                for tag_id in tag:
                    # tag_list.append(models.Article2Tag.objects.filter(article=article_obj, tag_id=int(tag_id)))    # [<QuerySet []>],不能用这个,被删了找不到了
                    tag_list.append(
                        models.Article2Tag(article=article_obj,
                                           tag_id=int(tag_id))
                    )  # [<Article2Tag: Article2Tag object>, <Article2Tag: Article2Tag object>]
                print(5555, tag_list)
                models.Article2Tag.objects.bulk_create(tag_list)

            return redirect('/backend/article-0-0.html')
        else:
            return render(request, 'backend/edit_article.html', {
                'form': form,
                'aid': aid
            })
コード例 #18
0
def edit_article(request, nid):
    """
    编辑文章
    :param request:
    :return:
    """
    username = request.session.get("username", None)  # 获取session中的用户名
    user_obj = models.UserInfo.objects.filter(
        username=username).select_related("blog").first()  # 获取用户对象
    if request.method == "GET":
        article_obj = models.Article.objects.filter(
            nid=nid, blog_id=user_obj.blog.nid).first()  # 获取文章对象
        if not article_obj:
            return render(request, 'backend_no_article.html')
        tags = article_obj.tags.values_list('nid')  # 获取文章对应标签
        if tags:
            tags = [i[0] for i in list(tags)]  # 将每一个标签ID放入列表中
        article_form = ArticleForm(
            request=request,
            initial={
                "title": article_obj.title,  # 文章标题
                "summary": article_obj.summary,  # 文章简介
                "content": article_obj.article_detail.content,  # 文章内容
                "article_type_id": article_obj.article_type_id,  # 文章类型ID
                "category_id": article_obj.category_id,  # 文章分类ID
                "tags": tags,  # [18, 25] 列表中每一个元素为标签ID,元组也可以
                "top": [int(article_obj.top)]  # 显示文章是否置顶
            })
        return render(
            request, 'backend_edit_article.html', {
                "user_obj": user_obj,
                "article_obj": article_obj,
                "article_form": article_form,
            })
    elif request.method == "POST":
        article_form = ArticleForm(request=request, data=request.POST)
        article_obj = models.Article.objects.filter(
            nid=nid, blog_id=user_obj.blog.nid).first()  # 获取文章对象
        if not article_obj:
            return render(request, 'backend_no_article.html')
        if article_form.is_valid():
            with transaction.atomic():
                top_list = article_form.cleaned_data.pop("top")  # 获取高级选项列表
                top_bool = int(top_list[0]) if top_list else 0  # 获取是否选中置顶
                content = XSSFilter().process(
                    article_form.cleaned_data.pop("content"))  # 获取过滤好的文章内容
                models.ArticleDetail.objects.filter(
                    article=article_obj).update(content=content)  # 更新文章内容
                models.Article.objects.filter(nid=article_obj.nid).update(
                    **{
                        "title":
                        article_form.cleaned_data.pop("title"),
                        "summary":
                        article_form.cleaned_data.pop("summary"),
                        "article_type_id":
                        article_form.cleaned_data.pop("article_type_id"),
                        "category_id":
                        article_form.cleaned_data.pop("category_id"),
                        "top":
                        top_bool
                    })  # 更新文章

                # 更新文章对应标签
                models.Article2Tag.objects.filter(
                    article=article_obj).delete()  # 首先删除原有的标签
                tags = article_form.cleaned_data.pop("tags")  # 获取用户选择的标签ID
                tag_list = []  # 存储标签对象
                for tag_id in tags:  # 循环所有标签ID,生成标签对象并存入列表
                    tag_id = int(tag_id)
                    tag_list.append(
                        models.Article2Tag(article_id=article_obj.nid,
                                           tag_id=tag_id))
                models.Article2Tag.objects.bulk_create(tag_list)  # 批量创建标签对象
            return redirect("/backend/article-0-0.html")
        else:
            return render(
                request, 'backend_edit_article.html', {
                    "user_obj": user_obj,
                    "article_obj": article_obj,
                    "article_form": article_form,
                })
コード例 #19
0
ファイル: article_op.py プロジェクト: viking-h/Django-blog
def edit_article(request, site, nid):
    """
    修改文章函数
    :param request:
    :param site:
    :param nid:
    :return:
    """
    blog = models.Blog.objects.get(site=site)
    if request.method == 'GET':
        article = models.Article.objects.get(nid=nid, blog=blog)
        if not article:
            return HttpResponse('没有这篇文章')
        tags = article.tags.values_list('nid')
        #print(tags)
        if tags:
            tags = list(zip(*tags))[0]
        init_article = {
            'title': article.title,
            'summary': article.summary,
            'body': article.articledetail.content,
            'article_type_id': article.article_type_id,
            'category_id': article.category_id,
            'tags': tags,
        }
        article_form = ArticleForm(request=request, data=init_article)
        return render(request, 'web_home/edit_article.html', {
            'article_form': article_form,
            'nid': article.nid,
            'blog': blog,
        })
    else:
        article_form = ArticleForm(request=request, data=request.POST)
        if article_form.is_valid():
            article_post = article_form.cleaned_data
            article = models.Article.objects.get(nid=nid, blog=blog)
            if not article:
                return HttpResponse('文章已经被删除')
            with transaction.atomic():
                body = article_post.pop('body')
                # 过滤掉白名单之外的标签
                #body = XSSFilter().process(body)
                tags = article_post.pop('tags')
                models.Article.objects.filter(nid=nid).update(**article_post)
                models.ArticleDetail.objects.filter(article=article).update(
                    content=body)
                models.Article2Tag.objects.filter(article=article).delete()
                tag_list = []
                for tag_id in tags:
                    tag_id = int(tag_id)
                    tag_list.append(
                        models.Article2Tag(article=article, tag_id=tag_id))
                print(tag_list)
                models.Article2Tag.objects.bulk_create(tag_list)
            return redirect('web_home:user_blog', site)
        else:
            return render(request, 'web_home/edit_article.html', {
                'article_form': article_form,
                'nid': nid,
                'blog': blog,
            })