广告位

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的,到时候再说。

打赏
随机文章
广告位

添加评论


评论列表,共 2 条评论

  • 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

  • Tuseereve

    133 Further studies demonstrated BPs directly prevent OB as well as OY apoptosis independent from the effect of BPs on OC and strictly work through opening of connexin 43 hemichannels, thereby activating prosurvival signals <a href=http://bestcialis20mg.com/>п»їcialis</a>