在没有互联网的年代,我们用日记来记录每天的心得体会。小的时候我有一个带锁的日记本,生怕被别人看见里面写了啥,钥匙藏得那叫一个绝。
现在时代变了,网络版的日记本:博客,却巴不得越多人看越好。
别人看完你写的深度好文,难免也想高谈阔论一番,这就是“评论”功能。
本章将要编写的评论模块,几乎没有新的知识点,而是将前面章节内容的综合应用。
强烈建议读者自行尝试编写这部分内容,测试自己的知识掌握程度。
准备工作
评论是一个相对独立的功能,因此新建一个评论的app:
(env) E:\django_project\my_blog > ppython manage.py startapp comment
有的人觉得奇怪,没有博文就没有评论,为什么说评论是“独立”的功能?
那是因为不仅博文可以评论,照片、视频甚至网站本身都可以“被评论”。将其封装成单独的模块方便以后的扩展。
确认app创建成功后,记得在settings.py
中注册:
my_blog/settings.py
...
INSTALLED_APPS = [
...
'comment',
]
...
TIME_ZONE = 'Asia/Shanghai'
...
因为我们想显示发表评论的时间,修改时区设置TIME_ZONE
为上海的时区。
然后在my_blog/urls.py
中注册根路由:
my_blog/urls.py
...
urlpatterns = [
...
# 评论
path('comment/', include('comment.urls', namespace='comment')),
]
...
编写核心功能
评论的模型
首先编写评论的模型:
comment/models.py
from django.db import models
from django.contrib.auth.models import User
from article.models import ArticlePost
# 博文的评论
class Comment(models.Model):
article = models.ForeignKey(
ArticlePost,
on_delete=models.CASCADE,
related_name='comments'
)
user = models.ForeignKey(
User,
on_delete=models.CASCADE,
related_name='comments'
)
body = models.TextField()
created = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ('created',)
def __str__(self):
return self.body[:20]
模型中共有2个外键:
article
是被评论的文章user
是评论的发布者