muguangrui

后台管理

主要功能:

1.文章的增删改查。

2.添加文章用到开源的kindediter编辑器。

页面效果:

 

 视图代码

@login_required
def cn_backend(request):
    article_list = models.Article.objects.filter(user=request.user).all()
    return render(request, \'blog/backend/backend.html\', {\'article_list\': article_list})


@login_required
def add_article(request):
    if request.method == \'POST\':
        title = request.POST.get(\'title\')
        content = request.POST.get(\'content\')
        soup = BeautifulSoup(content, \'html.parser\')
        desc = soup.text[0:150] + \'...\'
        models.Article.objects.create(title=title, content=content, desc=desc, user_id=request.user.pk)
        return redirect(reverse(\'blog:cn_backend\'))
    return render(request, \'blog/backend/add_article.html\')


@login_required
def upload(request):
    img_obj = request.FILES.get("upload_img")
    path = os.path.join(settings.MEDIA_ROOT, \'add_article_img\', img_obj.name)
    with open(path, \'wb\') as f:
        for line in img_obj:
            f.write(line)
    response = {
        \'error\': 0,
        \'url\': \'/blog/media/add_article_img/%s\' % img_obj.name
    }

    return JsonResponse(response)


@login_required
def edit_article(request, article_id):
    res = BaseResponse()
    article_obj = models.Article.objects.filter(pk=article_id).first()
    if not article_obj:
        res.code = 3001
        res.error = \'图书不存在!\'
        return JsonResponse(res.dict)
    if article_obj.user.pk != request.user.pk:
        res.code = 3002
        res.error = \'非法操作\'
        return JsonResponse(res.dict)
    if request.method == \'POST\':
        title = request.POST.get("title")
        content = request.POST.get("content")
        # 防止xss攻击,过滤script标签
        soup = BeautifulSoup(content, "html.parser")

        desc = soup.text[0:150] + "..."
        models.Article.objects.filter(pk=article_id).update(title=title, desc=desc, content=str(soup),
                                                            user=request.user)
        return redirect(reverse(\'blog:cn_backend\'))
    return render(request, \'blog/backend/change_article.html\', {\'article_obj\': article_obj})


@login_required
def del_article(request, article_id):
    res = BaseResponse()
    article_obj = models.Article.objects.filter(pk=article_id).first()
    if not article_obj:
        res.code = 3001
        res.error = \'图书不存在!\'
        return JsonResponse(res.dict)
    if article_obj.user.pk != request.user.pk:
        res.code = 3002
        res.error = \'非法操作\'
        return JsonResponse(res.dict)

    origin_url = reverse(\'blog:cn_backend\')
    if request.method == \'GET\':
        return render(request, \'blog/backend/delete.html\', {\'cancel\': origin_url})
    models.Article.objects.filter(pk=article_id).delete()
    return redirect(origin_url)

注意:

1.进入后台前需要登录,用Django自带的auth模块的装饰器login_required来实现。

2.添加文章,后台通过Bs4模块的BeautifulSoup来过滤非法字符串。

3.上转图片成功后,返回的字典要满足编辑器要求的格式。而且上传的文件夹要提前建立好。

 

分类:

技术点:

相关文章:

  • 2021-12-01
  • 2021-12-01
  • 2021-11-21
  • 2022-02-17
  • 2021-06-06
  • 2021-06-11
  • 2022-02-01
  • 2021-12-18
猜你喜欢
  • 2022-12-23
  • 2021-08-20
  • 2021-08-26
  • 2021-12-08
  • 2021-12-26
  • 2022-03-09
  • 2022-12-23
相关资源
相似解决方案