zoukankan      html  css  js  c++  java
  • [个人网站搭建]·Django增加评论功能(Python3)

    [个人网站搭建]·Django增加评论功能

    个人主页--> https://xiaosongshine.github.io/ 

    个人网站搭建github地址:https://github.com/xiaosongshine/djangoWebs 

    安装django插件

    pip install django-contrib-comments
    

    配置settings.py

    INSTALLED_APP=(
        #...,
        'django_comments',
        'django.contrib.sites',
    )
    SITE_ID = 1
    

    在INSTALLED_APP添加django_comments和django.contrib.sites两个应用。

    在外部添加 SITE_ID=1。

    django的评论库是一个站点,所以需要添加sites的应用并设置当前django工程的站点id=1

    更新数据库

    python manage.py migrate

    配置urls.py

    在 urlpatterns 中添加

    path(r'^comments/', include('django_comments.urls')),
    

    修改前端页面显示评论列表和评论提交表单

    接着,修改前端页面显示评论列表和评论提交表单。这些需要使用django_comments的模版标签,在使用标签之前导入加载:

    {# 导入评论库模块的模版标签 #}
    {% load comments %}
    

    评论列表可以通过django_comments的get_comment_list模版标签获取,如下代码:

    <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 %}
                <span>暂无评论</span>
            {% endfor %}
        </div>
    </div>
    

    get_comment_list模版标签的用法是for一个模版对象,as是重命名。变量得到的评论加载即可。

    而评论提交表单,最主要的是提交的url和表单字段。同样也可以通过django_comments的模版标签处理,如下代码:

    <h4>新的评论</h4>
    {% get_comment_form for blog as blog_form %}
     
    <form id="comment_form" 
          class="form-horizontal" 
          action="{% comment_form_target %}" 
          method="post"
    >
        {% csrf_token %}
     
        {# 必须的字段 #}
        {{ blog_form.object_pk }}
        {{ blog_form.content_type }}
        {{ blog_form.timestamp }}
        {{ blog_form.site }}
        {{ blog_form.submit_date }}
        {{ blog_form.security_hash }}
     
        {# 用户名字段,这个后面会修改为登录用户评论,无需填这个 #}
        <div class="control-group">
            <label class="control-label" for="id_name">名称: </label>
            <div class="controls">
                <input type="text" 
                       id="id_name" class="input-xlarge" name="name" 
                       placeholder="请输入您的用户名" 
                       value="{{ user.username }}" />
            </div>
        </div>
     
        {# 邮箱地址字段 #}
        <div class="control-group">
            <label class="control-label" for="id_email">邮箱: </label>
            <div class="controls">
                <input type="email"
                       id="id_email" class="input-xlarge" name="email" 
                       placeholder="请输入您的邮箱地址" 
                       value="{{ user.email }}" />
            </div>
        </div>
     
        {# 评论内容 #}
        <a name="newcomment" id="newcomment"></a>
        <div class="control-group">
            <label class="control-label" for="id_comment">评论: </label>
            <div class="controls">
                <textarea rows="6" 
                          id="id_comment" class="input-xlarge comment" name="comment" 
                          placeholder="请输入评论内容">
                </textarea>
            </div>
        </div>
     
        {# 防垃圾评论 #}
        <p style="display:none;">
            <label for="id_honeypot">如果你在该字段中输入任何内容,你的评论就会被视为垃圾评论。</label>
            <input type="text" name="honeypot" id="id_honeypot">
        </p>
     
        {# 表单按钮 #}
        <div class="controls">
            <div class="form-actions">
                <input class="btn btn-info" id="submit_btn" type="submit" name="submit" value="提交"/>
                <input type="hidden" name="next" value="{%url 'detailblog' blog.id%}"/>
            </div>
        </div>
     </form>
    

    这一步需要注意的有两点

    1.{% get_comment_form for blog as blog_form %} {% get_comment_list for blog as comments %}中blog就是你的文章内容,我的主页用的是show我就改为了:

    {% get_comment_form for show as blog_form %} {% get_comment_list for show as comments %}

    2.<input type="hidden" name="next" value="{%url 'detailblog' blog.id%}"/>其中的value="{%url 'detailblog' blog.id%}就是你要刷新的网页url,我的修改为了:

    <input type="hidden" name="next" value="/details-{{show.id}}.html"/>

    还有一个小技巧:可以通过{{ comments|length}}获取评论总数目,便于统计显示,我的实现:

    <li><a href="#" class="icon fa-comment">{{ comments|length}}</a></li>​​​​​​​

    重启Uwsgi和Nginx

    修改Django文件和其它配置文件之后,一定要重启Uwsgi和Nginx,不然不生效。

    Uwsgi和Nginx重启方法:

    #查看Uwsgi进程
    ps -ef|grep uwsgi 
    #用kill方法把uwsgi进程杀死,然后启动uwsgi
    killall -9 uwsgi
    #启动方法
    uwsgi -x mysite.xml
    
    #Nginx平滑重启方法
    /usr/local/nginx/sbin/nginx -s reload

    效果展示

    Please Enjoy Yourself

    欢迎大家访问我的主页尝试一下,觉得有用的话,麻烦小小鼓励一下 ><

    个人网站搭建github地址:https://github.com/xiaosongshine/djangoWebs 欢迎访问

    参考:http://yshblog.com/blog/5

  • 相关阅读:
    LayoutInflater介绍及例子
    Java对象转换为Json对象
    重写Object.equals()方法和Object.hashCode()方法
    初步理解一下:SOA, SOAP, Web Service, WSDL等
    JSP九大内置对象及四个作用域
    Visual Studio的导入和导出设置
    winform三态树的构建和使用
    关于android编程使用android.hardware.Camera 方向不对的问题
    xampp软件包如何重置mysql的 密码
    有关.NET中的config文件的一些问题
  • 原文地址:https://www.cnblogs.com/xiaosongshine/p/10615575.html
Copyright © 2011-2022 走看看