杨智鑫给comments文件添加注释

master
杨智鑫2315304452 6 months ago
parent b9fd87bdb7
commit ec87019888

@ -5,15 +5,15 @@ from django.utils.translation import gettext_lazy as _
def disable_commentstatus(modeladmin, request, queryset):
queryset.update(is_enable=False)
queryset.update(is_enable=False) # 杨智鑫:批量设置评论为禁用状态
def enable_commentstatus(modeladmin, request, queryset):
queryset.update(is_enable=True)
queryset.update(is_enable=True) # 杨智鑫:批量设置评论为启用状态
disable_commentstatus.short_description = _('Disable comments')
enable_commentstatus.short_description = _('Enable comments')
disable_commentstatus.short_description = _('Disable comments') # 杨智鑫:批量禁用评论
enable_commentstatus.short_description = _('Enable comments') # 杨智鑫:批量启用评论
class CommentAdmin(admin.ModelAdmin):
@ -24,24 +24,24 @@ class CommentAdmin(admin.ModelAdmin):
'link_to_userinfo',
'link_to_article',
'is_enable',
'creation_time')
list_display_links = ('id', 'body', 'is_enable')
list_filter = ('is_enable',)
exclude = ('creation_time', 'last_modify_time')
actions = [disable_commentstatus, enable_commentstatus]
'creation_time') # 杨智鑫:显示
list_display_links = ('id', 'body', 'is_enable') # 杨智鑫:可点击
list_filter = ('is_enable',) # 杨智鑫:过滤
exclude = ('creation_time', 'last_modify_time') # 杨智鑫:不显示创建时间
actions = [disable_commentstatus, enable_commentstatus] # 杨智鑫:批量操作
def link_to_userinfo(self, obj):
info = (obj.author._meta.app_label, obj.author._meta.model_name)
link = reverse('admin:%s_%s_change' % info, args=(obj.author.id,))
info = (obj.author._meta.app_label, obj.author._meta.model_name) # 杨智鑫:获取用户信息
link = reverse('admin:%s_%s_change' % info, args=(obj.author.id,)) # 杨智鑫:获取用户信息
return format_html(
u'<a href="%s">%s</a>' %
(link, obj.author.nickname if obj.author.nickname else obj.author.email))
(link, obj.author.nickname if obj.author.nickname else obj.author.email)) # 杨智鑫:获取用户信息
def link_to_article(self, obj):
info = (obj.article._meta.app_label, obj.article._meta.model_name)
link = reverse('admin:%s_%s_change' % info, args=(obj.article.id,))
link = reverse('admin:%s_%s_change' % info, args=(obj.article.id,)) # 杨智鑫:获取文章信息
return format_html(
u'<a href="%s">%s</a>' % (link, obj.article.title))
u'<a href="%s">%s</a>' % (link, obj.article.title)) # 杨智鑫:获取文章信息
link_to_userinfo.short_description = _('User')
link_to_article.short_description = _('Article')
link_to_userinfo.short_description = _('User') # 杨智鑫:用户
link_to_article.short_description = _('Article') # 杨智鑫:文章

@ -2,4 +2,4 @@ from django.apps import AppConfig
class CommentsConfig(AppConfig):
name = 'comments'
name = 'comments' # 杨智鑫:应用名称

@ -6,8 +6,8 @@ from .models import Comment
class CommentForm(ModelForm):
parent_comment_id = forms.IntegerField(
widget=forms.HiddenInput, required=False)
widget=forms.HiddenInput, required=False) # 杨智鑫隐藏字段用于处理回复评论的父评论ID
class Meta:
model = Comment
fields = ['body']
model = Comment # 杨智鑫:指定表单关联的模型
fields = ['body'] # 杨智鑫:表单只包含评论内容字段

@ -9,31 +9,31 @@ from blog.models import Article
# Create your models here.
class Comment(models.Model):
body = models.TextField('正文', max_length=300)
creation_time = models.DateTimeField(_('creation time'), default=now)
last_modify_time = models.DateTimeField(_('last modify time'), default=now)
body = models.TextField('正文', max_length=300) # 杨智鑫评论正文最大长度300字符
creation_time = models.DateTimeField(_('creation time'), default=now) # 杨智鑫:评论创建时间
last_modify_time = models.DateTimeField(_('last modify time'), default=now) # 杨智鑫:最后修改时间
author = models.ForeignKey(
settings.AUTH_USER_MODEL,
verbose_name=_('author'),
on_delete=models.CASCADE)
on_delete=models.CASCADE) # 杨智鑫:关联用户模型,删除用户时级联删除评论
article = models.ForeignKey(
Article,
verbose_name=_('article'),
on_delete=models.CASCADE)
on_delete=models.CASCADE) # 杨智鑫:关联文章模型,删除文章时级联删除评论
parent_comment = models.ForeignKey(
'self',
verbose_name=_('parent comment'),
blank=True,
null=True,
on_delete=models.CASCADE)
on_delete=models.CASCADE) # 杨智鑫:关联父级评论,默认为空
is_enable = models.BooleanField(_('enable'),
default=False, blank=False, null=False)
default=False, blank=False, null=False) # 杨智鑫:是否启用
class Meta:
ordering = ['-id']
verbose_name = _('comment')
verbose_name_plural = verbose_name
get_latest_by = 'id'
ordering = ['-id'] # 杨智鑫:排序
verbose_name = _('comment') # 杨智鑫:模型名称
verbose_name_plural = verbose_name # 杨智鑫:模型名称复数
get_latest_by = 'id' # 杨智鑫:获取最新
def __str__(self):
return self.body
return self.body # 杨智鑫:返回评论内容

@ -4,7 +4,7 @@ from django.urls import reverse
from accounts.models import BlogUser
from blog.models import Category, Article
from comments.models import Comment
from comments.templatetags.comments_tags import *
from comments.templatetags.comments_tags import * # 杨智鑫:导入所有模板标签函数
from djangoblog.utils import get_max_articleid_commentid
@ -12,39 +12,39 @@ from djangoblog.utils import get_max_articleid_commentid
class CommentsTest(TransactionTestCase):
def setUp(self):
self.client = Client()
self.factory = RequestFactory()
self.client = Client() # 杨智鑫创建一个client
self.factory = RequestFactory() # 杨智鑫创建一个factory
from blog.models import BlogSettings
value = BlogSettings()
value.comment_need_review = True
value.save()
value = BlogSettings() # 杨智鑫创建一个BlogSettings对象
value.comment_need_review = True # 杨智鑫:设置评论是否需要审核
value.save() # 杨智鑫:保存
self.user = BlogUser.objects.create_superuser(
email="liangliangyy1@gmail.com",
username="liangliangyy1",
password="liangliangyy1")
password="liangliangyy1") # 杨智鑫:创建一个用户
def update_article_comment_status(self, article):
comments = article.comment_set.all()
for comment in comments:
comment.is_enable = True
comment.save()
for comment in comments: # 杨智鑫:遍历所有评论
comment.is_enable = True # 杨智鑫:设置评论是否可用
comment.save() # 杨智鑫:保存
def test_validate_comment(self):
self.client.login(username='liangliangyy1', password='liangliangyy1')
self.client.login(username='liangliangyy1', password='liangliangyy1') # 杨智鑫:登录
category = Category()
category.name = "categoryccc"
category = Category() # 杨智鑫:创建一个分类
category.name = "categoryccc" # 杨智鑫:创建一个分类
category.save()
article = Article()
article.title = "nicetitleccc"
article.body = "nicecontentccc"
article = Article() # 杨智鑫:创建一个文章
article.title = "nicetitleccc" # 杨智鑫:创建一个文章
article.body = "nicecontentccc" # 杨智鑫:创建一个文章
article.author = self.user
article.category = category
article.type = 'a'
article.status = 'p'
article.save()
article.save() # 杨智鑫:保存
comment_url = reverse(
'comments:postcomment', kwargs={
@ -55,25 +55,25 @@ class CommentsTest(TransactionTestCase):
'body': '123ffffffffff'
})
self.assertEqual(response.status_code, 302)
self.assertEqual(response.status_code, 302) # 杨智鑫:判断返回状态码
article = Article.objects.get(pk=article.pk)
self.assertEqual(len(article.comment_list()), 0)
self.assertEqual(len(article.comment_list()), 0) #杨智鑫:判断评论数量
self.update_article_comment_status(article)
self.assertEqual(len(article.comment_list()), 1)
self.assertEqual(len(article.comment_list()), 1) #杨智鑫:判断评论数量
response = self.client.post(comment_url,
{
'body': '123ffffffffff',
})
}) # 杨智鑫:提交数据
self.assertEqual(response.status_code, 302)
self.assertEqual(response.status_code, 302) # 杨智鑫:判断返回状态码
article = Article.objects.get(pk=article.pk)
self.update_article_comment_status(article)
self.assertEqual(len(article.comment_list()), 2)
parent_comment_id = article.comment_list()[0].id
article = Article.objects.get(pk=article.pk) # 杨智鑫:获取文章
self.update_article_comment_status(article) # 杨智鑫:更新文章评论状态
self.assertEqual(len(article.comment_list()), 2) #杨智鑫:判断评论数量
parent_comment_id = article.comment_list()[0].id #杨智鑫获取父评论id
response = self.client.post(comment_url,
{
@ -91,19 +91,19 @@ class CommentsTest(TransactionTestCase):
''',
'parent_comment_id': parent_comment_id
})
self.assertEqual(response.status_code, 302)
self.update_article_comment_status(article)
article = Article.objects.get(pk=article.pk)
self.assertEqual(len(article.comment_list()), 3)
comment = Comment.objects.get(id=parent_comment_id)
tree = parse_commenttree(article.comment_list(), comment)
self.assertEqual(len(tree), 1)
data = show_comment_item(comment, True)
self.assertIsNotNone(data)
s = get_max_articleid_commentid()
self.assertIsNotNone(s)
}) # 杨智鑫:提交数据
self.assertEqual(response.status_code, 302) # 杨智鑫:判断返回状态码
self.update_article_comment_status(article) # 杨智鑫:更新文章评论状态
article = Article.objects.get(pk=article.pk) # 杨智鑫:获取文章
self.assertEqual(len(article.comment_list()), 3) # 杨智鑫:判断评论数量
comment = Comment.objects.get(id=parent_comment_id) # 杨智鑫:获取父评论
tree = parse_commenttree(article.comment_list(), comment) # 杨智鑫:获取子评论
self.assertEqual(len(tree), 1) # 杨智鑫:判断子评论数量
data = show_comment_item(comment, True) # 杨智鑫:获取评论项
self.assertIsNotNone(data) # 杨智鑫:判断数据是否为空
s = get_max_articleid_commentid() # 杨智鑫获取最大文章id和评论id
self.assertIsNotNone(s) # 杨智鑫:判断数据是否为空
from comments.utils import send_comment_email
send_comment_email(comment)
send_comment_email(comment) # 杨智鑫:发送邮件

@ -2,10 +2,10 @@ from django.urls import path
from . import views
app_name = "comments"
app_name = "comments" # 杨智鑫:定义应用命名空间
urlpatterns = [
path(
'article/<int:article_id>/postcomment',
views.CommentPostView.as_view(),
name='postcomment'),
views.CommentPostView.as_view(), # 杨智鑫:定义路由
name='postcomment'), # 杨智鑫:定义路由名称
]

@ -5,12 +5,12 @@ from django.utils.translation import gettext_lazy as _
from djangoblog.utils import get_current_site
from djangoblog.utils import send_email
logger = logging.getLogger(__name__)
logger = logging.getLogger(__name__) # 杨智鑫:获取当前模块的日志器
def send_comment_email(comment):
site = get_current_site().domain
subject = _('Thanks for your comment')
site = get_current_site().domain # 杨智鑫:获取当前站点
subject = _('Thanks for your comment') # 杨智鑫获取当前语言的Thanks for your comment
article_url = f"https://{site}{comment.article.get_absolute_url()}"
html_content = _("""<p>Thank you very much for your comments on this site</p>
You can visit <a href="%(article_url)s" rel="bookmark">%(article_title)s</a>
@ -18,9 +18,9 @@ def send_comment_email(comment):
Thank you again!
<br />
If the link above cannot be opened, please copy this link to your browser.
%(article_url)s""") % {'article_url': article_url, 'article_title': comment.article.title}
tomail = comment.author.email
send_email([tomail], subject, html_content)
%(article_url)s""") % {'article_url': article_url, 'article_title': comment.article.title} # 杨智鑫:获取当前语言
tomail = comment.author.email # 杨智鑫:获取评论者的邮箱
send_email([tomail], subject, html_content) # 杨智鑫:发送邮件
try:
if comment.parent_comment:
html_content = _("""Your comment on <a href="%(article_url)s" rel="bookmark">%(article_title)s</a><br/> has
@ -33,6 +33,6 @@ def send_comment_email(comment):
""") % {'article_url': article_url, 'article_title': comment.article.title,
'comment_body': comment.parent_comment.body}
tomail = comment.parent_comment.author.email
send_email([tomail], subject, html_content)
send_email([tomail], subject, html_content) # 杨智鑫:发送邮件
except Exception as e:
logger.error(e)
logger.error(e) # 杨智鑫:记录错误

@ -13,51 +13,51 @@ from .models import Comment
class CommentPostView(FormView):
form_class = CommentForm
template_name = 'blog/article_detail.html'
form_class = CommentForm # 杨智鑫:指定使用的表单类
template_name = 'blog/article_detail.html' # 杨智鑫:指定使用的模板
@method_decorator(csrf_protect)
def dispatch(self, *args, **kwargs):
return super(CommentPostView, self).dispatch(*args, **kwargs)
def dispatch(self, *args, **kwargs): # 杨智鑫添加csrf_protect装饰器
return super(CommentPostView, self).dispatch(*args, **kwargs) # 杨智鑫调用父类的dispatch方法
def get(self, request, *args, **kwargs):
article_id = self.kwargs['article_id']
article = get_object_or_404(Article, pk=article_id)
url = article.get_absolute_url()
return HttpResponseRedirect(url + "#comments")
article_id = self.kwargs['article_id'] # 杨智鑫获取文章id
article = get_object_or_404(Article, pk=article_id) # 杨智鑫:获取文章对象
url = article.get_absolute_url() # 杨智鑫获取文章的url
return HttpResponseRedirect(url + "#comments") # 杨智鑫:跳转到文章的评论区
def form_invalid(self, form):
article_id = self.kwargs['article_id']
article = get_object_or_404(Article, pk=article_id)
article_id = self.kwargs['article_id'] # 杨智鑫获取文章id
article = get_object_or_404(Article, pk=article_id) # 杨智鑫:获取文章对象
return self.render_to_response({
'form': form,
'article': article
})
}) # 杨智鑫:返回错误信息
def form_valid(self, form):
"""提交的数据验证合法后的逻辑"""
user = self.request.user
author = BlogUser.objects.get(pk=user.pk)
article_id = self.kwargs['article_id']
article = get_object_or_404(Article, pk=article_id)
user = self.request.user # 杨智鑫:获取用户
author = BlogUser.objects.get(pk=user.pk) # 杨智鑫:获取用户对象
article_id = self.kwargs['article_id'] # 杨智鑫获取文章id
article = get_object_or_404(Article, pk=article_id) # 杨智鑫:获取文章对象
if article.comment_status == 'c' or article.status == 'c':
raise ValidationError("该文章评论已关闭.")
comment = form.save(False)
comment.article = article
raise ValidationError("该文章评论已关闭.") # 杨智鑫:抛出异常
comment = form.save(False) # 杨智鑫:保存评论
comment.article = article # 杨智鑫:设置评论所属文章
from djangoblog.utils import get_blog_setting
settings = get_blog_setting()
settings = get_blog_setting() # 杨智鑫:获取博客设置
if not settings.comment_need_review:
comment.is_enable = True
comment.author = author
comment.author = author # 杨智鑫:设置评论作者
if form.cleaned_data['parent_comment_id']:
if form.cleaned_data['parent_comment_id']: # 杨智鑫:判断是否有父级评论
parent_comment = Comment.objects.get(
pk=form.cleaned_data['parent_comment_id'])
comment.parent_comment = parent_comment
pk=form.cleaned_data['parent_comment_id']) # 杨智鑫:获取父级评论对象
comment.parent_comment = parent_comment # 杨智鑫:设置父级评论
comment.save(True)
comment.save(True) # 杨智鑫:保存评论
return HttpResponseRedirect(
"%s#div-comment-%d" %
(article.get_absolute_url(), comment.pk))
(article.get_absolute_url(), comment.pk)) # 杨智鑫:跳转到评论区

Loading…
Cancel
Save