- 点赞思路(以动态点赞为例)
10.1 在详细接口返回时,给点赞字段,返回两种状态,
True:点过赞,False:未登录/登录未点赞
10.2 前端点击时,把动态id传过来,后端提供一个点赞接口,
10.3 后端进行校验,
未点赞:给点赞表添加一条记录/动态表的数量+1。
点过赞:给点赞表删除一条记录/动态表的数量-1
- 基表
class BaseModel(models.Model):
is_show = models.BooleanField(verbose_name='展示', default=True)
is_delete = models.BooleanField(verbose_name='删除', default=False)
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
update_time = models.DateTimeField(verbose_name='更新时间', auto_now=True)
order = models.SmallIntegerField(verbose_name='排序', default=1)
class Meta:
# 抽象表
abstract = True
- 用户表
class UserInfo(BaseModel):
"""用户表"""
phone = models.CharField(verbose_name='手机号', max_length=11, unique=True)
token = models.CharField(verbose_name='token', max_length=225, blank=True, null=True)
bucket = models.CharField(verbose_name='桶', max_length=225, blank=True, null=True)
region = models.CharField(verbose_name='区域', max_length=32, default='ap-chengdu')
nickName = models.CharField(verbose_name='微信名称', max_length=225, default='梦')
avatar = models.CharField(verbose_name='头像', max_length=225,
default='19803630852-1645427981-1305448189.cos.ap-chengdu.myqcloud.com/l13c23ek1645803983515.png')
- Release
class Release(BaseModel):
"""发布"""
position = models.CharField(verbose_name='位置', max_length=225, blank=True, null=True)
content = models.CharField(verbose_name='内容', max_length=225)
# 这三个存数量,做一个优化
release_up = models.BigIntegerField(verbose_name='新闻点赞数量', default=0)
watch_num = models.BigIntegerField(verbose_name='观看人数数量', default=0)
release_num = models.BigIntegerField(verbose_name='评论数量', default=0)
# db_constraint=False db_constraint=False 逻辑上的关联,实质上没有外键联系,增删不会受外键影响,orm查询不影响
userinfo = models.ForeignKey(verbose_name='用户', to='UserInfo', on_delete=models.DO_NOTHING, db_constraint=False)
topic = models.ForeignKey(verbose_name='话题', to='Topic', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='topic_release')
# 图片链接拼接
@property
def cover_msg_url(self):
# 每一个对象走一遍
msg_url = self.media.all().filter(is_show=True, is_delete=False).first().cosUrl
# print(msg_url)
return msg_url
"""
v1: model进行处理
# 图片链接拼接
@property
def msg_url(self):
msg_url = self.media.all().filter(is_show=True, is_delete=False).values('cosUrl')
return msg_url
"""
- Media
class Media(BaseModel):
name = models.CharField(verbose_name='名称', max_length=225, blank=True, null=True)
choice_type = (
(1, "无"),
(2, "图片"),
(3, "视频"),
)
type = models.SmallIntegerField(verbose_name='类型', default=1)
cosUrl = models.CharField(verbose_name='路径', max_length=225, blank=True, null=True)
# db_constraint=False,
release = models.ForeignKey(verbose_name='发布', to='Release', related_name='media', on_delete=models.DO_NOTHING,
null=True, blank=True)
cosETag = models.CharField(verbose_name='校验信息', max_length=225, blank=True, null=True)
cos_media_name = models.CharField(verbose_name='cos图片名称,删除使用', max_length=225, default='1.png')
- Topic
class Topic(BaseModel):
"""话题"""
name = models.CharField(verbose_name='话题名称', max_length=225)
people_num = models.BigIntegerField(verbose_name='话题关注人数', default=0)
class Meta:
verbose_name = "话题"
verbose_name_plural = "话题"
- Comment
class Comment(BaseModel):
"""评论表"""
comment = models.CharField(verbose_name='评论内容', max_length=225, null=True, blank=True)
new = models.ForeignKey(verbose_name='发布', to='Release', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='comment_new')
userinfo = models.ForeignKey(verbose_name='用户', to='UserInfo', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='comment_userinfo')
reply = models.ForeignKey(verbose_name='父评论', to='self', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='comment_reply')
depth = models.PositiveIntegerField(verbose_name='评论深度', default=1)
root = models.PositiveIntegerField(verbose_name='父id', null=True, blank=True)
# 优化表中只存储点赞数量,记录在另一个表中
comment_up = models.BigIntegerField(verbose_name='评论点赞数量', default=0)
- WatchNum
class WatchNum(BaseModel):
"""浏览记录表,类似于多对多"""
userinfo = models.ForeignKey(verbose_name='用户', to='UserInfo', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='watch_num_userinfo')
new = models.ForeignKey(verbose_name='发布', to='Release', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='watch_num_new')
- ReleaseUp
class ReleaseUp(BaseModel):
"""动态点赞记录表,类似于多对多"""
userinfo = models.ForeignKey(verbose_name='用户', to='UserInfo', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='ReleaseUp_userinfo')
new = models.ForeignKey(verbose_name='发布', to='Release', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='ReleaseUp_new')
- CommentUp
class CommentUp(BaseModel):
"""评论点赞记录表,类似于多对多"""
userinfo = models.ForeignKey(verbose_name='用户', to='UserInfo', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='CommentUp_userinfo')
comments = models.ForeignKey(verbose_name='评论', to='Comment', on_delete=models.DO_NOTHING, db_constraint=False,
null=True, blank=True, related_name='CommentUp_new')
Original: https://blog.csdn.net/qq_52385631/article/details/123188298
Author: 骑台风走
Title: 动态消息表&评论表&点赞表
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/737708/
转载文章受原作者版权保护。转载请注明原作者出处!