我的网站搭建(第16天) 只允许注册用户评论

  • 发布时间:2016年3月24日 10:56
  • 作者:杨仕航
* 该文是基于Python2.7开发的,最新Python3.x和Django2.x视频教程可以前往 >> Django2.0视频教程

前面就加入了Django Comments评论库,但是任何人都可以评论。只要填入格式正确的邮箱即可,这样很容易就产生垃圾评论和无法确认真实身份。现在加入了用户认证功能,就可以完善这一部分的内容了。


首先,还是先拿前端开刀。这里需要判断是否登录了和是否激活了。若没有登录和激活就不给评论;若登录用户了且已经激活就显示评论界面。

{# 导入评论库模块 #}
{% load comments %}

{% block blog_content %}
    <div class="panel panel-default">
        <div class="panel-heading">
            <h4>新的评论</h4>
        </div>

        <div class="panel-body">
            <div class="comments_nav">
                {% if user.is_authenticated %}
                    {% if user.is_active %}
                        {% get_comment_form for blog as blog_form %}
                        <form class="form-horizontal" action="{% comment_form_target %}" method="post" id="comment_form">
                            {% csrf_token %}
                            {{ blog_form.object_pk }}
                            {{ blog_form.content_type }}
                            {{ blog_form.timestamp }}
                            {{ blog_form.site }}
                            {{ blog_form.submit_date }}
                            {{ blog_form.security_hash }}
                            <input type="hidden" name="next" value="{%url 'detailblog' blog.id%}"/>
                            <input type="hidden" name="reply_to" value="0" />
{#这部分不加也行,django_comments会自动取登录的用户信息#}
{#<input type="hidden" name="name" value="{%if user.first_name%}{{user.first_name}}{%else%}{{user.username}}{%endif%}"/>#}
                            {#<input type="hidden" name="email" value="{{ user.email }}"/>#}
                            <div class="row">
                                <div class="col-md-12">
                                    <a name="newcomment" id="newcomment"></a>
                                    <textarea class="input-xlarge comment_text" id="id_comment" name="comment" placeholder="请输入评论内容"></textarea>

                                    <p style="display:none;">
                                        <label for="id_honeypot">如果你在该字段中输入任何内容,你的评论就会被视为垃圾评论。</label> <input type="text" name="honeypot" id="id_honeypot">
                                    </p>
                                </div>
                            </div>

                            <div class="row">
                                  <div class="form-actions comment_button">
                                    <input class="btn btn-info" id="submit_btn" type="submit" name="submit" value="提交"/>
                                    <input class="btn" id="reset_btn" type="reset" name="submit" value="清空"/>
                                  </div>
                            </div>
                         </form>
                    {% else %}
                        您尚未激活,请先激活您的账户才能评论。(避免垃圾评论)
                    {% endif %}
                {% else %}
                    您尚未登录,请先登录才能评论。(可以通过邮件得到评论提醒)
                {% endif %}
            </div>
        </div>
    </div>

    <div class="panel panel-default">
        <div class="panel-heading">
            <h4>评论列表</h4>
        </div>

        <div class="panel-body">
            {% get_comment_list for blog as comments %}
            {% for comment in comments %}
                <div class="blog_comment" name="F{{comment.id}}">
                    <p class="comment_title">#{{ comment.submit_date|date:"Y-m-d H:i"}} @ {{ comment.user_name }}</p>
                    <p class="comment_content">{{ comment.comment }}</p>
                </div>
                
            {% empty %}
                暂无评论
            {% endfor %}
        </div>
    </div>
{% endblock %}

{% block extra_footer %}
    {#设置提交评论#}
    <script type="text/javascript">
        $(document).ready(function() {
            //代码高亮(注意,这里我添加了代码高亮处理,没有引用prettyPrint的话,可以去掉)
            prettyPrint();
            //评论设置
            $('#comment_form').submit(function() {
                if ($("#id_honeypot").val().length!=0) {alert("Stop!垃圾评论");return false;};
                if ($("#id_comment").val().length==0) {alert("Error:请输入您的评论");$("#id_comment").focus();return false;};

                $("#id_timestamp").value=event.timeStamp;

                $.ajax({
                    type: "POST",
                    data: $('#comment_form').serialize(),
                    url: "{% comment_form_target %}",
                    cache: false,
                    dataType: "html",
                    success: function(html, textStatus) {
                        window.location.reload();
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert("评论出错,检查是否缺少内容 " + errorThrown);
                    }
                });
                return false;
            });
        });
    </script>
{% endblock %}


加入用户验证和去掉输入用户名、邮箱的文本框。若没有登录或者没有激活,则看不到评论框。

处理好前端模板页面之后,需要修改处理请求的方法。这个需要找到comments评论库的文件。我用的是WebFaction服务器,前面安装了comments评论库,具体路径是"~/lib/python2.7/django_contrib_comments-1.6.2-py2.7.egg/django_comments/views/comments.py"。这个路径仅供参考。

现在还不暂时不需要修改这个文件,打开之后发现会自动判断是否有提交用户数据,自动获取当前的用户。


不过,这个评论功能还不够完善,还没添加回复的功能。后面就继续修改添加回复功能。

上一篇:Python读写docx文件

下一篇:我的网站搭建(第15天) 注册认证

相关专题: Django评论库开发   

评论列表

1595541621@qq.com

1595541621@qq.com

😁很棒

2018-04-04 11:08 回复

新的评论

清空