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

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

  1. 安装Django contrib
    首先,在你的Django项目中安装Django contrib:
pip install django-contrib-comments
  1. 添加评论到你的模型中
    在你的模型中,你需要导入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')
  1. 将评论标签添加到你的模板中
    在你想要显示评论的模板中,你需要在<html>标记中导入评论模板标签,例如:
{% load comments %}

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

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

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

  1. 允许用户发表评论
    要让用户在你的网站上发表评论,你需要在你的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对象。最后,我们将用户重定向到评论后的页面。如果有错误或请求数据无效,我们需要将错误显示给用户。

  1. 实现用户审核评论
    从安全角度考虑,你可能希望在您的网站发布评论之前,对评论内容进行审核。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是你想要显示评论的模型的实例。

示例二:创建评论

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

  1. 创建一个模版,其中包含一个表单用于创建评论,例如:
<form method="POST" action="{% url 'mymodel_detail' mymodel.pk %}">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Submit</button>
</form>
  1. 写一个视图用于处理表单数据,并将它添加到你的模型的详情页面中,例如:
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 评论模块(详解) - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • django站点管理详解

    下面我将为你详细讲解“Django站点管理详解”的完整攻略。 Django站点管理详解 Django站点管理介绍 Django站点管理是Django框架提供的内置模块,用于管理和展示站点的内容。通过Django站点管理,我们可以方便地进行内容管理、权限管理、页面展示等操作,而无需手动编写代码。 Django站点管理的使用 要使用Django站点管理,在Dja…

    Django 2023年5月16日
    00
  • 浅谈Django Admin的初步使用

    下面我将详细讲解“浅谈Django Admin的初步使用”的完整攻略,并在过程中提供两条示例说明。 1. 什么是Django Admin Django Admin是Django框架提供的内置管理工具,可以方便地对应用程序的数据进行管理和维护。它提供了一个轻量级的前端界面,允许管理者、开发者更加直观地查看、添加、修改、删除数据,而无需编写自定义管理界面。 2.…

    Django 2023年5月16日
    00
  • Django之cookie/session

      当我们通过浏览器来访问网站的时候,由于HTTP本身是无状态的,所以当我们结束访问后第二次再来访问的时候,服务器本身是不认识我们(它不知道我们之前来过,也就不会保存我们之前的信息),比如当我们第一次登入的网站后第二次再来的时候我们还是需要重新登入,这样网站不能保存我们的密码,是不是很麻烦,那如何解决这个问题呢?那cookie和session就是为了解决这个…

    2023年4月9日
    00
  • Django日志系统

    在Django中使用的日志系统是基于Python中的loggin模块。 首先简单介绍下logging。 一 Loggin模块简介 loggin模块主要包含以下四个部分: Loggers           用户使用的直接接口,将日志传递给Handler Handlers          控制日志输出到哪里,console,file…    一个logger…

    Django 2023年4月12日
    00
  • 基于Django ORM、一对一、一对多、多对多的全面讲解

    基于Django ORM、一对一、一对多、多对多的全面讲解 什么是Django ORM Django是使用Python编写的一个开放源代码的Web应用程序框架,ORM(Object-Relational Mapping,对象关系映射)是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。在Django中,ORM是Django模型组件的核…

    Django 2023年5月16日
    00
  • 在SAE上部署Python的Django框架的一些问题汇总

    下面是部署Python的Django框架在SAE上的一些问题汇总的完整攻略和两个示例说明。 1. 环境搭建 首先,需要在本地安装 Django 和 mysqlclient。可以使用以下命令: pip install django pip install mysqlclient 如果报错,可以尝试使用以下命令: pip install django –use…

    Django 2023年5月16日
    00
  • Django框架创建项目的方法入门教程

    下面是“Django框架创建项目的方法入门教程”的完整攻略。 创建Django项目的步骤 1. 安装Django框架 要创建一个Djano项目,首先我们需要安装Django框架。可以使用pip命令进行安装: pip install django 2. 创建Djano项目 在安装好Django之后,我们就可以创建Django项目了。在命令行中进入项目所在文件夹…

    Django 2023年5月16日
    00
  • django 中的setting 各种配置logging MySQL

    AUTH_USER_MODEL = ‘APP.UserInfo’#Django允许你通过修改setting.py文件中的 AUTH_USER_MODEL 设置覆盖默认的User模型,其值引用一个自定义的模型。 MySQL 数据库 的 setting配置 DATABASES = { ‘default’: { ‘ENGINE’: ‘django.db.backe…

    Django 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部