zoukankan      html  css  js  c++  java
  • 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_listfor [object] as [comment_list]%}
    {%forcomment in comment_list%}
        <p>on {{comment.submit_date|date:”F,j,Y”}}, {{comment.user_name}} said: {{comment.comment|safe}}</p>
    {%endfor%}

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

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

     
    1
    2
    3
    4
    <div id=’commentform’>
    <h2>发表你的评论</h2>
    {%render_comment_formfor [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%}
    <formaction='{%comment_form_target%}'method='post'>
        {% csrf_token %}
        {{form.object_pk}}
        {{form.content_type}}
        {{form.timestamp}}
        {{form.security_hash}}
        <p><labelfor="id_name">姓名(必填):</label><inputname="name"id="id_name"></p>
        <p><labelfor="id_email">邮箱(必填):</label><inputname="email"id="id_email"></p>
        <p><labelfor="id_url">网站(可选):</label><inputname="url"id="id_url"></p>
        <p><labelfor="id_comment">评论(必填):</label></p>
        <p><textareaid="id_comment"rows="10"cols="40"name="comment"></textarea></p>
        <pstyle="display:none;"><labelfor="id_honeypot">如果你在该字段中输入任何内容,那么你的评论就会被视为垃圾评论。</label> <inputtype="text"name="honeypot"id="id_honeypot"></p>
        <p><inputname="post"value="发表"type="submit"/></p>
        <inputtype='hidden'name='next'value='{%url post_by_id post.id%}'/>
    </form>

    可为其加上如下的CSS样式

     
    1
    2
    3
    4
    5
    6
    <style type="text/css">
    label{display:inline;float:left;width:100px;}
    input,textarea{width:340px;}
    textarea{height:80px;}
    input[type=submit]{width:120px;margin-left:300px;}
    </style>

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

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

     
    1
    <formaction='{%comment_form_target%}'method='post'>

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

     
    1
    <inputtype=”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%}
        请<ahref=”/accounts/login”>登录</a>,或<ahref=”/accounts/register”>注册</a>后再评论
    {%endif%}
    七、显示评论数量
     
    1
    {%get_comment_count for [object] as [comment_count]%}

    八、评论的链接

     
    1
    2
    3
    4
    5
    {%for comment in comment_list%}
        <ahref=”{%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’评论者: ’+comment.user_name+u’ 评论内容: ’+comment.comment+u’ 评论者邮箱: ’+comment.user_email,
        ‘sender@example.com’,
        [‘admin@example.com’],
    )

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

    十、自定义某些模板

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

  • 相关阅读:
    C# LINQ和Lambda表达式详解
    .NET面试题2021.7.13
    linux每日命令(11):cat命令
    linux每日命令(10):touch命令
    linux每日命令(9):cp命令
    linux每日命令(8):mv命令
    linux每日命令(7):rmdir命令
    linux每日命令(5):mkdir命令
    进程和线程的区别?什么时候用进程?什么时候用线程?
    八种方式实现跨域请求
  • 原文地址:https://www.cnblogs.com/weiming-cheng/p/5344309.html
Copyright © 2011-2022 走看看