删除评论-前端页面 在Vue中,如果需要遍历某个数组,并且,在遍历时需要获取每个数组元素的下标,在遍历时,可以: v-for="(comment, index) in comments" 以上代码中的comment...修改评论-前端页面 在评论列表中,每个评论都有一个专属的表单用于修改评论,默认全部是收起的,当点击“编辑”时,会将其展开,再次点击,会收起!...接下来,在表单控件中设置默认值,使得展开时即显示原来的评论正文: 然后,为文本域控件分配ID,便于后续获取文本域中填写的评论正文: 最后,还需要为表单绑定提交事件的响应函数: 在answers.js...中,添加新的函数,先测试使用: 在已经获取到commentId和content的基础上,添加$.ajax()处理即可: 如果修改成功后,需要将表单收起,可以在发表成功后添加(因为此前已经为表单区域绑定了...如果开发较难的版本,可以添加规则“每个问题只能采纳1个答案,并且,一旦采纳,所有人将不允许添加答案或评论,也不允许对现有的答案或评论进行编辑、删除”。 83.
删掉原来用于占位的 HTML 评论表单代码,即下面这段代码: method="post" class="comment-form"> 错误信息保存到 errors 中,模板便将错误信息渲染显示。...显示评论内容 在 detail 视图函数我们获取了全部评论数据,并通过 comment_list 传递给了模板。...和处理 index 页面的文章列表方式是一样的,我们在模板中通过 {% for %} 模板标签来循环显示文章对应的全部评论内容。...在下方评论区留言。 将问题的详细描述通过邮件发送到 djangostudyteam@163.com,一般会在 24 小时内回复。 在 Pythonzhcn 社区的新手问答版块 发布帖子。
可以在评论区进行补充 ----- Swagge 写接口文档通常是一件比较头疼的事情,然而swagger就用是用来帮我们解决这个问题的。可以在线生成接口文档,并且可以在页面上进行测试。...= "每页显示的数量 范围在1~100") @Range(min = 1, max = 100, message = "每页显示的数量输入有误") private Integer size...假如查询第1页每页显示10条记录,前端传递过来的参数是current=1&&size=10,这个时候limit 1,10没有问题。...异常信息抛出 -> ControllerAdvice 进行捕获格式化输出内容 手动抛出CustomException并传入ReulstEnum ——> 进行捕获错误信息输出错误信息。...注意的点 所有手动抛出的错误信息,都应在错误信息枚举ResultEnum进行统一维护。不同的业务使用不同的错误码。方便在报错时进行分辨。快速定位问题。
根据这些信息,在 comments 表中创建一个新条目。 检索评论 为了展示评论和它们的回复,你可以采用递归查询或者在应用层处理嵌套。...一种方法是,在检索帖子的评论时,首先获取所有一级评论(parent_id 为 NULL 或 0),然后对每个一级评论,检索其子评论。...前端展示 展示评论 使用 Vue3,你可以构建一个递归组件来展示评论和它们的回复。这个组件应该能够显示一个评论,并检查是否有回复。如果有,就为每个回复再次调用自己。...提交评论 提供一个表单让用户写评论。如果是回复某个评论,确保能够捕捉到被回复的 comment_id 作为 parent_id 发送到后端。...,还是一级评论的回复的回复): 每个一级评论下之展示喜欢数最多的前两个回复,更多回复需要调获取子评论的接口(/child_comment): https://www.zhihu.com/api/v4/comment_v5
但是,本次查询应该另创建VO类用于封装查询结果,因为后续显示回答时,每个“回答”还可以存在若干个“评论”,则在“回答”的数据中,应该存在List评论>的属性,由于当前还没有开发“评论”,所以,暂时无法设计这个属性...comment)方法插入评论数据,获取返回的受影响行数 // 判断返回值是否不为1 // 是:抛出InsertException // 返回Comment对象 } 具体实现:...添加评论-前端页面 目前,每个”回答“下方都有”添加评论“按钮,但是,不同的”添加评论“按钮是会互相影响的,是因为: 修改为: 然后,修改评论的表单,以保证可以提交请求,且提交请求时可以获取评论内容...显示评论列表-持久层 (a)规划需要执行的SQL语句 应该在查询”回答“列表时,就一并查出每个”回答“对应的若干条”评论“!...显示评论列表-前端页面 首先,需要调整的是”显示回答列表“中的评论数量: 然后,遍历”回答“中的”评论列表“: 经过以上调整后,显示每个”回答“时,都会尝试显示该”回答“匹配的”评论列表“,即读取answer
❝可以在评论区进行补充 ❞ ---- Swagger 写接口文档通常是一件比较头疼的事情,然而swagger就用是用来帮我们解决这个问题的。可以在线生成接口文档,并且可以在页面上进行测试。 ?...= 1, message = "页码输入有误") private Integer current; /** * 每页显示的数量 */...@ApiModelProperty(value = "每页显示的数量 范围在1~100") @Range(min = 1, max = 100, message = "每页显示的数量输入有误...异常信息抛出 -> ControllerAdvice 进行捕获格式化输出内容 手动抛出CustomException并传入ReulstEnum ——> 进行捕获错误信息输出错误信息。...注意的点 所有手动抛出的错误信息,都应在错误信息枚举ResultEnum进行统一维护。不同的业务使用不同的错误码。方便在报错时进行分辨。快速定位问题。
如果通过表单提交的数据存在错误,那么我们把错误信息返回给用户,并在前端重新渲染,并要求用户根据错误信息修正表单中不符合格式的数据,再重新提交。...删掉原来用于占位的 HTML 评论表单代码,即下面这段代码: method="post" class="comment-form"> 错误信息保存到 errors 中,模板便将错误信息渲染显示。...显示评论内容 在 detail 视图函数我们获取了全部评论数据,并通过 comment_list 传递给了模板。...和处理 index 页面的文章列表方式是一样的,我们在模板中通过 {% for %} 模板标签来循环显示文章对应的全部评论内容。
注意这里注册的是 CommentsConfig 类,在 博客从“裸奔”到“有皮肤”[1] 中曾经讲过如何对应用做一些初始化配置,例如让 blog 应用在 django 的 admin 后台显示中文名字。...email 的格式,然后将格式错误信息保存到 errors 中,模板便将错误信息渲染显示。...因为视图函数 comment 中的表单实例是绑定了用户提交的评论数据,以及对数据进行过合法性校验的表单,因此当 django 渲染这个表单时,会连带渲染用户已经填写的表单数据以及数据不合法的错误提示信息...例如下图,我们提交的数据中 email 格式不合法,表单校验了数据格式,然后渲染错误提示: 绑定 URL 视图函数需要和 URL 绑定,这里我们在 comment 应用中再建一个 urls.py 文件...请修改表单中的错误后重新提交。', extra_tags='danger') 发送的消息被缓存在 cookie 中,然后我们在模板中获取显示即可。
数据基类 由于评论必须和文章关联,因此我们首先来写一个数据基类,用于初始化生成文章数据,其它测试类继承这个数据基类,从而不用在每个测试类里都写一遍创建文章数据的代码了。...__str__(), '评论者: 评论内容') 测试视图函数 我们只有一个发表评论的视图函数,根据视图函数的逻辑,需要测试以下几点: 只处理 POST 请求,其它请求将返回 405 Method Not...如果提交的评论内容有错误(例如 email 格式不正确),将渲染 preview.html 预览页面,并且预览页面显示评论出错的消息提醒和评论表单中包含的错误。...这个测试用例中,我们构造了一个缺失评论内容、评论人名字且邮箱格式不正确的数据,然后将其提交了评论。接着就是对预期结果的断言。这里关键的一点是,渲染的预览页面应该包含提示用户的表单错误。...测试模板标签 上一篇中介绍过模板标签的测试方法。
这些内容相对比较固定,且在各个页面都会显示,如果像文章列表或者文章详情一样,从视图函数中获取然后传递给模板,则每个页面对应的视图函数里都要写一段获取这些内容的代码,这会导致很多重复代码。...之后我们在表单的内部类 Meta 里指定一些和表单相关的东西。model = Comment 表明这个表单对应的数据库模型是 Comment 类。...删掉原来用于占位的 HTML 评论表单代码,即下面这段代码: method="post" class="comment-form"> 错误信息保存到 errors 中,模板便将错误信息渲染显示。...12.7.显示评论内容 在 detail 视图函数我们获取了全部评论数据,并通过 comment_list 传递给了模板。
$table->integer('user_id'); //这条评论是哪一位用户发送的?...因为我要告诉你资源路由可以用 ['onlu'=>'操作'] 让其只支持一种操作:) 在文章详情页面下方增加一个表单 show.blade.php method="POST" action="...', 'user_id', 'blog_id' ]; 展示评论 首先我们需要确定 Blog 和 Comment 的关系 => Blog 1:n Comment “一篇博客有多个评论” 我们来绑定他们的关系...一旦表单提交的数据不符合 Request@rules Laravel会自动帮我们生成一个叫 $errors 的数组,它存放着所有的错误信息, 我们在视图上通过判断它是否有 content 字段来判断是否是表单提交的评论有问题...,然后修改文本域的样式并且在下方用一个小的提示span显示错误提示信息 错误提示信息显示的是“内容 怎么怎么样...”
可以在评论区进行补充,我把 Spring Boot 相关的文章整理成了 PDF,关注 Java后端,后台回复 666 下载这本 Java技术栈手册。...Integer current; @ApiModelProperty(value = "每页显示的数量 范围在1~100") @Range(min = 1, max = 100...假如查询第1页每页显示10条记录,前端传递过来的参数是current=1&&size=10,这个时候limit 1,10没有问题。...异常信息抛出 -> ControllerAdvice 进行捕获格式化输出内容 手动抛出CustomException并传入ReulstEnum ——> 进行捕获错误信息输出错误信息。...注意的点 所有手动抛出的错误信息,都应在错误信息枚举ResultEnum进行统一维护。不同的业务使用不同的错误码。方便在报错时进行分辨。快速定位问题。
,用户既可以对帖子执行喜欢操作,也可以对评论执行喜欢操作,这样的情况下该怎么处理呢?...$post = App\Post::find(1); foreach ($post->likes as $like) { // } 访问一个喜欢的帖子或者评论 $like = App\Like...::find(1); $likeable = $like->likeable; 上面的例子中,返回的likeable会根据该记录的类型返回帖子或者评论。...更新父模型的时间戳 假设场景如下,我们为一个帖子增加了一个新的评论,我们希望这个时候帖子的更新时间会相应的改变,这种行为在Eloquent中是非常容易实现的。...,帖子的updated_at字段也会被更新 $comment = App\Comment::find(1); $comment->text = 'Edit to this comment!'
后台开发 后台需要通过代码生成器针对留言表生成对应的pojo,mapper,mapper.xml,controller增加2个方法,一个添加留言,一个查看留言列表(分页显示) controoller fatherCommentId...和 toUserId 主要针对的是评论功能,这里是把留言和评论设计在一张表里了 @PostMapping("/saveComment") public JSONResult saveComment...) @Override public PagedResult getAllComments(String videoId, Integer page, Integer pageSize)...* * @return comment - 评论内容 */ public String getComment() { return comment...; } /** * 设置评论内容 * * @param comment 评论内容 */ public void setComment(String
= "每页显示的数量 范围在1~100") @Range(min = 1, max = 100, message = "每页显示的数量输入有误") private Integer size...注意的点 PageVo在实例化的时候需要设置当前页 和每页显示的数量 可以调用setCurrentAndSize()完成。 进行分页查询的时候,需要计算偏移量。...假如查询第1页每页显示10条记录,前端传递过来的参数是current=1&&size=10,这个时候limit 1,10没有问题。...异常信息抛出 -> ControllerAdvice 进行捕获格式化输出内容 手动抛出CustomException并传入ReulstEnum ——> 进行捕获错误信息输出错误信息。...注意的点 所有手动抛出的错误信息,都应在错误信息枚举ResultEnum进行统一维护。不同的业务使用不同的错误码。方便在报错时进行分辨。快速定位问题。
XSS通常可以分为两大类: 存储型XSS,主要出现在让用户输入数据,供其他浏览此页的用户进行查看的地方,包括留言、评论、博客日志和各类表单等。...应用程序从数据库中查询数据,在页面中显示出来,攻击者在相关页面输入恶意的脚本数据后,用户浏览此类页面时就可能受到攻击。...举例:' OR '1'='1 这是最常见的 SQL注入攻击,当我们输如用户名 admin ,然后密码输如' OR '1'=1='1的时候,我们在查询用户名和密码是否正确的时候,本来要执行的是SELECT...(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了......) 上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。...Hash加密cookie中csrf_token值 这可能是最简单的解决方案了,因为攻击者不能获得第三方的Cookie(理论上),所以表单中的数据也就构造失败了。
层 关于评论的 Dao 层接口定义在 CommentMapper 中。...表现层 评论与回复是在哪里显示的呢?帖子的详情页里面,对吧。 一篇帖子的详情页需要哪些东西呢?我们来看看 ?...封装评论的分页信息,这里就显示出我们分页模型的强大了,一套代码随处用,不了解的各位强烈推荐回看上篇文章 Echo 的帖子列表与分页是怎么做的 ?...封装评论的相关信息,这里为了各位看的清楚,我把回复相关的信息暂时去掉了: ? 在评论的相关信息里面封装回复的相关信息: ? 这样,帖子详情页前端所需要的所有信息,我们已准备就绪。...:该帖的点赞数量 4)likeStatus:当前登录用户对该帖的点赞状态 5)replyCount:每个评论对应的回复数量 6)comments:该贴的所有评论及其相关信息 comment:评论(包含内容
也就是说用户不用刷新帖子,只要帖子有新的评论就会自动推送到用户端,这里Facebook使用的便是每天在全球有超过20亿设备在使用的WebSocket技术。 我是南哥,一个Java学习与进阶的领路人。...⭐⭐⭐本文收录在《Java学习/进阶/面试指南》:https://github/JavaSouth 1....` INT DEFAULT NULL, -- 如果是回复,则指向原始评论ID `post_id` INT NOT NULL, -- 被评论的帖子或内容...); 1.2 评论数据存储 抖音每天产生视频几百万、上千万,每个视频的评论高的甚至有上万条评论,要怎么样的数据查询设计才能支持每天亿级的评论?...当然这还没完,MySQL数据库和Elasticsearch的点赞量需要去同步更新,我们设置定时任务每个一段时间完成数据同步任务。
第 3 步:类似这样的表格将显示在您的屏幕上。输入您选择的名称和描述。在重定向 uri框中输入http://localhost:8080 申请表格 第四步:输入详细信息后,点击“创建应用程序”。...有 2 种类型的 praw 实例: 只读实例:使用只读实例,我们只能抓取 Reddit 上公开的信息。例如,从特定的 Reddit 子版块中检索排名前 5 的帖子。...posts_dict["Total Comments"].append(post.num_comments) # 每个帖子的 URL posts_dict["Post URL"].append...为了提取评论,我们将在提交对象上使用 for 循环。所有评论都会添加到 post_comments 列表中。...我们还将在 for 循环中添加一个 if 语句来检查任何评论是否具有 more comments 的对象类型。如果是这样,则意味着我们的帖子有更多可用评论。因此,我们也将这些评论添加到我们的列表中。
django的评论库是一个站点,所以需要添加sites的应用并设置当前django工程的站点id=1 记得在urls.py添加django_comments的路由设置,url中加入如下代码: url(...接着,修改前端页面显示评论列表和评论提交表单。...变量得到的评论加载即可。 而评论提交表单,最主要的是提交的url和表单字段。...id="comment_form" class="form-horizontal" action="{% comment_form_target %}" method...只有后台运行出错,才会返回error错误。