Py学习  »  问与答

如何利用django的session框架实现合理地统计浏览量和点赞

追梦人物 • 8 年前 • 2274 次点击  

使用django1.9+python3.4写了一个博客,为了完善用户体验,现在想实现以下两个需求:

  • 统计每篇文章的浏览量,但是不能点击一次统计一次。因此我希望达到的效果是:同一用户,若第一次点击某篇文章则文章浏览量+1,以后对该用户的点击至少每隔3分钟才统计一次。

  • 用户点赞:用户对某篇文章点赞后,不能再次点赞

由于个人博客没有设计用户登陆注册功能,因此只能使用django的session框架,目前我实现的两段代码如下,能达到近似效果,但是和需求还是有区别,代码如下:

浏览量统计视图代码

... last_view = request.session.get('last_view')#获取最后一次浏览本站的时间last_view if last_view: last_visit_time = datetime.datetime.strptime(last_view[:-7], "%Y-%m-%d %H:%M:%S") if datetime.datetime.now() >= last_visit_time + datetime.timedelta(minutes=5):#判断如果最后一次访问网站的时间大于5分钟,则浏览量+1 post.views += 1 post.save() else: post.views += 1 post.save() request.session['last_view'] = str(datetime.datetime.now())#更新session ...

以上代码的思路是设置用户最后一次访问网站的时间的session,下次用户访问时获取该session,如果最后一次访问网站的时间大于5分钟,则浏览量+1。这种实现存在的问题的无法区分用户访问了哪篇文章,因此统计的时间差只是用户访问全站的时间,而不是浏览某篇文章的时间间隔。有什么办法利用session框架实现第一个需求么?

点赞功能代码

def like_post(request): p_id = None likes = 0 LIKED = '谢谢鼓励,但你已经赞过啦!'

if request.method == 'GET':
    p_id = request.GET['post_id']
    liked_post = request.session.get('liked')
    if p_id == liked_post:
        return HttpResponse(LIKED)
    post = get_object_or_404(Post, id=p_id)
    post.likes += 1
    likes = post.likes
    post.save()
    request.session['liked'] = p_id
    return HttpResponse(likes)

``` 以上实现的思路是,将用户最近一次点赞的文章记录进session,但是用户一旦点赞过其他文章,那么又可以去点赞已经点赞过的文章了。请问有什么办法实现第二个需求么?

求大家提供一点实现思路,不胜感激。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1438
 
2274 次点击