实现网站在线人数统计
这个主要是统计一分钟之内的在线人数的统计,数据保存在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})
网友评论