python - 设置 Django 博客评论

标签 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)

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

最佳答案

编写分层评论应用程序乍一看似乎太容易了,但请相信我,事情并没有那么简单。边缘案例和安全问题太多了。所以如果这是一个真实的项目,我建议你使用 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
  • 我们应该如何处理权限和用户访问级别?
  • 如果我们让匿名用户发表评论,我们需要他们提供哪些信息。
  • 如何检查人工验证?验证码是否足够?

祝你黑客愉快。

关于python - 设置 Django 博客评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19879711/

相关文章:

python - 如何在 python 上存储和读取我的逻辑运算

python - 什么是识别 gmail 中的 "original message"前缀的好正则表达式?

Python 2.7 异常元组索引错误

django - django 如何在 postgresql 中的 text[] 之后建模

python - 适用于 Python 的 PySide2/QT : Widget not updating/GUI Freezing

django - 在 Django 中删除上传的文件

django - 如何覆盖管理员的密码更改 View 逻辑?

Django 在 bool 字段上注释

python - Django:将 "Signals"与 "dispatch_uid"一起使用时如何防止重复?

python - 如何在 Django 中每天准确执行一次命令?