当前位置: 首页 > wzjs >正文

高端网站开发如何推广网址

高端网站开发,如何推广网址,效果图网站排行榜前十名,怎么做门户网站设计方案Django 评论模块(前后端分离 点赞 收藏 评论计数) 一、功能概述 基于 Django DRF 设计的 评论模块,包含以下功能: 基本评论功能(用户可以对文章进行评论,并支持多级回复)评论点赞&#xf…

Django 评论模块(前后端分离 + 点赞 + 收藏 + 评论计数)


一、功能概述

基于 Django + DRF 设计的 评论模块,包含以下功能:

  • 基本评论功能(用户可以对文章进行评论,并支持多级回复)
  • 评论点赞(支持点赞/取消点赞)
  • 评论收藏(支持收藏/取消收藏)
  • 评论计数(统计文章的评论数量)
  • 嵌套评论(支持多级评论显示)

二、后端设计

(一)数据库模型(Models)

from django.db import models
from django.contrib.auth import get_user_modelUser = get_user_model()class Comment(models.Model):""" 评论模型 """user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='comments')  # 发表评论的用户content = models.TextField()  # 评论内容parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='replies')  # 父级评论(用于嵌套评论)post = models.ForeignKey('Post', on_delete=models.CASCADE, related_name='comments')  # 关联的文章likes = models.ManyToManyField(User, related_name='liked_comments', blank=True)  # 该评论的点赞用户favorites = models.ManyToManyField(User, related_name='favorited_comments', blank=True)  # 该评论的收藏用户created_at = models.DateTimeField(auto_now_add=True)  # 评论创建时间updated_at = models.DateTimeField(auto_now=True)  # 评论更新时间class Meta:ordering = ['-created_at']  # 按创建时间倒序排列def __str__(self):""" 返回评论的简要信息 """return f"{self.user.username} - {self.content[:20]}"def like_count(self):""" 计算该评论的点赞数 """return self.likes.count()def favorite_count(self):""" 计算该评论的收藏数 """return self.favorites.count()def reply_count(self):""" 计算该评论的回复数 """return self.replies.count()

注释说明

  • parent 用于存储嵌套评论,支持多级评论回复。
  • likes & favorites 使用 ManyToManyField 存储点赞和收藏的用户,便于统计。
  • like_count()favorite_count()reply_count() 用于动态统计点赞数、收藏数、回复数。

(二)序列化器(Serializers)

from rest_framework import serializers
from .models import Commentclass CommentSerializer(serializers.ModelSerializer):""" 评论序列化器 """user = serializers.StringRelatedField(read_only=True)  # 直接返回用户名replies = serializers.SerializerMethodField()  # 处理嵌套评论like_count = serializers.IntegerField(source='like_count', read_only=True)  # 点赞数量favorite_count = serializers.IntegerField(source='favorite_count', read_only=True)  # 收藏数量reply_count = serializers.IntegerField(source='reply_count', read_only=True)  # 回复数量class Meta:model = Commentfields = ['id', 'user', 'content', 'parent', 'post', 'created_at', 'like_count', 'favorite_count', 'reply_count', 'replies']def get_replies(self, obj):""" 递归获取所有子评论 """return CommentSerializer(obj.replies.all(), many=True).data

注释说明

  • user 只读,返回用户名,而不是 user_id
  • get_replies() 递归获取所有子评论,确保嵌套评论显示
  • like_countfavorite_countreply_count 提供动态字段,避免额外的数据库查询。

(三)视图(Views)

from rest_framework import viewsets, permissions, status
from rest_framework.response import Response
from rest_framework.decorators import action
from .models import Comment
from .serializers import CommentSerializerclass CommentViewSet(viewsets.ModelViewSet):""" 评论视图集 """queryset = Comment.objects.all()serializer_class = CommentSerializerpermission_classes = [permissions.IsAuthenticatedOrReadOnly]  # 仅认证用户可操作,游客可读def perform_create(self, serializer):""" 绑定当前用户为评论作者 """serializer.save(user=self.request.user)def get_queryset(self):""" 根据 `post_id` 过滤评论,仅获取一级评论 """post_id = self.request.query_params.get('post')if post_id:return Comment.objects.filter(post_id=post_id, parent=None)  # 仅获取顶级评论return Comment.objects.none()@action(detail=True, methods=['post'])def like(self, request, pk=None):""" 处理点赞和取消点赞 """comment = self.get_object()if request.user in comment.likes.all():comment.likes.remove(request.user)return Response({'message': '取消点赞'}, status=status.HTTP_200_OK)else:comment.likes.add(request.user)return Response({'message': '点赞成功'}, status=status.HTTP_200_OK)@action(detail=True, methods=['post'])def favorite(self, request, pk=None):""" 处理收藏和取消收藏 """comment = self.get_object()if request.user in comment.favorites.all():comment.favorites.remove(request.user)return Response({'message': '取消收藏'}, status=status.HTTP_200_OK)else:comment.favorites.add(request.user)return Response({'message': '收藏成功'}, status=status.HTTP_200_OK)@action(detail=False, methods=['get'])def comment_count(self, request):""" 获取文章的评论总数 """post_id = request.query_params.get('post')if post_id:count = Comment.objects.filter(post_id=post_id).count()return Response({'comment_count': count}, status=status.HTTP_200_OK)return Response({'message': '缺少 post 参数'}, status=status.HTTP_400_BAD_REQUEST)

注释说明

  • get_queryset() 仅返回顶级评论,避免多层嵌套数据造成性能问题。
  • like() & favorite() 处理点赞/收藏逻辑,防止重复点赞
  • comment_count() 统计当前文章下的评论数量,避免前端重复请求。

(四)路由(Urls)

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import CommentViewSetrouter = DefaultRouter()
router.register(r'comments', CommentViewSet)urlpatterns = [path('', include(router.urls)),
]

注释说明

  • 使用 DefaultRouter 自动生成 RESTful API 路由,减少手写代码量。

三、总结

  1. 后端

    • 设计 Comment 模型,支持多级评论点赞收藏
    • 通过 like_count()favorite_count() 动态统计点赞/收藏数
    • API 设计清晰,支持 like()favorite()comment_count() 接口化点赞/收藏/计数
  2. 前端

    • 提供接口 /api/comments/ 获取文章评论。
    • /api/comments/<id>/like/ & /api/comments/<id>/favorite/ 处理点赞/收藏操作。
    • /api/comments/comment_count/ 获取文章评论总数。

这套 Django DRF 评论系统灵活高效,并且结构清晰可扩展,适用于各种前后端分离项目! 🚀


文章转载自:

http://Fjc9ev7F.zdzgf.cn
http://gw699Oxn.zdzgf.cn
http://Knu8Gh9V.zdzgf.cn
http://uEmDIdo1.zdzgf.cn
http://G30AIlE9.zdzgf.cn
http://6a3Ed9Gq.zdzgf.cn
http://GgiKT8fJ.zdzgf.cn
http://PCnRZ2sG.zdzgf.cn
http://6uz9lZE7.zdzgf.cn
http://hkBEwXiN.zdzgf.cn
http://v2mA3WB0.zdzgf.cn
http://Nwryvyli.zdzgf.cn
http://A1E154VL.zdzgf.cn
http://EJ6Ki5b6.zdzgf.cn
http://oqn7xeST.zdzgf.cn
http://NRE271HF.zdzgf.cn
http://XBbVRbHk.zdzgf.cn
http://fhE3w6Gx.zdzgf.cn
http://ehMqDMAw.zdzgf.cn
http://3zXi9I5a.zdzgf.cn
http://aWiJohsT.zdzgf.cn
http://J8wDCoXV.zdzgf.cn
http://xk3uhP4V.zdzgf.cn
http://7Ti5onYw.zdzgf.cn
http://ZAfT2564.zdzgf.cn
http://PmbGt7DJ.zdzgf.cn
http://KvQYIMQC.zdzgf.cn
http://PjmJ0wgc.zdzgf.cn
http://0Gy1Zh0D.zdzgf.cn
http://8cFIYZ8X.zdzgf.cn
http://www.dtcms.com/wzjs/768457.html

相关文章:

  • 合肥制作网站单位有哪些手机优化
  • 无棣县建设局网站中文网页设计模板下载
  • 网站优化公司哪家好安卓app开发模板
  • 可以直接打开网站的方法dede调用网站名称
  • 太仓做网站的智能手机软件开发
  • 网站以什么名字备案重庆在线高校
  • 做网站怎样产生效益免费设计商标
  • 局域网站建设直播网站怎样建设
  • 网站建设和客户面谈制作网站程序
  • 海淀网站建设服务互联网公司的网络运营
  • 网站建设空间使用标准中国电力建设企业协会网站
  • 大学网站策划方案杭州网站建设机构
  • 古建设计网站长春网站制作专业
  • 同和网站建设呼伦贝尔网站设计
  • wap网站解析品牌建设的路径
  • 怎么使自己做的网站有音乐微信公众号文章编辑wordpress
  • 班级网站建设活动方案大理住房和城乡建设局网站
  • 永久免费的网站软件制作企业网站的秘诀
  • 建站之星免费如何在天气预报网站做引流
  • 蛋糕磨具网站开发背景微信公众平台注册要钱吗
  • 网站下载工具乐清app开发公司
  • 网站页面设计策划书wordpress套模板教程
  • 自己做电影网站需要的成本可以做app的软件
  • 响应式做的比较好的网站做网站的怎么学
  • 郑州知名做网站公司有哪些WordPress怎么自动发文章
  • 做酒店网站的公司wordpress菜单怎么设置中文
  • 网站建设 经济效益网站黄金比例
  • 一个公司网站开发多少钱wordpress连接微博设置密码
  • 网站模板html官方网站下载qq最新版
  • 网站建设表格的属性天津重型网站建设推荐