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

yizhihongxing

完整攻略:基于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 内置权限扩展案例详解”的完整攻略,包含两个示例说明的详细讲解。 1. 示例一 1.1 案例描述 假设我们要实现一个博客系统,需要实现以下功能: 所有用户都可以浏览博客列表和单篇博客。 未登录用户不能对博客进行任何操作(包括新建、修改、删除和点赞)。 登录用户可以进行以下操作: 创建自己的博客文章。 修改自己创建的博客文章。 删除自己…

    Django 2023年5月16日
    00
  • Django实现上传图片功能

    下面是“Django实现上传图片功能”的完整攻略。 步骤一:创建Django工程和应用 首先,我们需要创建一个Django工程和一个应用。使用以下命令可以快速创建: django-admin startproject myproject cd myproject python manage.py startapp myapp 其中 myproject 和 m…

    Django 2023年5月16日
    00
  • 基于django2.2连oracle11g解决版本冲突的问题

    下面是基于Django2.2连接Oracle11g并解决版本冲突问题的完整攻略: 环境准备 首先要保证环境准备充分,包括: 安装Python3和pip(这里不再赘述) 安装cx_Oracle库 cx_Oracle是Python访问Oracle数据库的一个库,可以使用pip进行安装,具体命令:pip install cx_Oracle 安装Oracle Ins…

    Django 2023年5月16日
    00
  • python-django缓存

    1.1 缓存介绍 1.缓存的简介 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一次的的后台操作,都会消耗很多的服务端资源,所以必须使用缓存来减轻后端服务器的压力. 缓存是将一些常用的数据保存内存或者memcache中,在一定的时间内有人来访问…

    Django 2023年4月13日
    00
  • django 模型字段设置默认值代码

    当我们在使用 Django 框架时,经常需要定义数据库模型,而模型中的字段往往需要提供默认值,以在创建新对象时提供默认初始化值。 下面是设置模型字段默认值的完整攻略: 1. 使用默认值作为固定值 如果要将模型字段的默认值设置为一个固定值,可以在字段定义中指定 default 属性,并将其设置为相应的值。 例如,我们想定义一个名为 Person 的模型,其具有…

    Django 2023年5月15日
    00
  • django2笔记之路由path语法的实现

    下面是详细讲解“django2笔记之路由path语法的实现”的完整攻略: 1. 路由path语法概述 在Django中,路由用于匹配URL,并将请求分发到对应的视图函数。而路由的定义则是通过一个Python模块来完成的,这个模块通常被称作“路由表”。 在Django 2开始,我们使用path()函数定义路由而不是url()函数。和旧版本的url()函数相比,…

    Django 2023年5月16日
    00
  • django从请求到响应的过程深入讲解

    当请求发出后,Django将会执行一系列的处理步骤,最终生成对应的响应,这个过程可以分为以下几步: 1. 请求接收 当用户在浏览器中输入URL请求网页时,Django将会接收到这个请求。这个请求将会被一个称为WSGI的Python规范所捕获,然后交给Django进行处理。在Django应用程序中,这部分处理由WSGI服务器负责。 2. URL匹配和视图解析 …

    Django 2023年5月16日
    00
  • 深入浅析Django MTV模式

    关于深入浅析Django MTV模式的完整攻略,我将详细阐述如下。 MTV模式概述 Django框架采用的是MTV模式,也就是Model-Template-View(模型-模板-视图)模式,是一种用于构建Web应用程序的软件设计模式。在这种模式中,Model负责数据存储和处理,Template负责用户交互页面设计,View负责进行逻辑处理和数据渲染。 MTV…

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