day75 bbs项目☞后台管理+修改头像

目录

一、后台管理之添加文章

添加文章有两个需要注意的问题:

  1. 文章的简介切取,应该想办法获取到当前文章的文本内容后再截取字符
  2. XSS攻击,由于我们支持用户上传html代码,但是如果用户在上传script标签时附带攻击的话就不太好,所以我们要对用户上传的script标签进行处理

以上两个步骤都可以通过beautifulsoup模块解决,这是一个专门用来处理html页面的模块,主要用于爬虫程序。

views.py

from bs4 import BeautifulSoup
def add_article(request):
    blog = request.user.blog
    category_list = models.Category.objects.filter(blog=blog)
    tag_list = models.Tag.objects.filter(blog = blog)
    if request.method == 'POST':
        title = request.POST.get('title')
        content = request.POST.get('content')
        category = request.POST.get('category')
        tag_list = request.POST.getlist('tag')
        # 把html代码放入生成一个对象
        soup = BeautifulSoup(content,'html.parser')
        # 获取html代码内所有的标签
        tags = soup.find_all()

        for tag in tags:
            if tag.name =='script':
                # 删除名字为script的标签
                tag.decompose()

        # 文章简介应该从content的html代码中先筛选出文字,再截取150个字符
        desc = soup.text[:150]
        article_obj = models.Article.objects.create(
            title=title,content=content,desc=desc,category_id=category,blog = blog,
        )
        article_tag_list = []
        for tag in tag_list:
            obj = models.Article2Tag(article=article_obj,tag_id= tag)
            article_tag_list.append(obj)
        models.Article2Tag.objects.bulk_create(article_tag_list)
        return redirect('/backend/')


    return render(request,'backend/add_article.html',locals())

kindeditor富文本编辑器

编辑器的用法直接查看百度文档

编辑器上传图片之类的看文档即可

// 导入编辑器js路径后
<script>
        KindEditor.ready(function(K) {
                    resizeType:1, // 控制标签只能修改高度
                    uploadJson : '/upload_image/',  // 提交文件上传的路径
                    extraFileUploadParams : {
                        'csrfmiddlewaretoken':'{{ csrf_token }}'
                }
                });
        });
</script>

二、修改用户头像

def set_avatar(request):
    back_dic={}
    if request.method == 'POST':
        # 必须通过这种方法如果是queryset对象使用update方法的话不会自动加avatar前缀
        avatar = request.FILES.get('file')
        request.user.avatar = avatar
        request.user.save()
    return JsonResponse(back_dic)
上一篇:django——bbs三


下一篇:BBs项目评论端口