广告位

Django实现文章阅读的阅读次数记录 防止平凡刷新阅读数不断增加的方法

 大家好,这里是Python技术宅的个人官方博客,今天给大家讲一下怎么实现记录文章阅读数的功能,还有就是限制同一个用户频繁刷新造成文章阅读数不断增加的情况,话不多说,我们直接开始吧

实现文章阅读数的思维导图

首先,我们要在Artcile model中添加total_view字段,然后就是定义文章阅读数增加的功能函数,使用文章阅读数增加的功能函数可以直接修改表中的一个字段,而不用执行真个表的操作,比较方便

class Article(models.Model):
    ......
    total_view=models.PositiveIntegerField(default=0,verbose_name='浏览量')
    ......

    def increase_views(self):
        self.total_view += 1
        self.save(update_fields=['total_view'])

接下来,我们就要在views.py中实现功能,我这里仅仅是针对用户的ip地址进行记录,没有考虑UV的情况,相对有一些不准,不过相信大家可以自行实现:

def article_detail(request, id):
    if request.method=='POST':
       ......
    else:
        article= Article.objects.get(id=id)
        ip = request.META['REMOTE_ADDR']
        con=Conn_redis_default()
        if not con.sismember(id,ip):
            con.sadd(id,ip)
            con.expire(id,60*60*24)
            article.increase_views()

        column=article.column.shortcut
        time=str(article.created).split(' ')[0]

        return render(request, 'article/detail.html', locals())
from django_redis import get_redis_connection

def Conn_redis_default():
    conn = get_redis_connection('default')
    return conn

因为redis的集合方法,django_redis默认没有,所以我没有使用cache方法

还要说一下,我是利用redis存储的用户ip,用到了redis的集合,设定了expire时间为24小时,不过安装和使用redis的同学可以浏览下我的另一篇文章,Windows环境下安装redis服务器及客户端并设置服务器自启动,因为我是在本地做的测试,所以用的是windows。

还有就是,redis的使用方法,我这里没有完全吃透,暂时没有redis教程出来,不过大家可以期待一下,因为我计划对整站做缓存处理,会用到redis的,到时候再说。

打赏
随机文章
广告位

添加评论


评论列表,共 1 条评论

  • Enduple

    https://newfasttadalafil.com/ - buying cheap cialis online generic viagra cialis uk Ovlvel Viglhm A stimulus from a muscle produces nerve impulses that travel to the spine. <a href=https://newfasttadalafil.com/>comprar cialis online</a> Ywmtqv Buy Tetracycline 500 Mg For Dogs 79 prix levitra 10 mg posologie https://newfasttadalafil.com/ - Cialis Xwxybs What Does Cephalexin Cure