【小白实战】利用django2.0,搭建属于自己的博客(13)


发布时间:2019-02-15 13:08    作者: Uncle Hui   已过去:1 年,3 月   阅读总量:306 已被赞:0


【主要实现】

文章评论功能的初步实现和展示

【在blog这个APP下新建一个forms.py 】

forms.py

from django import forms

class CommentForm(forms.Form):
    text = forms.CharField(min_length=3,max_length=200)
    post_title = forms.CharField()
    comment_author=forms.CharField()

【blog/models.py 新建评论表单,并在admin.py里注册进去】

class Comment_post(models.Model):
    text = RichTextUploadingField(verbose_name='评论内容')
    post_title = models.ForeignKey(Post,verbose_name='关联文章',on_delete=models.DO_NOTHING)
    comment_time = models.DateTimeField(verbose_name='评论时间',auto_now_add=True)
    comment_author = models.ForeignKey(User,verbose_name='评论人',on_delete=models.DO_NOTHING)

    class Meta:  # 后台管理显示汉字,这里必须用Meta
        ordering = ['-comment_time']  #按评论时间倒序排列
        verbose_name = '评论管理'
        verbose_name_plural = verbose_name

blog/views.py

新建处理评论的视图:

#评论处理视图
def comment_post(request):
    post_url = request.META.get('HTTP_REFERER', reverse('index'))  # 记录当前用户所处位置,如果失败就跳去首页
    if request.method =='POST':
        comment = CommentForm(request.POST)
        if comment.is_valid():
            post_title =int(comment.cleaned_data['post_title'])
            text = comment.cleaned_data['text']
            comment_author = int(comment.cleaned_data['comment_author'])
            post = Post.objects.get(id = post_title)
            if post:
                author = User.objects.get(id =comment_author)
                if author:
                    com_post = Comment_post()
                    com_post.post_title = post
                    com_post.text = text
                    com_post.comment_author =author
                    com_post.save()
                    return redirect(post_url)

        else:
            return redirect(post_url)
    else:
        return redirect(post_url)
 

在文章详情页面视图里,增加:

def post_read(request,post_id):
    .......
    #获取这篇文章的评论,并传递到前端
    commnets=Comment_post.objects.filter(post_title=post_id).all()
    content = {
            
                'commnets':commnets
    }
   .......
【blog/urls.py新增评论处理路由】

path('comment/',comment_post,name='comment_post') #文章pinglun路由

【文章模板页面进行逻辑判断与评论显示】

post_read.html

{% extends 'blog/base.html' %}
{% load staticfiles %}
{#{% block head %}#}
{# <script type="text/javascript" src="{% static "ckeditor/ckeditor-init.js" %}"></script>#}
{# <script type="text/javascript" src="{% static 'ckeditor/ckeditor/ckeditor.js'%}"></script>#}
{#{% endblock %}#}
{% block post %}
    <div class="blog-post" style="overflow: hidden">
        <h3 class="blog-post-title" align="center">{{ post.title }}</h3>
        <p class="blog-post-meta" align="center">发布时间:{{ post.put_in_time|date:"Y-m-d H:i" }}&nbsp;&nbsp;&nbsp;
            作者: <a href="#">{{ post.author }}</a> &nbsp;&nbsp;已过去:{{ post.put_in_time|timesince }}&nbsp;&nbsp;&nbsp;阅读总量:{{ post_num_sum.read_num_sums|default_if_none:0 }}</p>
        <hr>
        <p>{{ post.context|safe }}</p>
    </div><!-- /.blog-post -->
  <!-- 图表容器 DOM -->
    <div id="container" style="width: 600px;height:400px;"></div>
    <!-- 引入 highcharts.js -->
    <script src="http://cdn.hcharts.cn/highcharts/highcharts.js"></script>
    <script>
        // 图表配置
        var options = {
            chart:{type:'line'},
            title: {text: '本文最近七日阅读量'},
            xAxis: {
                categories:{{ dates|safe }},   // x 轴分类
                tickmarkPlacement:'on'
            },
            yAxis: {
                title: {text:null},
                labels:{enabled:false},
                gridLineDashStyle:'Dash',
            },
            series: [{                              // 数据列
                name: '阅读量',                        // 数据列名
                data: {{ post_read_num}}                     // 数据
            }],
            plotOptions: {
    line: {
        dataLabels: {
            enabled: true
        }
    }
},
            legend:{enabled:false},
            credits:{enabled:false},
        };
        // 图表初始化函数
        var chart = Highcharts.chart('container', options);
    </script>
    <hr>
    {% if request.user.is_authenticated %}
        <form method="post" action="{% url 'comment_post' %}">
  {% csrf_token %}
  <div class="form-group" >
    <label for="exampleInputText">欢迎你:{{ user.username }}</label>
      <textarea  class="form-control"  placeholder="欢迎发表评论!评论内容请不要为空且不要超过200字符" name="text" rows="4"></textarea>
        <input type="hidden" name="post_title" value="{{ post.id }}">
        <input type="hidden" name="comment_author" value="{{ post.author.id }}">
  </div>
  <button type="submit" class="btn btn-default"> 提交评论</button>
  </form>
        {% else %}
        <div class="form-group">
    <p class="help-block">登陆后方可评论,请<a href="{% url 'login' %}">前往登陆</a></p>
  </div>
    {% endif %}
    <hr>
{% for commnet in commnets %}
 <p class="help-block">{{ commnet.comment_author }}&nbsp;于{{ commnet.comment_time }}&nbsp;&nbsp;评论道:{{ commnet.text }}</p>
    {% empty %}
     <p class="help-block">暂无评论,欢迎发表意见!</p>

{% endfor %}

{% endblock %}
{% block you1 %}
    <div class="sidebar-module sidebar-module-inset">
        <h4>About</h4>
        <p>Etiam porta <em>sem malesuada magna</em> mollis euismod. Cras mattis consectetur purus sit amet fermentum.
            Aenean lacinia bibendum nulla sed consectetur.</p>
    </div>
{% endblock %}
{% block you2 %}
   <div class="sidebar-module">
        <h4>Elsewhere</h4>
        <ol class="list-unstyled">
            <li><a href="#">GitHub</a></li>
            <li><a href="#">Twitter</a></li>
            <li><a href="#">Facebook</a></li>
        </ol>
    </div>
{% endblock %}

{% block you3 %}
 <footer class="blog-footer">
        <p>晖哥哥博客版权所有 <a href="http://www.hui2017.top">Huigege</a> by <a href="https://www.hui2017.top">2018-2019</a>.
        </p>
        <p>
            <a href="#">回到页首</a>
        </p>
    </footer>
{% endblock %}

看看效果吧!

点赞

0




登陆后方可评论