python朋友圈点赞统计_django如何实现浏览量和点赞统计?

使用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,但是用户一旦点赞过其他文章,那么又可以去点赞已经点赞过的文章了。请问有什么办法实现第二个需求么?

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

···回复:

可以选择存表或走缓存或走cookie 建议走缓存

说这话的应该不太了解 Django,Django session都只是一个普通的Django model,可以看做是 Cookie 的服务器端缓存。具体的介绍请看参考链接

题主的问题根本原因是 保存时的 key 是全局的,没有带 ID,

如果 < Post.id>_last_view 这种形式即可

当然这不是一个很好的解决方法, 因为用户还是可以通过清除 Cookie 的方式刷赞 + 刷浏览量

···回复:

仅供参考

···回复:

这种需求用session个人认为并不合理 可以选择存表或走缓存或走cookie 建议走缓存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值