在线人数
实现逻辑是,当一个用户访问,把用户的ip作为key放到cache中,然后设置online_ips 作为key来存放所有的ip,每次请求会先取出online_ips 的所有值,任何在根据这个list 来从cache中取出依然存在的ip,再次存入online_ips。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
|
from django.core.cache import cache from django.utils.deprecation import MiddlewareMixin
from HuberyBlog.settings import EXCLUDE_URL
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: 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
|
什么是 utf8mb4
utf8mb4 是 utf8 的超集,理论上原来使用 utf8,然后将字符集修改为 utf8mb4,也不会对已有的utf8 编码读取产生任何问题。