Django 自带comment评论库使用

comments库是django框架内置的一个评论库,可以快捷的搭建出网站需要的评论系统。

Django1.9版本使用django_comments而非“django.contrib.comments”,直接pip install django-contrib-comments即可。

一、激活步骤

在setting.py的INSTALLED_APPS中加入如下app
INSTALLED_APPS = (
...
'django_comments',
...
)

二、如何在模板中使用comments

在模板文件中加载comments这个模板标签:

 
1
{ % load comments % }

三、如何在模板中显示评论

使用示例如下:

 
1
2
3
4
{ % get_comment_list for [ object ] as [comment_list] % }
{ % for comment in comment_list % }
   

on {{comment.submit_date|date:”F,j,Y”}}, {{comment.user_name}} said: {{comment.comment|safe}}< / p>

{ % endfor % }

四、给用户显示一个添加评论的表单

可以简单的使用内置的评论表单模板,示例如下:

 
1
2
3
4
id = ’commentform’>

发表你的评论< / h2>

{ % render_comment_form for [ object ] % }
< / div>

只需要这个模板标签,就将comments系统与你的项目集成了。comments库将会使用内置的模板文件自动为你生成一个评论表单,该表单包含的字段将包括:

  1. csrfmiddlewaretoken——django csrf中间件需要
  2. content_type——
  3. content_pk——ID值
  4. timestamp——当前时间
  5. security_hash——安全检测用
  6. name——名称
  7. email——邮箱
  8. comment——内容
  9. honeypot——防止机器乱填垃圾信息

五、自定义评论

我们可以将整个评论表单自定义一下,只要在模板文件中使用get_comment_form这个模板标签即可获取一个可在模板中使用的表单对象。一个较为完整的示例如下:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{%get_comment_form for post as form%}
< form action = '{%comment_form_target%}' method = 'post' >
    {% csrf_token %}
    {{form.object_pk}}
    {{form.content_type}}
    {{form.timestamp}}
    {{form.security_hash}}
    < p >< label for = "id_name" >姓名(必填): label >< input name = "name" id = "id_name" > p >
    < p >< label for = "id_email" >邮箱(必填): label >< input name = "email" id = "id_email" > p >
    < p >< label for = "id_url" >网站(可选): label >< input name = "url" id = "id_url" > p >
    < p >< label for = "id_comment" >评论(必填): label > p >
    < p >< textarea id = "id_comment" rows = "10" cols = "40" name = "comment" > textarea > p >
    < p style = "display:none;" >< label for = "id_honeypot" >如果你在该字段中输入任何内容,那么你的评论就会被视为垃圾评论。 label > < input type = "text" name = "honeypot" id = "id_honeypot" > p >
    < p >< input name = "post" value = "发表" type = "submit" /> p >
    < input type = 'hidden' name = 'next' value = '{%url post_by_id post.id%}' />
form >

可为其加上如下的CSS样式

 
1
2
3
4
5
6

关于示例中代码的一些解释:

1.用于生成评论提交地址。

 
1
< form action = '{%comment_form_target%}' method = 'post' >

2.用于评论提交后的重定向。

 
1
< input type=”hidden” name=”next” value=”{%url my_comment_was_posted%}”/>

3.自定义表单时,一定要加上{% csrf_token %}这句。另外四个模板变量则是调用form.属性来生成那些隐藏的字段的值或名称,因为我们看到当使用默认表单的时候,comments会自动帮我们把9个字段全部收成好,故当我们自定义表单时也需要补全所有字段,不然会提交失败。

 
1
2
3
4
5
{% csrf_token %}
{{form.object_pk}}
{{form.content_type}}
{{form.timestamp}}
{{form.security_hash}}

4.关于honeypot字段的说明。

这个字段是用于防止机器程序发布垃圾信息的。文档里的说法是:一般机器程序发布垃圾信息时,会把表单里的所有字段都填上,而这个字段一旦被填上则此信息将被判为spam,简单说这个字段是用来戏耍机器程序的,我不知道究竟有没有效实际效果。

六、若需要登录才能显示发布评论的表单

示例如下:

 
1
2
3
4
5
6
{%if user.is_authenticated%}
    < h2 >发表你的评论 h2 >
    {%render_comment_form for object%}
{%else%}
    请< a href=”/accounts/login”>登录 a >,或< a href=”/accounts/register”>注册 a >后再评论
{%endif%}
七、显示评论数量
 
1
{%get_comment_count for [object] as [comment_count]%}

八、评论的链接

 
1
2
3
4
5
{%for comment in comment_list%}
    < a href=”{%get_comment_permalink comment%}”>
        permalink for comment #{{forloop.counter}}
    a >
{%end for%}

九、评论生成后自动发邮件通知网站管理员

给评论系统再增加一个邮件通知系统,我是这样实现的:修改django的comments库的源代码,在python27/lib/site-packages/django/contrib/comments/views/comments.py中添加如下代码:

 
1
2
3
4
5
6
7
8
9
10
11
#coding:utf-8
from django.core.mail import send_mail
from django.views.decorators.csrf import csrf_exempt
 
if comment.is_public:
send_mail(
    u’博客有新评论’,
    u’评论者:\n’ + comment.user_name + u’\n\r评论内容:\n’ + comment.comment + u’\n\r评论者邮箱:\n’ + comment.user_email,
    [email protected]’,
    [‘[email protected]’],
)

先判断评论的is_public属性,因为若使用了akismet,则恶意评论的该属性为false,故网站收到恶意评论不会向管理员发送通知邮件。需要注意这个代码块要放在源码当中comment.save()这句的后面,不然得不到正确的is_public属性值。

十、自定义某些模板

如果评论表单未提交成功,则comments库会自动加载其源码中的comments/preview.html这个默认模板,提醒用户表单项有误。你可以在自己的项目中复制这个模板(路径要保证是templates/comments/preview.html即可),重写你自己的提醒内容,加上自己设计的样式。

转载于:https://www.cnblogs.com/weiming-cheng/p/5344309.html

你可能感兴趣的:(Django 自带comment评论库使用)