3

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)

あれは正しいですか?そして、それらをテンプレートにどのように表示しますか?

4

1 に答える 1

3

階層的なコメント アプリケーションを作成することは、一見すると簡単すぎるように思えますが、それほど単純ではないと私は信じています。エッジケースとセキュリティの問題が多すぎます。したがって、これが実際のプロジェクトである場合は、disqus、他のホストされているソリューション、または (現在は廃止されている)コメント フレームワークを使用することをお勧めします。

一方、物事がどのように行われたか、または遊んでいるかを学習しようとしているだけの場合、コードはこれまでのところ十分に公平に見えます。ただし、直接の外部キー関係ではなく、Django の組み込みのコンテンツ タイプ フレームワークを検討する必要があります。こうすることで、コメント オブジェクトを他のオブジェクトに関連付けることができます。(ブログ投稿または別のコメント)。コメント フレームワークの 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")

コメント フレームワーク テンプレート タグも参照してRenderCommentListNodeください。階層コメントを取得して表示するには、再帰関数を作成する必要があります。

次のような場合を考慮する必要があります。

  • ユーザーがコメントを削除するとどうなりますか?
  • コメントを削除するにはどうすればよいですか? 実際にデータベースから削除するか、次のような属性を設定する必要がありますdeleted
  • アクセス許可とユーザー アクセスのレベルをどのように処理する必要がありますか?
  • 匿名ユーザーにコメントを許可する場合、彼らからどのような情報が必要になりますか?
  • 人間の検証を確認する方法は? キャプチャで十分ですか?

ハッピーハッキング。

于 2013-11-09T20:00:57.070 に答える