博客
关于我
强烈建议你试试无所不能的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

    你可能感兴趣的文章
    folders.cgi占用系统大量资源
    查看>>
    路由器ospf动态路由配置
    查看>>
    zabbix监控安装与配置
    查看>>
    python 异常
    查看>>
    last_insert_id()获取mysql最后一条记录ID
    查看>>
    可执行程序找不到lib库地址的处理方法
    查看>>
    bash数组
    查看>>
    Richard M. Stallman 给《自由开源软件本地化》写的前言
    查看>>
    oracle数据库密码过期报错
    查看>>
    修改mysql数据库的默认编码方式 .
    查看>>
    zip
    查看>>
    How to recover from root.sh on 11.2 Grid Infrastructure Failed
    查看>>
    rhel6下安装配置Squid过程
    查看>>
    《树莓派开发实战(第2版)》——1.1 选择树莓派型号
    查看>>
    在 Linux 下使用 fdisk 扩展分区容量
    查看>>
    结合AlphaGo算法和大数据的量化基本面分析法探讨
    查看>>
    如何在 Ubuntu Linux 16.04 LTS 中使用多个连接加速 apt-get/apt
    查看>>
    《OpenACC并行编程实战》—— 导读
    查看>>
    机器学习:用初等数学解读逻辑回归
    查看>>
    如何在 Ubuntu 中管理和使用逻辑卷管理 LVM
    查看>>