【问题标题】:Setup Django Blog Comments设置 Django 博客评论
【发布时间】:2013-11-21 16:22:14
【问题描述】:

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

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)

正确吗?我将如何在模板中显示它们?

【问题讨论】:

    标签: python django django-models django-templates


    【解决方案1】:

    乍一看,编写分层 cmets 应用程序似乎太容易了,但相信我,这并不是那么简单。有太多的边缘情况和安全问题。因此,如果这是一个真正的项目,我建议您使用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")
    

    还可以查看RenderCommentListNodein comment framework template tags。您应该编写一个递归函数来获取和显示分层 cmets。

    您必须考虑以下情况:

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

    黑客愉快。

    【讨论】:

      猜你喜欢
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 2013-04-16
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多