临时评论样式渲染

提交评论
评论框里面的内容会清空 然后页面会有一个临时评论样式出现 页面刷新才会出现评论楼样式 研究子评论特性
每个评论右侧都应该有回复按钮 点击就可以填写子评论
点击回复按钮具体动作:评论框中自动添加@+评论的人名并换行 聚焦
如何区分不同的回复按钮所对应的用户名
利用标签可以自定义属性直接携带对应的评论用户名即可 提交根评论和子评论点击的是同一个按钮 两者的区别与联系是什么
其实根评论和子评论的唯一区别就是是否有父评论的主键值
如何区分不同的回复按钮所对应的评论主键值
利用标签可以自定义属性直接携带对应的评论主键值即可 点击回复按钮发送子评论 页面不刷新的情况下 后续的评论全部成了子评论
原因是全局变量parentId没有清空导致的 每次提交评论都应该清空一下 针对子评论内中的@用户名换行 理论上不属于用户评论的内容 不应该记录到数据库
前端可以剔除 也可以在后端剔除 针对子评论的渲染 应该动态判断是否是子评论 如果是应该加上评论的目标用户名 ps:针对评论的渲染也可以分页 也可以做根评论与子评论的集合操作(分类)

提交评论之后,动态渲染:

1.评论框内容清空。

2.页面没有刷新,出现临时评论样式。

3.页面刷新之后,才会出现评论楼样式。

获取用户评论:

清空textarea:



临时渲染评论楼:

提前获取用户名以及该用户的评论。(使用模板语法)

使用js模板字符串。

查找ul标签,将html代码(评论楼)添加到指定的位置:

优化,span标签添加评论图标:

文章子评论业务逻辑

研究子评论特性:

每个评论右侧都应该有回复按钮 点击之后可以填写子评论

点击回复按钮具体动作:

1.评论框内自动添加@符号

2.自动出现根评论用户名字

3.自动换行

4.自动聚焦

评论删除,仅仅文章作者可以删除评论,删除接口。(加分点)

添加回复、引用按钮:

回复按钮不能加Id要加class:

回复按钮绑定点击事件:

点击不同回复按钮渲染的人名不一样,一个回复按钮都对应一个用户:

如何区分不同的回复按钮所对应的用户名?

标签除了可以有默认属性,还可以有自定义属性,给标签添加自定义属性:

查看f12:

由于每个按钮的属性中,就包含用户名信息,所以直接获取即可:

添加@和换行符:

自动聚焦:

支持一次性回复多个:

在拿到评论框原内容的基础上追加。

根评论的按钮和子评论使用的是一个按钮。

这个按钮的点击事件如何补充?如何区分?

根评论与子评论的唯一区别:是否有父评论主键值。

需要修改ajax提交的数据,添加新的数据:父评论主键值。

给回复按钮添加属性:父评论主键值

获取回复按钮所在的评论主键值:

回复按钮点击事件的获取的某个数据

需要在提交按钮点击事件中使用

不同的函数需要用到相同的东西----> 全局变量

提前创建全局变量:

修改全局变量:

在点击回复按钮时,修改全局变量的值。

后端:

parent_id是null也没有关系。

问题:

点击回复按钮发送子评论 页面不刷新的情况下 后续的评论全部成了子评论

先发送一条子评论之后,再发送根评论,结果发现还是子评论。因为在页面没有刷新的情况下,全局变量还是子评论的。

所以需要提交评论之后,清空全局变量。

点击提交按钮后,清空全局变量:

针对子评论中@:

在发送评论之前,对子评论内容进行筛选,需要处理掉@前缀,不要让数据库存放这个额外的内容:(前端后端都可以做这个筛选操作):

前端:

slice方法:

前端具体操作:不建议在前端做这个操作。

后端具体操作:

这里推荐在后端进行切割字符串。

针对子评论的渲染 应该动态判断是否为子评论 子评论应该动态加上@符号和根评论用户名。

模板语法:

现在根据子评论我们只能获取父评论的主键,而我们需要的是父评论的用户名:需要使用跨表查询。

现在由于我们在前端切割了,所有前端动态渲染时会把@给省略。

让子评论展示在根评论的下面:(优化加分项)

需要在后端构建json格式大字典。

后台管理页面搭建

1.模仿博客园后台访问直接展示所有文章
2.后台管理页面需要多次被当做模板页面使用 如果该页面也是继承其他页面那么无法二次被继承使用 所以我们单独编写一个后台管理的模板页面

后台管理接口:

记得加登录装饰器:

小技巧:templates html文件越来越多。

对html文件进行分类:

开设后台管理html文件目录。

研究博客园后台管理:

后台管理前端页面:

继承homePage.html:

需要从后端获取site_obj。

重写母板content部分:

复制bootstrap侧边栏样式:

修改样式:

效果:

标签页:

标签页对应关系:

四个div对应四个页面。

注意id的对应关系:

后端获取当前站点下所有的文章。

前端文章展示:

模板语法渲染数据:

文章添加链接:

添加分页器:

后端传入page_queryset:

前端代码:

后台管理页面模板创建

自己写后台管理的页面,然后进行继承。(不继承home_page)

后台管理页面母板:

内容区域与home_page有所不同。

申明block区域:

模板:

子板更换标签页的数据。

添加文章页面搭建

1.页面简易搭建
2.文章内容区富文本编辑器的使用
课下可以自行查找更多的富文本编辑器使用
3.添加文章需要注意的问题
文章简介不应该有标签存在
文章内容不允许编辑script脚本(XSS攻击) 涉及到html相关内容的处理 可以借助于爬虫相关模块
bs4

添加文章接口,点击左边侧边栏,右边主体部分(标签页部分)修改:

后端:

添加文章页面前端:

存为草稿功能:给文章加一个字段 未发布0 已发布1

需要文章分类、文章标签,后端获取:

form表单:

完整代码:

效果:

富文本编辑器

前端使用别人写好的组件:kindeditor(最友好)

官网:http://kindeditor.net/docs/usage.html

研究kindeditor官方文档:

拷贝kindeditor到静态文件。

引入文件:

研究官方代码:

这个红色框是textarea的Id值。

将我们的textarea的id值给这个create,查看效果:

编辑器初始化参数:

在create括号里面添加字典,字典里面添加额外的参数:

添加items:

给文本框添加小功能。resizetype:



禁止拖动修改,文本框大小:

themetype:

修改富文本框的样式。

前端代码:

切换编辑器:

editor编辑器

添加文章初步实现

后端处理post请求:



文章简介获取:



局部截取文章内容。

文章表添加文章数据:

操作第三张表(标签),注意我们使用的是半自动:

可能一次性将表中添加多个数据:

从tag_list获取tag的id值:

添加成功跳转到后台:

添加文章:

添加文章功能优化

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

1.文章简介出现标签:

文章简介不应该有标签出现。

由于我们这里截取是直接截取的:

2.在添加文章时添加脚本

这个现象称为xss攻击(跨站脚本攻击)。

所有应该把内容中的script标签全部删掉,或者不允许用户写script脚本。

方法一:写正则

1.筛选掉所有的标签

2.匹配到script标签将其删掉

beautifulsoup模块基本使用

方法二:使用beautifulsoup(推荐)

下载bs4模块 该模块作用是解析页面内容。

pip install bs4

基本使用:

传入html产生soup对象。



需要下载lxml解析器:pip install lxml比较强大

获取标签内的属性:

BBS项目(四):临时评论渲染 文章子评论功能 后台管理页面搭建 添加文章页面搭建的更多相关文章

  1. GitHub Vue项目推荐|Vue+Element实现的电商后台管理系统功能丰富

    GitHub Vue项目推荐|mall-admin-web是一个电商后台管理系统的前端项目基于Vue+Element实现 主要包括商品管理.订单管理.会员管理.促销管理.运营管理.内容管理.统计报表. ...

  2. BBS项目(一)

    目录 BBS项目(一) 项目开发流程 BBS项目 BBS表分析 自关联 表关系图示 BBS项目(一) 项目开发流程 项目分类 针对互联网用户:抖音,淘宝····· 针对公司内部:后台管理系统··· 针 ...

  3. BBS项目分布搭建四(点赞点踩及评论功能准备)

    BBS项目分布搭建四(点赞点踩及评论功能) 1. 点赞点踩样式准备 # 在base.html文件中 head标签内 添加css模块: {% block css %} {% endblock %} # ...

  4. BBS项目分布搭建五(评论相关功能实现)

    BBS项目分布搭建五(评论相关) 1. 根评论逻辑实现 # 在models.py文件中 修改: # 7. 评论表 parent = models.ForeignKey(to='self', null= ...

  5. BBS 项目(四)

    目录 BBS 项目(四) 首页布局 个人头像显示 个人站点路由设计 个人站点页面设计 base.html site.html 左侧过滤功能 404.html BBS 项目(四) 首页布局 <!D ...

  6. bbs项目实现点赞和评论的功能

    一.点赞功能 思路是这样的: 1.对点赞和踩都设置一个相同的class,然后对这个class绑定点击事件 2.点击触发ajax请求,我们对赞的标签设置了一个class属性,对踩的标签没有设置这个cla ...

  7. BBS项目知识点汇总

    目录 bbs项目知识点汇总 一. JavaScript 1 替换头像 2 form表单拿数据 3 form组件error信息渲染 4 添加html代码 5 聚焦操作 二 . html在线编辑器 三 . ...

  8. BBS项目 未完待续

    项目开发基本流程 1.需求分析 2.架构设计 3.分组开发 4.提交测试 5.交付上线 创建项目配置 环境配置 TEMPLATES = [ { 'BACKEND': 'django.template. ...

  9. 1月3日内容总结——bbs项目登陆页面和主页、个人站点页的搭建

    目录 一.登陆功能完善 验证码功能实现 单机验证码实现验证码刷新(局部刷新) 点击登陆提交数据进行校验 二.主页搭建 html代码 views.py代码 主页内容部分 后台添加数据 分页器 前端获取头 ...

  10. BBS项目

    一.需求分析 1.首页(显示文章) 文章详情 点赞,点踩 文章评论(子评论,评论的展示) 登录功能(图片验证码) 注册功能(基于form验证,ajax) 个人站点(不同人不同样式,文章过滤) 后台管理 ...

随机推荐

  1. JavaScript高级程序设计笔记03 语言基础

    语言基础 主要基于ES6. 一切都区分大小写.无论变量.函数名还是操作符 标识符 变量名.函数名.属性名.参数名 可由一个或多个字符组成: 第一个必须是字母._或者$: 其余的可以是字母._.$或者数 ...

  2. 海康单筒红外相机SDK调用方法

    目录 配置环境 1.准备文件 2.配置 3.路径 程序 1.错误警告 2.导入头文件: 3.修改SDK 配置环境 1.准备文件 通过VS创建空白项目后,将海康SDK文件夹: CH-HCNetSDKV6 ...

  3. Java——设计模式

    一.概述 设计模式是历代程序员总结出的经验 二.分类 创建型模式:简单工厂模式 工厂方法模式 单例模式:饿汉式(开发) 懒汉式(面试) 行为型模式 结构型模式 三.简单工厂模式 一个工厂中可以创建很多 ...

  4. 上传代码到github和删除.git

    在本地建立目录,将想上传的代码放到该文件夹中 git init ###初始化 git add . ###将本地项目工作区的所有文件添加到暂存区 git commit -m "excu&quo ...

  5. 文心一言 VS 讯飞星火 VS chatgpt (151)-- 算法导论12.2 7题

    七.用go语言,对于一棵有 n 个结点的二叉搜索树,有另一种方法来实现中序遍历,先调用 TREE-MINIMUM 找到这棵树中的最小元素,然后再调用 n-1 次的 TREE-SUCCESSOR.证明: ...

  6. raft算法的自我理解

    1.raft算法是什么? 答:共识算法 2.raft算法有什么用? 答:维持不同机器的强一致性 3.raft算法通过什么方式来维持不同机器的强一致性? 答:传递log日志 ,按照官方的说法日志里面包含 ...

  7. WordPress简码实现的一些常用的效果

    首先要确保框架里已经安装好element pro插件,下面是使用简码,来实现效果,在element中找到简码,并且在WordPress后台主题编辑器中,找到function.php文件, 显示产品的分 ...

  8. LIS(比动态规划更快的解法N*logN)

    以[1,3,8,17,5,14,10]为例,首先我们需要开设一个栈S保存,栈中的元素S[i]代表了以S[i]结尾的长度为i+1的最长上升子序列的最小取值(0<=i). 然后执行下列算法步骤: ( ...

  9. CatFly【汇编代码还原】

    CatFly[难度:1] 题目界面 下载附件,发现是dll文件,放到linux中运行一下,运行界面如图所示: 从上图中可以看到两处字符串,上面的字符串不断滚动,下方字符串在次数上不断累加,猜测上方字符 ...

  10. 架构与思维:如何应对Redis热Key?

    ★ Redis系列文章 Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模 ...