Django学习:博客阅读计数统计(16)

Blog模型添加数字字段,每次有人打开博客详情页,就将记录数+1

  • 修改blog models.py文件增加计数字段
----snip----
class Blog(models.Model):
    readed_num = models.Integer(default=0)
----snip----    
  • 修改blog admin.py增加新增字段的显示
from django.contrib import admin
from .models import Blog,BlogType

# Register your models here.
@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):
    list_display = ('pk', 'title', 'author', 'readed_num', 'blog_type', 'is_deleted', 'created_time', 'last_updated_time')
    ordering = ('pk', )

@admin.register(BlogType)
class BlogTypeAdmin(admin.ModelAdmin):
    list_display = ('pk', 'type_name', )
  • 修改处理方法views.py,当用户进入到博客详情页面时,计数就加1
----snip----
def blog_detail(request, blog_pk):
    blog = get_object_or_404(Blog, pk=blog_pk)
    blog.readed_num += 1
    blog.save()
----snip----    
  • 执行迁移操作

python manage.py makemigrations

python manage.py migrate

  • 启动服务,随意点击一片文章

  • 进入后台管理页面查看,可以看到这个页面的计数增加了。

但是可以看到这个最后一次修改时间也被修改掉了(需要后续优化)。

  • 给前端模板blog_detail.html添加字段,用于显示阅读计数
<ul class='blog_info_description'>
						<li>作者:{{ blog.author }}</li>
						<li>分类:<a href='{% url "blogs_with_type" blog.blog_type.pk %}'>{{ blog.blog_type }}</a></li>
						<li>发表时间:{{ blog.created_time|date:"Y-m-d G:m:s" }}</li>
						<li>阅读({{ blog.readed_num }})</li>
					</ul>
  • 修改blog_list.html让博客列表也同样显示阅读计数
----snip----
<div class="panel-body">
					    {% for blog in blogs %}
					    <div class="blog">
					    	<h3><a href="{% url 'blog_detail' blog.pk %}">{{ blog.title }}</a></h3>
					    	<p class="blog_info">
					    		<span class="glyphicon glyphicon-tag"></span><a href='{% url "blogs_with_type" blog.blog_type.pk %}'>{{ blog.blog_type }}</a>
					    		<span class="glyphicon glyphicon-time"></span>{{ blog.created_time|date:"Y-m-d" }}
					    		阅读({{ blog.readed_num }})
					    	</p>
							<p>{{ blog.content|striptags|truncatechars_html:120 }}</p>
					    </div>
						{% empty %}
						<div class="blog">
							<h3>-- 暂无博客,敬请期待 --</h3>
						</div>
						{% endfor %}
					</div>
----snip----
  • 刷新博客列表页面

设置计数规则:1、无视是否同一个人,每次打开博客都记录;2、若同一个人,每隔多久才算一次阅读。根据自己要求设置。


下面通过cookie来进行设置,同一用户详情页刷新不增加计数,退出浏览器后再次访问增加计数。

  • 修改views.py文件
----snip----
def blog_detail(request,blog_pk):
    blog = get_object_or_404(Blog, pk=blog_pk)
    if not request.COOKIES.get('blog_%s_readed' % blog_pk):
        blog.readed_num += 1
        blog.save()

    context = {}
    context['previous_blog'] = Blog.objects.filter(created_time__gt=blog.created_time).last()
    context['next_blog'] = Blog.objects.filter(created_time__lt=blog.created_time).first()
    context['blog'] = blog
    response = render_to_response('blog/blog_detail.html', context)
    response.set_cookie('blog_%s_readed' % blog_pk, 'true')
    return response

现在详情页面多次刷新不会出现增加阅读数量的情况了,另外,如果退出浏览器,再次打开进入博客页面,数量会增加1.

目前存在2个问题:

  1. 在后台编辑博客的过程中,可能有新的访问,比如这时候计数为3,编辑博客过程中计数增加2变为5,但是保存的时候依旧还是3。另外还有一个问题,每次访问计数增加,都会改变最后修改时间字段。
  2. 只能统计同个博客的阅读总量,无法统计每一天的博客阅读量。

posted on 2019-08-30 17:16  月见空青  阅读(315)  评论(0编辑  收藏  举报

导航