评论功能实现

本文介绍了使用Java Spring实现文章评论功能的过程,包括业务分析、表结构设计、模型建立和功能实现。评论功能涵盖一级评论和二级评论的分页展示,支持按照热度或时间排序,同时考虑了评论回复的逻辑规则。
摘要由CSDN通过智能技术生成

9.8 评论功能实现整理
这里以实现文章页面的评论列表为例

一、业务分析

模拟B站评论业务

1.1 业务逻辑

  • 当访问某篇文章的时候,尝试获取该文章的评论列表。
  • 按照文章评论配置(这些配置单独一张表,与文章一对一关系),进行分页展示相应的一级评论和二级评论。
  • 对于一级评论,点击显示更多评论,显示该评论下的所有二级评论,并进行分页展示。
  • 一级评论和二级评论均可根据文章配置按照热度或创建时间进行排序

1.2 实现思路

  • 为评论添加一个父id指向父评论,添加一个回复id指向回复评论。
  • 评论一共分为两层,分别为一级评论和二级评论。
  • 一级评论的父id约定为0,二级评论的父评论指向一级评论。
  • 回复id是针对于某一个以及评论下的二级评论之间进行的信息回复。

1.3 规则分析

  1. 一级评论父id都为0L
  2. 二级评论必须有父id,且不能为0L
  3. 二级评论不能回复其他父id下的二级评论
  4. 一级评论不能回复其他评论,其他评论也不能回复一级评论

二、表结构

2.1 comment

在这里插入图片描述
在这里插入图片描述

2.2 comment_settings

在这里插入图片描述
在这里插入图片描述

三、模型建立

使用Spring Data Jpa与数据库交互

3.1 Comment

Comment 模型内部维护User、回复User、子评论列表

@Entity
@Table(name = "comment")
public class Comment
{
   
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private Long articleId;

    private Long userId;

    private Long replayUserId;

    private Long parentId;

    private Integer likeNum = 0;
    
    private String content;
    
    @Column(updatable = false)
    private Long createdAt;
    
    @Transient
    private User user;

    @Transient
    private User replayUser;

    @Transient
    private List<Comment> childrenComment;

3.2 CommentSettings

CommentSettings内部维护了文章配置信息

@Entity
@Table(name = "comment_settings")
public class CommentSettings
{
   
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private Long articleId;

    @Convert(converter = SettingsInfoConverter.class)
    private SettingsInfo settings;
}

3.3 SettingsInfo

public class SettingsInfo
{
   
    private Byte requiredSignin = 0;

    private Byte requiredReply = 0;
}

四、功能实现

评论功能主要有保存和列表展

  • 13
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
要在Django中实现评论功能,一般需要以下步骤: 1. 创建Comment模型并与其他模型进行关联,例如某篇文章的评论。 2. 编写CommentForm表单,用于接收用户提交的评论内容。 3. 在视图函数中处理表单数据,验证并保存评论到数据库。 4. 在模板中展示评论列表和评论表单。 下面是一个简单的实现过程: 1. 创建Comment模型 ```python from django.db import models from django.contrib.auth.models import User class Comment(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) content = models.TextField() created_time = models.DateTimeField(auto_now_add=True) article = models.ForeignKey('Article', on_delete=models.CASCADE) def __str__(self): return self.content ``` 2. 编写CommentForm表单 ```python from django import forms class CommentForm(forms.Form): content = forms.CharField(widget=forms.Textarea) ``` 3. 编写视图函数 ```python from django.shortcuts import render, get_object_or_404, redirect from .models import Article, Comment from .forms import CommentForm def article_detail(request, pk): article = get_object_or_404(Article, pk=pk) comments = Comment.objects.filter(article=article) if request.method == 'POST': form = CommentForm(request.POST) if form.is_valid(): comment = form.save(commit=False) comment.user = request.user comment.article = article comment.save() return redirect('article_detail', pk=article.pk) else: form = CommentForm() return render(request, 'article_detail.html', {'article': article, 'comments': comments, 'form': form}) ``` 4. 在模板中展示评论列表和评论表单 ```html {% extends 'base.html' %} {% block content %} <h1>{{ article.title }}</h1> <p>{{ article.content }}</p> <h2>Comments</h2> <ul> {% for comment in comments %} <li>{{ comment.content }}</li> {% empty %} <li>No comments yet.</li> {% endfor %} </ul> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Submit</button> </form> {% endblock %} ``` 以上是一个简单的评论功能实现过程,需要根据具体情况进行调整和完善。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值