首页 > 名博 > 正文

我的博客搭建之Django实现网站在线人数统计功能

实现网站在线人数统计

这个主要是统计一分钟之内的在线人数的统计,数据保存在cache中。

实现逻辑是,当一个用户访问,把用户的ip作为key放到cache中,然后设置online_ips 作为key来存放所有的ip,每次请求会先取出online_ips 的所有值,任何在根据这个list 来从cache中取出依然存在的ip,再次存入online_ips。

实现代码:

#这个过程要放到中间层中的

#PV_middleware.py

fromdjango.core.cacheimportcache

fromdjango.utils.deprecationimportMiddlewareMixin

#EXLCLE_URL这个是排除一些路由不进行统计的比如

#EXLCLE_URL=['/admin/']

fromHuberyBlog.settingsimportEXCLUDE_URL

#主要在settings中添加这个中间件

classPvVisitViewMiddleware(MiddlewareMixin):

"""统计在线人数和用户访问"""

defprocess_request(self,request):

ifrequest.pathnotinEXCLUDE_URL:

ip=get_ip(request)

online_ips=cache.get("online_ips",[])

cache.set(ip,1*60)

ifipnotinonline_ips:

online_ips.append(ip)

cache.set("online_ips",online_ips)

defget_ip(request):

"""

获取ip

:paramrequest:

:return:

"""

if'HTTP_X_FORWARDED_FOR'inrequest.META:

ip=request.META.get('HTTP_X_FORWARDED_FOR')

else:

ip=request.META.get('REMOTE_ADDR')

returnip


#views.py

#获取在线人数方法

fromdjango.core.cacheimportcache

fromdjango.httpimportJsonResponse

defonline_ips(request):

online_ips=cache.get("online_ips",[])

online_ips_num=0

ifonline_ips:

online_ips=cache.get_many(online_ips).keys()

online_ips_num=len(online_ips)

returnJsonResponse({'online_ips_num':online_ips_num})


网友评论

验证码 换一张
取 消
暂无评论...
为您推荐
  • 相关阅读
  • 业界资讯
  • 手机通讯
  • 电脑办公
  • 新奇数码
  • 软件游戏
  • 科学探索