From 544d56b3646b2eb4d41c75c35abb0413f3359dbf Mon Sep 17 00:00:00 2001 From: liangliangyy Date: Thu, 19 Jan 2017 17:27:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B5=E9=9D=A2=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E8=80=97=E6=97=B6=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DjangoBlog/settings.py | 1 + blog/middleware.py | 50 ++++++++++++++++++++++++++++++ requirements.txt | 3 +- templates/share_layout/footer.html | 3 +- 4 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 blog/middleware.py diff --git a/DjangoBlog/settings.py b/DjangoBlog/settings.py index 8975987..ac6df0b 100644 --- a/DjangoBlog/settings.py +++ b/DjangoBlog/settings.py @@ -58,6 +58,7 @@ MIDDLEWARE_CLASSES = [ 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.http.ConditionalGetMiddleware', + 'blog.middleware.OnlineMiddleware' ] ROOT_URLCONF = 'DjangoBlog.urls' diff --git a/blog/middleware.py b/blog/middleware.py new file mode 100644 index 0000000..dccc53d --- /dev/null +++ b/blog/middleware.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python +# encoding: utf-8 + + +""" +@version: ?? +@author: liangliangyy +@license: MIT Licence +@contact: liangliangyy@gmail.com +@site: https://www.lylinux.org/ +@software: PyCharm +@file: middleware.py +@time: 2017/1/19 上午12:36 +""" + +import time +from ipware.ip import get_real_ip +from django.core.cache import cache + + +class OnlineMiddleware(object): + def process_request(self, request): + self.start_time = time.time() + + def process_view(self, request, view_func, view_args, view_kwargs): + """ + 处理当前在线人数 + """ + http_user_agent = request.META.get('HTTP_USER_AGENT', []) + if 'Spider' in http_user_agent or 'spider' in http_user_agent: + return + + online_ips = cache.get("online_ips", []) + + if online_ips: + online_ips = cache.get_many(online_ips).keys() + + ip = get_real_ip(request) + + cache.set(ip, 0, 5 * 60) + + if ip not in online_ips: + online_ips.append(ip) + + cache.set("online_ips", online_ips) + + def process_response(self, request, response): + cast_time = time.time() - self.start_time + response.content = response.content.replace(b'', str.encode(str(cast_time)[:5])) + return response diff --git a/requirements.txt b/requirements.txt index 6905087..64266d6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,4 +13,5 @@ requests Unidecode Whoosh mistune -pygments \ No newline at end of file +pygments +django-ipware \ No newline at end of file diff --git a/templates/share_layout/footer.html b/templates/share_layout/footer.html index 6871e72..4196155 100644 --- a/templates/share_layout/footer.html +++ b/templates/share_layout/footer.html @@ -22,7 +22,8 @@ Django  |  LiangLiangyy - + | + 本页面加载耗时:s