社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  问与答

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

追梦人物 • 9 年前 • 2524 次点击  

使用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
 
2524 次点击