博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BBS(仿博客园系统)项目05(后台管理功能实现:文章添加、富文本编辑器使用、xss攻击、BeautifulSoup4模块、富文本编辑器上传图片、修改头像)...
阅读量:6296 次
发布时间:2019-06-22

本文共 4797 字,大约阅读时间需要 15 分钟。

摘要

  • 布局框架搭建
  • 随笔添加
  • 后台管理富文本编辑器KindEditor
  • xss攻击
  • 文章简介的截取,BeautifulSoup4模块
  • 富文本编辑器上传图片
  • 头像修改

一、后台管理框架布局搭建

 后台管理布局框架分析:导航条、左侧功能区、右侧主要功能显示和实现区

实现:

导航条:使用bootstrap模板:JavaScript>>导航条

左侧:使用bootstrap模板:组件>>列表组

右侧:使用bootstrap模板:JavaScript>>标签页

新建后台管理路由(注意放在站点路由上面)

url(r'^backend/', views.backend),

views.py视图函数:

@login_requireddef backend(request):    user_obj = request.user    article_list = models.Article.objects.filter(blog=user_obj.blog)    return render(request, 'backend/backend.html', locals())

渲染后台管理页面(单独在templates文件夹下创建后台管理文件夹backend,然后在此文件夹下新建backend.html)

    
后台管理
{% block css %} {% endblock %}{#后台管理导航条#}
{# 博客园后台管理#}{##}{#
  • {
    { request.user.blog.blog_title }}
  • #}{#
  • {
    { request.user.username }}
  • #}
    {# 后台管理左侧快捷入口占用2个栅格#} {# 左侧信息展示:需要参数:tag_list category_list date_list user_obj#}
    {# 后台管理右侧管理主要内容展示区占用10个栅格#} {# 右侧文章列表需要参数:article_list#}
    {% block content %}
    {% for article in article_list %}
    {% endfor %}
    标题 发布时间 评论数 点赞数 操作 操作
    { { article.title }} { { article.create_time|date:'Y-m-d' }} { { article.comment_num }} { { article.up_num }} 编辑 删除
    ...
    ...
    ...
    {% endblock %}
    {% block js %}{% endblock %}

    大致效果:

    二、添加新随笔

     先来一顿操作:

    建路由:

    url(r'^add_article/', views.add_article),

    渲染页面:继承后台管理主页面

    {% extends 'backend/backend.html' %}{% block css %}    {% endblock %}{% block content %}

    添加随笔

    标题

    视图函数:

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

    然后就可以在上面的基础上继续进行:

    富文本编辑器KindEditor的使用

    下载该插件后,解压,将其文件夹复制到static文件夹下

     

    使用KindEditor需要借助textarea输入框,所以需要在添加随笔处添加一个textarea框

    BeautifulSoup4模块

    ①表单在提交后,后端需要对文章进行截取一部分作为文章的摘要desc,如果直接对提交的内容content进行切片的话得不到文章的文字内容,因为我们通过富文本编辑器提交的内容实际上都是一行行html代码,同时如果这段代码中存在js脚本的话,有可能会存在xss脚本攻击,这里就需要对随笔内容进行过滤

    ②先参考一下博客园处理xss攻击的方式:

    在HTML源码编辑器中写入<script>alert(123)</script>,更新后再打开

    可以看出博客园的内部将此段代码给加了代码,让js脚本没法生效,同时将随笔保存再看发现这段代码被认为删除了。

    所以:

    博客园处理xss攻击方法:将敏感标签自动添加内容,让其失效,在后端处理时直接过滤掉敏感标签,将其删除。

    引入一个模块BeautifulSoup4:可以过滤js脚本和拿到content内的文本内容,再进行切分。

    先安装模块pip3 install beautifulsoup4# 这里强调一点:一定要下官方推荐的beautifulsoup4版本,因为beautifulsoup3版本已经停止开发

     

    富文本编辑器上传图片

    通过富文本编辑器上传图片需要再开一个路由进行处理上传的图片

    url(r'^upload_img/', views.upload_img),

     视图函数upload_img:

    def upload_img(request):    if request.method == 'POST':        # 前端富文本编辑器上传的图片key值叫imgFile,拿到文件对象        img_obj = request.FILES.get('imgFile')        print(img_obj.name,type(img_obj.name))        # 手动拼接文件存放路径,该文件应该存入media文件夹        path = os.path.join(settings.BASE_DIR, 'media', 'article_img')        # 判断当前路径是否存在,如果不不存在,则创建文件夹        if not os.path.exists(path):            os.mkdir(path)        # 可以通过img_obj.name,拿到这个文件对象的文件名,然后在拼接文件的路径,用于保存写入        file_path = os.path.join(path, img_obj.name)        with open(file_path, 'wb') as f:            for line in img_obj:                f.write(line)        # 这里需要注意富文本编辑器上传图片接收的响应数据格式规定是以下这种形式:        """            //成功时            {                    "error" : 0,                    "url" : "http://www.example.com/path/to/file.ext"            }            //失败时            {                    "error" : 1,                    "message" : "错误信息"            }        """        back_dic = {            'error': 0,            # 这个url就是前端可以通过路由直接访问到的文件路径,这样做的目的是编辑上传一个图片,编辑器肯定需要            # 拿到该图片渲染到页面上。            'url': '/media/article_img/%s' % img_obj.name        }        return JsonResponse(back_dic)

    三、修改头像:

     

    转载于:https://www.cnblogs.com/suguangti/p/11079961.html

    你可能感兴趣的文章
    OEA 中 WPF 树型表格虚拟化设计方案
    查看>>
    Android程序开发初级教程(一) 开始 Hello Android
    查看>>
    使用Gradle打RPM包
    查看>>
    “我意识到”的意义
    查看>>
    淘宝天猫上新辅助工具-新品填表
    查看>>
    再学 GDI+[43]: 文本输出 - 获取已安装的字体列表
    查看>>
    nginx反向代理
    查看>>
    操作系统真实的虚拟内存是什么样的(一)
    查看>>
    hadoop、hbase、zookeeper集群搭建
    查看>>
    python中一切皆对象------类的基础(五)
    查看>>
    modprobe
    查看>>
    android中用ExpandableListView实现三级扩展列表
    查看>>
    %Error opening tftp://255.255.255.255/cisconet.cfg
    查看>>
    java读取excel、txt 文件内容,传到、显示到另一个页面的文本框里面。
    查看>>
    《从零开始学Swift》学习笔记(Day 51)——扩展构造函数
    查看>>
    python多线程队列安全
    查看>>
    [汇编语言学习笔记][第四章第一个程序的编写]
    查看>>
    android 打开各种文件(setDataAndType)转:
    查看>>
    补交:最最原始的第一次作业(当时没有选上课,所以不知道)
    查看>>
    Vue实例初始化的选项配置对象详解
    查看>>