From 67fe9a49b2c515a24806b3903d19870f5ae26f34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BC=BA?= <1206709430@qq.com> Date: Sun, 21 Mar 2021 22:02:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E6=97=A5=E5=BF=97=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E8=AE=BF=E9=97=AE=E8=80=85=E5=9C=B0=E5=9D=80=20bug?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dvadmin-backend/apps/vadmin/op_drf/middleware.py | 2 +- dvadmin-backend/apps/vadmin/utils/request_util.py | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/dvadmin-backend/apps/vadmin/op_drf/middleware.py b/dvadmin-backend/apps/vadmin/op_drf/middleware.py index ec6cce7..8deb8eb 100644 --- a/dvadmin-backend/apps/vadmin/op_drf/middleware.py +++ b/dvadmin-backend/apps/vadmin/op_drf/middleware.py @@ -33,7 +33,7 @@ class ApiLoggingMiddleware(MiddlewareMixin): # 请求含有password则用*替换掉(暂时先用于所有接口的password请求参数) if isinstance(body, dict) and body.get('password', ''): body['password'] = '*' * len(body['password']) - if not hasattr(response,'data'): + if not hasattr(response, 'data') or not isinstance(response.data, dict): response.data = {} info = { 'request_ip': getattr(request, 'request_ip', 'unknown'), diff --git a/dvadmin-backend/apps/vadmin/utils/request_util.py b/dvadmin-backend/apps/vadmin/utils/request_util.py index 37f8ee5..3de0db8 100644 --- a/dvadmin-backend/apps/vadmin/utils/request_util.py +++ b/dvadmin-backend/apps/vadmin/utils/request_util.py @@ -6,6 +6,7 @@ import logging from django.contrib.auth.models import AbstractBaseUser from django.contrib.auth.models import AnonymousUser +from django.core.cache import cache from django.urls.resolvers import ResolverMatch from rest_framework.authentication import BaseAuthentication from rest_framework.settings import api_settings as drf_settings @@ -165,12 +166,20 @@ def get_login_location(request, *args, **kwargs): """ import requests import eventlet # 导入eventlet这个模块 + request_ip = get_request_ip(request) + # 从缓存中获取 + location = cache.get(request_ip) + if location: + return location + # 通过api 获取,再缓存redis eventlet.monkey_patch(thread=False) # 必须加这条代码 with eventlet.Timeout(2, False): # 设置超时时间为2秒 - apiurl = "http://whois.pconline.com.cn/ip.jsp?ip=%s" % get_request_ip(request) + apiurl = "http://whois.pconline.com.cn/ip.jsp?ip=%s" % request_ip r = requests.get(apiurl) content = r.content.decode('GBK') - return content.replace('\r', '').replace('\n', '') + location = content.replace('\r', '').replace('\n', '') + cache.set(request_ip,location, 8640) + return location return ""