实现网站在线人数统计
这个主要是统计一分钟之内的在线人数的统计,数据保存在cache中。
实现逻辑是,当一个用户访问,把用户的ip作为key放到cache中,然后设置online_ips 作为key来存放所有的ip,每次请求会先取出online_ips 的所有值,任何在根据这个list 来从cache中取出依然存在的ip,再次存入online_ips。
实现代码:
# 这个过程要放到中间层中的
# PV_middleware.py
from django.core.cache import cache
from django.utils.deprecation import MiddlewareMixin
# EXLCLE_URL 这个是排除一些路由不进行统计的 比如
# EXLCLE_URL = ['/admin/']
from HuberyBlog.settings import EXCLUDE_URL
# 主要在settings 中添加这个中间件
class PvVisitViewMiddleware(MiddlewareMixin):
"""统计在线人数和用户访问"""
def process_request(self, request):
if request.path not in EXCLUDE_URL:
ip = get_ip(request)
online_ips = cache.get("online_ips", [])
if online_ips:
# 根据取出的ip list获取缓存中仍然存在的ip
# 这里要加个list py2 中是直接获取的list python3中获取的是一个对象 网上很多都没加
online_ips = list(cache.get_many(online_ips).keys())
cache.set(ip, 0, 1 * 60)
if ip not in online_ips:
online_ips.append(ip)
cache.set("online_ips", online_ips)
def get_ip(request):
"""
获取ip
:param request:
:return:
"""
if 'HTTP_X_FORWARDED_FOR' in request.META:
ip = request.META.get('HTTP_X_FORWARDED_FOR')
else:
ip = request.META.get('REMOTE_ADDR')
return ip
# views.py
# 获取在线人数方法
from django.core.cache import cache
from django.http import JsonResponse
def online_ips(request):
online_ips = cache.get("online_ips", [])
online_ips_num = 0
if online_ips:
online_ips_num = len(online_ips)
return JsonResponse({'online_ips_num': online_ips_num})
132
不知道是不是因为梯子的原因,几秒钟进来没卡过
是对方
厉害啊,界面真好看
嘿嘿! 谢谢
<script>alert('hello');</script>
<b>测试</b>
测试
999