Login
网站首页 > 文章中心 > 其它

基于Django contrib Comments 评论模块_详解)

作者:小编 更新时间:2023-09-21 16:45:06 浏览量:112人看过

完整攻略:基于Django contrib Comments 评论模块(详解)

安装Django contrib首先,在你的Django项目中安装Django contrib:


pip install django-contrib-comments


添加评论到你的模型中在你的模型中,你需要导入comments模块,然后在你的模型中添加一个评论字段,例如:


from django.contrib.comments.models import Comment

class MyModel(models.Model):
name = models.CharField(max_length=100)
...
comments = GenericRelation(Comment, related_query_name='mymodel_comments')


将评论标签添加到你的模板中在你想要显示评论的模板中,你需要在标记中导入评论模板标签,例如:


{% load comments %}


之后在你希望出现评论的地方添加以下标签:


{% load comments %}
...
{% render_comment_list for mymodel %}


其中mymodel是你要渲染评论的模型的名字.

允许用户发表评论要让用户在你的网站上发表评论,你需要在你的form中添加一个CommentForm字段,例如:


from django.contrib.comments.forms import CommentForm

class MyForm(forms.ModelForm):
...
comment = CommentForm()


然后,在你的视图中,你需要将这个form传递给你想要让用户评论的模型的视图中,例如:


from django.shortcuts import render
from django.contrib.comments.views.comments import CommentPostBadRequest
from django.contrib.contenttypes.models import ContentType

from .models import MyModel
from .forms import MyForm

def mymodel_detail(request, pk):
mymodel = MyModel.objects.get(pk=pk)
ct = ContentType.objects.get_for_model(mymodel)
form = MyForm(request.POST or None)

if request.method == 'POST' and form.is_valid():
    comment = form.cleaned_data['comment']
    comment = Comment.objects.create(
        content_type=ct,
        object_pk=mymodel.pk,
        comment=comment,
        user=request.user
    )

    return redirect(mymodel.get_absolute_url())

else:
    context = {
        'mymodel': mymodel,
        'form': form,
    }

return render(request, 'mymodel_detail.html', context)


在这个视图中,我们首先获取了我们想要评论的MyModel实例,然后为这个实例获取ContentType对象,因为我们需要把评论和这个对象关联起来.如果获取数据的方式是POST请求,我们验证评论并创建一个新的Comment对象.最后,我们将用户重定向到评论后的页面.如果有错误或请求数据无效,我们需要将错误显示给用户.

实现用户审核评论从安全角度考虑,你可能希望在您的网站发布评论之前,对评论内容进行审核.Django contrib的评论模块默认情况下是未经验证的,但你可以通过一个信号comment_was_posted来通知管理员有人发表了一个新评论.首先,你需要在你的app中创建一个signals.py文件,并将信号添加到里面:


from django.core.mail import mail_admins
from django.db.models.signals import Signal
from django.dispatch import receiver
from django.contrib.comments.models import Comment

comment_was_posted = Signal(providing_args=['comment'])

@receiver(comment_was_posted, sender=Comment)
def comment_notification(sender, **kwargs):
mail_admins(
    subject='New comment on your site',
    message='Please moderate: {}'.format(kwargs['comment'].get_absolute_url())
)


根据这个设置,每当有新的评论被发布时,管理员将会收到一份包含发表评论的链接的电子邮件.你可以选择添加更多的验证步骤,比如在comment_notification方法里面验证评论的内容或者是否是敏感信息,然后在邮件中包含更多的信息.

示例一:显示评论

如果你已经安装了Django contrib并将评论添加到你的模型中,你可以按照以下方式在网站上显示评论:


{% load comments %}
...
{% render_comment_list for mymodel %}


其中mymodel是你想要显示评论的模型的实例.

示例二:创建评论

如果你想让用户在你的网站上创建评论,你需要做以下几个步骤:

创建一个模版,其中包含一个表单用于创建评论,例如:


{% csrf_token %} {{ form.as_p }}

写一个视图用于处理表单数据,并将它添加到你的模型的详情页面中,例如:


from django.shortcuts import render, redirect
from django.contrib.comments.models import Comment
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.decorators import login_required

from .models import MyModel
from .forms import MyForm

@login_required
def mymodel_detail(request, pk):
mymodel = MyModel.objects.get(pk=pk)
ct = ContentType.objects.get_for_model(mymodel)
form = MyForm(request.POST or None)

if request.method == 'POST' and form.is_valid():
    comment = form.cleaned_data['comment']
    comment = Comment.objects.create(
        content_type=ct,
        object_pk=mymodel.pk,
        comment=comment,
        user=request.user
    )

    return redirect(mymodel.get_absolute_url())

else:
    context = {
        'mymodel': mymodel,
        'form': form,
    }

return render(request, 'mymodel_detail.html', context)


其中,我们使用Comment.objects.create来在提交表单之后创建一个新的评论对象.根据你的需求,你可以检查评论的内容并添加其他验证步骤,比如在发送通知电子邮件之前对内容进行审查,还可以限制用户可以使用的标记和HTML标签.

总结使用Django contrib的评论模块可以为你的Django项目添加方便快捷的评论系统,可以通过简单的修改和自定义来满足各种需求.通过添加额外的功能,例如邮件通知,你可以进一步优化安全性和使用体验.

以上就是土嘎嘎小编为大家整理的基于Django contrib Comments 评论模块_详解)相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章