BBS项目(四):临时评论渲染 文章子评论功能 后台管理页面搭建 添加文章页面搭建
临时评论样式渲染
提交评论
评论框里面的内容会清空 然后页面会有一个临时评论样式出现 页面刷新才会出现评论楼样式
研究子评论特性
每个评论右侧都应该有回复按钮 点击就可以填写子评论
点击回复按钮具体动作:评论框中自动添加@+评论的人名并换行 聚焦
如何区分不同的回复按钮所对应的用户名
利用标签可以自定义属性直接携带对应的评论用户名即可
提交根评论和子评论点击的是同一个按钮 两者的区别与联系是什么
其实根评论和子评论的唯一区别就是是否有父评论的主键值
如何区分不同的回复按钮所对应的评论主键值
利用标签可以自定义属性直接携带对应的评论主键值即可
点击回复按钮发送子评论 页面不刷新的情况下 后续的评论全部成了子评论
原因是全局变量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项目(四):临时评论渲染 文章子评论功能 后台管理页面搭建 添加文章页面搭建的更多相关文章
- GitHub Vue项目推荐|Vue+Element实现的电商后台管理系统功能丰富
GitHub Vue项目推荐|mall-admin-web是一个电商后台管理系统的前端项目基于Vue+Element实现 主要包括商品管理.订单管理.会员管理.促销管理.运营管理.内容管理.统计报表. ...
- BBS项目(一)
目录 BBS项目(一) 项目开发流程 BBS项目 BBS表分析 自关联 表关系图示 BBS项目(一) 项目开发流程 项目分类 针对互联网用户:抖音,淘宝····· 针对公司内部:后台管理系统··· 针 ...
- BBS项目分布搭建四(点赞点踩及评论功能准备)
BBS项目分布搭建四(点赞点踩及评论功能) 1. 点赞点踩样式准备 # 在base.html文件中 head标签内 添加css模块: {% block css %} {% endblock %} # ...
- BBS项目分布搭建五(评论相关功能实现)
BBS项目分布搭建五(评论相关) 1. 根评论逻辑实现 # 在models.py文件中 修改: # 7. 评论表 parent = models.ForeignKey(to='self', null= ...
- BBS 项目(四)
目录 BBS 项目(四) 首页布局 个人头像显示 个人站点路由设计 个人站点页面设计 base.html site.html 左侧过滤功能 404.html BBS 项目(四) 首页布局 <!D ...
- bbs项目实现点赞和评论的功能
一.点赞功能 思路是这样的: 1.对点赞和踩都设置一个相同的class,然后对这个class绑定点击事件 2.点击触发ajax请求,我们对赞的标签设置了一个class属性,对踩的标签没有设置这个cla ...
- BBS项目知识点汇总
目录 bbs项目知识点汇总 一. JavaScript 1 替换头像 2 form表单拿数据 3 form组件error信息渲染 4 添加html代码 5 聚焦操作 二 . html在线编辑器 三 . ...
- BBS项目 未完待续
项目开发基本流程 1.需求分析 2.架构设计 3.分组开发 4.提交测试 5.交付上线 创建项目配置 环境配置 TEMPLATES = [ { 'BACKEND': 'django.template. ...
- 1月3日内容总结——bbs项目登陆页面和主页、个人站点页的搭建
目录 一.登陆功能完善 验证码功能实现 单机验证码实现验证码刷新(局部刷新) 点击登陆提交数据进行校验 二.主页搭建 html代码 views.py代码 主页内容部分 后台添加数据 分页器 前端获取头 ...
- BBS项目
一.需求分析 1.首页(显示文章) 文章详情 点赞,点踩 文章评论(子评论,评论的展示) 登录功能(图片验证码) 注册功能(基于form验证,ajax) 个人站点(不同人不同样式,文章过滤) 后台管理 ...
随机推荐
- JavaScript高级程序设计笔记03 语言基础
语言基础 主要基于ES6. 一切都区分大小写.无论变量.函数名还是操作符 标识符 变量名.函数名.属性名.参数名 可由一个或多个字符组成: 第一个必须是字母._或者$: 其余的可以是字母._.$或者数 ...
- 海康单筒红外相机SDK调用方法
目录 配置环境 1.准备文件 2.配置 3.路径 程序 1.错误警告 2.导入头文件: 3.修改SDK 配置环境 1.准备文件 通过VS创建空白项目后,将海康SDK文件夹: CH-HCNetSDKV6 ...
- Java——设计模式
一.概述 设计模式是历代程序员总结出的经验 二.分类 创建型模式:简单工厂模式 工厂方法模式 单例模式:饿汉式(开发) 懒汉式(面试) 行为型模式 结构型模式 三.简单工厂模式 一个工厂中可以创建很多 ...
- 上传代码到github和删除.git
在本地建立目录,将想上传的代码放到该文件夹中 git init ###初始化 git add . ###将本地项目工作区的所有文件添加到暂存区 git commit -m "excu&quo ...
- 文心一言 VS 讯飞星火 VS chatgpt (151)-- 算法导论12.2 7题
七.用go语言,对于一棵有 n 个结点的二叉搜索树,有另一种方法来实现中序遍历,先调用 TREE-MINIMUM 找到这棵树中的最小元素,然后再调用 n-1 次的 TREE-SUCCESSOR.证明: ...
- raft算法的自我理解
1.raft算法是什么? 答:共识算法 2.raft算法有什么用? 答:维持不同机器的强一致性 3.raft算法通过什么方式来维持不同机器的强一致性? 答:传递log日志 ,按照官方的说法日志里面包含 ...
- WordPress简码实现的一些常用的效果
首先要确保框架里已经安装好element pro插件,下面是使用简码,来实现效果,在element中找到简码,并且在WordPress后台主题编辑器中,找到function.php文件, 显示产品的分 ...
- LIS(比动态规划更快的解法N*logN)
以[1,3,8,17,5,14,10]为例,首先我们需要开设一个栈S保存,栈中的元素S[i]代表了以S[i]结尾的长度为i+1的最长上升子序列的最小取值(0<=i). 然后执行下列算法步骤: ( ...
- CatFly【汇编代码还原】
CatFly[难度:1] 题目界面 下载附件,发现是dll文件,放到linux中运行一下,运行界面如图所示: 从上图中可以看到两处字符串,上面的字符串不断滚动,下方字符串在次数上不断累加,猜测上方字符 ...
- 架构与思维:如何应对Redis热Key?
★ Redis系列文章 Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模 ...