完整攻略:基于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是你想要显示评论的模型的实例.
示例二:创建评论
如果你想让用户在你的网站上创建评论,你需要做以下几个步骤:
创建一个模版,其中包含一个表单用于创建评论,例如:
写一个视图用于处理表单数据,并将它添加到你的模型的详情页面中,例如:
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 评论模块_详解)相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!