设置Django博客评论

时间:2013-11-09 17:15:53

标签: python django django-models django-templates

如果我想在Django中为博客设置评论,我希望人们能够回复评论(如普通博客),这意味着每个评论都必须知道它是否是对其他评论的评论,我会像这样设置模型字段吗?

from django.db import models
from django.contrib.auth.models import User

class Comment(models.Model):
    post = models.ForeignKey(Post)
    user = models.ForeignKey(User)
    text = models.TextField()
    date = models.DateTimeField()
    reply_to = models.ForeignKey(Comment, blank=True, null=True)

这是对的吗?我将如何在模板中显示它们?

1 个答案:

答案 0 :(得分:3)

初看起来编写分层评论应用程序似乎太容易了,但请相信我并不那么简单。边缘情况和安全问题太多了。因此,如果这是一个真实的项目,我建议您使用disqus,任何其他托管解决方案或(现已弃用)comments framework

另一方面,如果你只是想学习如何完成或玩游戏,那么你的代码到目前为止似乎还算公平。但是你应该考虑Django's built-in content types framework而不是直接的外键关系。这样,您可以将注释对象与任何其他对象相关联。 (博客文章或其他评论)。看看评论框架models.py,你会看到它。

class BaseCommentAbstractModel(models.Model):
"""
An abstract base class that any custom comment models probably should
subclass.
"""

# Content-object field
content_type = models.ForeignKey(ContentType,
        verbose_name=_('content type'),
        related_name="content_type_set_for_%(class)s")
object_pk = models.TextField(_('object ID'))
content_object = generic.GenericForeignKey(ct_field="content_type", fk_field="object_pk")

另请参阅comment framework template tags中的RenderCommentListNode。您应该编写递归函数以获取和显示分层注释。

您必须考虑以下情况:

  • 如果用户删除评论会怎样?
  • 我们应该如何删除评论?我们是否应该从数据库中删除它,还是应该设置deleted
  • 之类的属性
  • 我们应该如何处理权限和用户访问级别?
  • 如果我们让匿名用户发表评论,我们需要哪些信息。
  • 如何检查人工验证?验证码足够吗?

快乐的黑客攻击。

相关问题